on master help sign in
Infer record casts and unit construction
commit0bc5113cb3e129657eac7256483df62fbd1f8c03 authoriko <mail@iko.soy> dateSat 31 Oct 2026, 00:24 (21 hours ago) parent54852d4
22 files changed+1061−295
docs/compiler.md+3−1 docs/prelude-inventory.md+1−1 docs/status.md+7−6 jibb-dev/lib/jibb.hoon+28−9 tests/golden/doc-grammar-06-cart-store/types.txt+1−1 tests/golden/prelude-list-helpers/types.txt+1−1 tests/golden/prelude-unit-list-transforms/types.txt+4−4 tests/golden/types-record-cast-context/about.txt+4 tests/golden/types-record-cast-context/modules.txt+1 tests/golden/types-record-cast-context/source.jibb+24 tests/golden/types-record-cast-context/tokens.txt+234 tests/golden/types-record-cast-context/tree.txt+105 tests/golden/types-record-cast-context/types.txt+49 tests/golden/types-unit-construction/about.txt+4 tests/golden/types-unit-construction/modules.txt+1 tests/golden/types-unit-construction/source.jibb+29 tests/golden/types-unit-construction/tokens.txt+168 tests/golden/types-unit-construction/tree.txt+71 tests/golden/types-unit-construction/types.txt+20 tests/lib/jibb-module-scope.hoon+14−1 tests/lib/jibb.hoon+283−271 tests/type-module-scope/expected.txt+9
docs/compiler.md+3−1
@@ -60,7 +60,7 @@ The inference fragment supports fixed auras, unrestricted `@`, one-way widening
6060
6161String interpolation infers its pieces in order and preserves substitutions and pending constraints. A piece with a known atom aura, unrestricted `@`, or a tape `(list @tD)` is accepted; an isolated decimal literal takes its normal `@ud` default. A known cell reports that it needs a printer, and an explicitly generic atom asks for an aura at its use site. Loobeans, term singletons, non-tape collections, open types and a type fixed only later remain unsupported in this fragment.
6262
63−A change can replace uniquely named fields on a fully known, faced record spine, including through a nested wing. Replacements receive the field type as context, substitutions and pending constraints are retained, and the resulting type remains the original record. Missing fields, empty changes and definite replacement mismatches report sites; the expected-type site is the edit, since the original field declaration location is not retained. Unknown or partly unfaced spines, ambiguous fields and repeated edits remain unsupported. The cart-store example’s `update` infers in this fragment; store kind and declaration checking remain unfinished.
63+A change can replace uniquely named fields on a fully known, faced record spine, including through a nested wing. Replacements receive the field type as context, substitutions and pending constraints are retained, and the resulting type remains the original record. Missing fields, empty changes and definite replacement mismatches report sites; the expected-type site is the edit, since the original field declaration location is not retained. Unknown or partly unfaced spines, ambiguous fields and repeated edits remain unsupported. A cast to a known record also supplies field context to a tuple or record initializer, including nested list and union fields. The expected-type site is the cast mold; the original field declaration location is not retained. The cart-store example’s `init` and `update` infer in this fragment; store kind and declaration checking remain unfinished.
6464
6565For 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.
6666
@@ -68,6 +68,8 @@ Multi-argument calls form one right-nested sample: `f a b c` supplies `[a [b c]]
6868
6969A 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. A known gate sample also supplies context to corresponding positions of a single tuple or record argument, including nested cells; a zero literal can therefore fit a list position. A bound zero constant still remains unsupported rather than a definite mismatch, and an unknown callee does not supply context. 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.
7070
71+A backtick constructs a unit when the supplied prelude has the validated standard `unit` template. Its payload is inferred normally, retaining pending literals and generic variables; nested units work and the prelude’s `some` becomes available. Unit payloads that require contextual matching, unrelated union identities, and missing or altered prelude templates remain unsupported.
72+
7173A 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.
7274
7375A known closed union with two or more arms can be matched when each arm provably covers or excludes each remaining case. The checker first tries whole cases; when a pattern splits a case, it can expand known `?` positions into their two noun values, up to 64 alternatives across the union. Binders retain the original case type, and one arm may bind several refinements of that case. It reports missing alternatives and arms already covered, checks tags by noun value, and supports imported and generic union cases. Other partial patterns, expansions above the limit, binders spanning distinct cases, differing arm result types and some complex two-arm subjects remain unsupported; contextual union-pattern branches also remain unsupported. The Grammar’s `step` block infers in this fragment, but its module is not yet checked.
docs/prelude-inventory.md+1−1
@@ -20,7 +20,7 @@ Hoon `+$` arms are marked **mold** below; `++` arms can be gates, doors or mold
2020
2121`biff`, `bind`, `bond`, `both`, `clap`, `clef`, `drop`, `fall`, `flit`, `hunt`, `lift`, `mate`, `need`, `some`.
2222
23−The following is an audit of the Hoon 135 bodies, not a completed Jibb interface. The partial checker infers `fall` and `need`; the remaining written implementations have been parsed, but complete checker validation remains outstanding. Backend validation remains outstanding for all of them.
23+The following is an audit of the Hoon 135 bodies, not a completed Jibb interface. The partial checker infers `fall`, `need` and `some`; the remaining written implementations have been parsed, but complete checker validation remains outstanding. Backend validation remains outstanding for all of them.
2424
2525| Name | Hoon behavior | Jibb status |
2626| --- | --- | --- |
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
1919
2020## Milestone 2: in progress
2121
22−The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass selected Hoon atoms, term singletons, nested faced or unfaced cells, supported disjoint unions and opaque standard collections from `/sur` molds and marks into inference. Collections retain their names and supported arguments for printing and unification; nested supported union arguments are retained too. The bridge trusts unchanged results from the source-aware reader; a materialized type graph alone cannot reveal cases Hoon already collapsed. The source-validated standard prelude `list` mold shares this representation with imported lists; other Jibb-written collection molds and most prelude collection operations remain unsupported; malformed names and arities fail closed. Selected self-recursive `/sur` molds cross as opaque module-and-name identities; aliases, foreign references, recursive marks, unfolding and construction remain unsupported. The reader handles mark samples, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, certain ordered-map fields, direct `$^` unions whose cases can be proved disjoint, and one verified explicit union argument in a list, set, map or unit. Ambiguous recursive origins fail closed; recognizable explicit unions are checked from source before Hoon can collapse their cases, as @iko confirmed for imported `$%`, `$?` and `$^`, while other nested unions, nested ordered maps, general union disjointness and complete import integration remain unfinished. Opt-in structured reader APIs preserve successful graphs and distinguish definite unsupported-aura and core evidence from failures the reader cannot prove; unverified union disjointness and name-only vase recognition remain unsupported. They revalidate and re-walk failed types. An opt-in partial checker entry point consumes unchanged reader results and reports definite aura or core errors at imported mold use sites when their inputs are unique. Ordered replay covers nested cell samples, record and function casts, and non-generic same-module aliases; unsupported prefixes, cycles and shadowing stop it. Union molds, generic applications, transitive modules and unsupported reader outcomes remain generic. Replay repeats inference and may add work. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and a source-derived partial prelude interface, caches completed interfaces per run, and detects missing sources and cycles. It does not yet check API or kind semantics, and the prelude inventory is incomplete. The inference fragment supports unrestricted `@`, selected one-way widenings including aura-family ancestors, generalized atom constraints arising from explicit capitals or bare sample binders, acyclic local value definitions with captures, selected single self-recursive top-level and local gates, simple and nonrecursive generic mold aliases, selected faced record casts and field reads, and contextual tags, `~` and constructors for closed disjoint unions, including direct nonrecursive generic unions and propagation through complete loobean and unit-shaped branches in casts and known union-sample calls, including nested branches. Multi-argument calls form a right-nested sample, retain known faces and shared type variables, and can use known sample positions to contextualize list and union arguments. A definite mismatch points to the failing argument when the fragment can establish it, otherwise to the combined sample; unsupported contextual forms still fail closed. For a supported recursive gate, the checker infers the sample first and uses its exact type, including field faces, for one monomorphic self reference. It generalizes after the body is checked; subsequent uses instantiate it independently. Incompatible recursive arguments can report the gate and argument sites. For a complete loobean branch with one direct self-call arm, a separately inferred closed base type can seed the recursive result before the whole body is checked. Open or pending base types do not seed it; other branch shapes remain subject to the fragment’s existing limits. A supported single local recursive gate also uses a monomorphic self reference and generalizes variables free of the enclosing environment after checking its body; captured variables remain shared. The checker collects written capitals per `++` before inference, excluding nested definitions: a capital used in an enclosing definition is shared with its locals even when written later, while a capital introduced only in a local definition is generalized there. Sibling locals can introduce independent capitals with the same spelling; generic mold parameters keep their own scope. Top-level groups of syntactic gates are inferred together with monomorphic placeholders and shared substitutions, then generalized only after the whole group checks; downstream uses and library interfaces instantiate those schemes independently. A dependency graph identifies groups with two iterative depth-first passes; its conservative local-reference edges can reject otherwise valid programs. Local mutual groups, polymorphic recursion, value cycles, unresolved literal constraints and unresolved branch joins remain unsupported. Reporting repeats inference for a single recursive gate outside a group; grouped reports use the stored schemes. Its performance cost remains unmeasured. String interpolation accepts known atom auras, unrestricted `@`, tapes and isolated decimal literals; a known cell asks for a printer, and an explicitly generic atom asks for an aura. Loobeans, term singletons, non-tape collections, open types and a type fixed only later remain unsupported. A known closed union with two or more arms supports patterns that provably cover or exclude each remaining case, including payload binders, imported and generic cases, and binder-free catch-alls. Partial boolean patterns can split known `?` positions into their two noun values, up to 64 alternatives across the union; binders retain their original case type. Missing alternatives and covered arms are reported. Other partial patterns, expansions above the limit, binders spanning distinct cases, differing arm result types, some complex two-arm subjects and contextual union-pattern branches remain unsupported. The Grammar’s `step` block infers in this fragment, but its module is not yet checked. Known faced records support uniquely named field changes, including nested wings, with field context passed to replacements and the original record type retained. Missing fields, empty changes and definite mismatches report sites; the expected-type site is the edit because the original field declaration location is not retained. Unknown or partly unfaced spines, ambiguous fields and repeated edits remain unsupported. The cart-store example’s `update` now infers, while its kind, declarations and full module remain unchecked. Contextual null-headed cells fit their cases, but do not supply a `|=%$` constructor; unresolved nulls remain pending and are reported separately from tags. A known union of `~` and a null-headed cell supports a complete `~` / `[~ value]` branch in either order, including shadow checks; unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported. This fragment infers the prelude’s `fall` and `need` signatures. With the validated prelude list and a known cast or gate sample, empty, nonempty and nested list literals infer their element types, including contextual union tags; a mismatched element names both sites. In that context `~` and zero-valued terms fit an empty list, and two-item unfaced cells form cons lists, including nested cons and imported-list contexts; invalid heads or tails name both sites. A known gate sample also supplies context to matching positions in a single tuple or record argument, including nested cells; zero literals can fit list positions. A bound zero constant remains unsupported rather than a definite mismatch, and an unknown callee does not supply context. Faced or longer cells and a missing or altered prelude list fail closed. A known list result also supplies context through complete loobean, unit-shaped and list-shaped branches, including recursive and nested branches. For a known standard list with a supported element type, a complete `~` / `[item rest]` branch infers the element and tail types in either arm order and checks binders for shadowing. Uncontextualized list construction, unknown subjects, unsupported element types and other or incomplete list patterns remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. Other variable-dependent face merges remain unsupported. Forced equality of distinct written capitals now reports both source sites, following @iko’s decision; forcing one to a concrete type remains unsupported. Imported record spines with repeated faces fail closed where used, but only with a generic unsupported diagnostic. Hoon may erase unfaced nested-cell boundaries, so the check can conservatively reject valid names in distinct erased scopes. Supported closed unions print using an in-scope name or imported alias; an unnamed nongeneric union prints its cases, parenthesized when nested. The latter is print-only. Generic union types retain all arguments in their printed name; if that name is unavailable, the partial printer reports the limitation. Different import faces for the same origin remain compatible; compatibility across distinct union origins and some generic-argument comparisons remain unsupported. Nonrecursive generic aliases can reorder, repeat or omit parameters while retaining a union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do differing-variable face constraints in a union payload. A transitive generic union whose name is unavailable is reported as unsupported instead of hiding its arguments. Unfixed decimal literals default to `@ud` in gate-free inferred types; mutually recursive local groups and recursive molds, general branch tag context, other constraint cases and defaulting inside gate types still need work. Collection recognition checks the originating core and fails closed on shadows or unsupported Ford subject shapes; a wrapper regression also rejects forged subjects, samples and tails. Its golden fixtures include three real Tlon files. A Clay test passes a Ford-built nested union through the reader into partial inference. The partial prelude includes `murn`, `join`, `snip`, `rear` and the newly agreed shared-type `clap`, parsed but still awaiting checker and backend validation, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
22+The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass selected Hoon atoms, term singletons, nested faced or unfaced cells, supported disjoint unions and opaque standard collections from `/sur` molds and marks into inference. Collections retain their names and supported arguments for printing and unification; nested supported union arguments are retained too. The bridge trusts unchanged results from the source-aware reader; a materialized type graph alone cannot reveal cases Hoon already collapsed. The source-validated standard prelude `list` mold shares this representation with imported lists; other Jibb-written collection molds and most prelude collection operations remain unsupported; malformed names and arities fail closed. Selected self-recursive `/sur` molds cross as opaque module-and-name identities; aliases, foreign references, recursive marks, unfolding and construction remain unsupported. The reader handles mark samples, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, certain ordered-map fields, direct `$^` unions whose cases can be proved disjoint, and one verified explicit union argument in a list, set, map or unit. Ambiguous recursive origins fail closed; recognizable explicit unions are checked from source before Hoon can collapse their cases, as @iko confirmed for imported `$%`, `$?` and `$^`, while other nested unions, nested ordered maps, general union disjointness and complete import integration remain unfinished. Opt-in structured reader APIs preserve successful graphs and distinguish definite unsupported-aura and core evidence from failures the reader cannot prove; unverified union disjointness and name-only vase recognition remain unsupported. They revalidate and re-walk failed types. An opt-in partial checker entry point consumes unchanged reader results and reports definite aura or core errors at imported mold use sites when their inputs are unique. Ordered replay covers nested cell samples, record and function casts, and non-generic same-module aliases; unsupported prefixes, cycles and shadowing stop it. Union molds, generic applications, transitive modules and unsupported reader outcomes remain generic. Replay repeats inference and may add work. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and a source-derived partial prelude interface, caches completed interfaces per run, and detects missing sources and cycles. It does not yet check API or kind semantics, and the prelude inventory is incomplete. The inference fragment supports unrestricted `@`, selected one-way widenings including aura-family ancestors, generalized atom constraints arising from explicit capitals or bare sample binders, acyclic local value definitions with captures, selected single self-recursive top-level and local gates, simple and nonrecursive generic mold aliases, selected faced record casts and field reads, and contextual tags, `~` and constructors for closed disjoint unions, including direct nonrecursive generic unions and propagation through complete loobean and unit-shaped branches in casts and known union-sample calls, including nested branches. Multi-argument calls form a right-nested sample, retain known faces and shared type variables, and can use known sample positions to contextualize list and union arguments. A definite mismatch points to the failing argument when the fragment can establish it, otherwise to the combined sample; unsupported contextual forms still fail closed. For a supported recursive gate, the checker infers the sample first and uses its exact type, including field faces, for one monomorphic self reference. It generalizes after the body is checked; subsequent uses instantiate it independently. Incompatible recursive arguments can report the gate and argument sites. For a complete loobean branch with one direct self-call arm, a separately inferred closed base type can seed the recursive result before the whole body is checked. Open or pending base types do not seed it; other branch shapes remain subject to the fragment’s existing limits. A supported single local recursive gate also uses a monomorphic self reference and generalizes variables free of the enclosing environment after checking its body; captured variables remain shared. The checker collects written capitals per `++` before inference, excluding nested definitions: a capital used in an enclosing definition is shared with its locals even when written later, while a capital introduced only in a local definition is generalized there. Sibling locals can introduce independent capitals with the same spelling; generic mold parameters keep their own scope. Top-level groups of syntactic gates are inferred together with monomorphic placeholders and shared substitutions, then generalized only after the whole group checks; downstream uses and library interfaces instantiate those schemes independently. A dependency graph identifies groups with two iterative depth-first passes; its conservative local-reference edges can reject otherwise valid programs. Local mutual groups, polymorphic recursion, value cycles, unresolved literal constraints and unresolved branch joins remain unsupported. Reporting repeats inference for a single recursive gate outside a group; grouped reports use the stored schemes. Its performance cost remains unmeasured. String interpolation accepts known atom auras, unrestricted `@`, tapes and isolated decimal literals; a known cell asks for a printer, and an explicitly generic atom asks for an aura. Loobeans, term singletons, non-tape collections, open types and a type fixed only later remain unsupported. A known closed union with two or more arms supports patterns that provably cover or exclude each remaining case, including payload binders, imported and generic cases, and binder-free catch-alls. Partial boolean patterns can split known `?` positions into their two noun values, up to 64 alternatives across the union; binders retain their original case type. Missing alternatives and covered arms are reported. Other partial patterns, expansions above the limit, binders spanning distinct cases, differing arm result types, some complex two-arm subjects and contextual union-pattern branches remain unsupported. The Grammar’s `step` block infers in this fragment, but its module is not yet checked. Known faced records support uniquely named field changes, including nested wings, with field context passed to replacements and the original record type retained. Missing fields, empty changes and definite mismatches report sites; the expected-type site is the edit because the original field declaration location is not retained. Unknown or partly unfaced spines, ambiguous fields and repeated edits remain unsupported. A known record cast supplies field context to its tuple or record initializer, including nested list and union fields; mismatch diagnostics use the cast mold because the original field declaration location is not retained. The cart-store example’s `init` and `update` now infer, while its kind, declarations and full module remain unchecked. Backtick unit construction uses the validated standard prelude unit template, infers its payload without losing pending constraints, and makes the prelude’s `some` available. Context-dependent payload matching and missing or altered prelude unit templates remain unsupported. Contextual null-headed cells fit their cases, but do not supply a `|=%$` constructor; unresolved nulls remain pending and are reported separately from tags. A known union of `~` and a null-headed cell supports a complete `~` / `[~ value]` branch in either order, including shadow checks; unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported. This fragment infers the prelude’s `fall` and `need` signatures. With the validated prelude list and a known cast or gate sample, empty, nonempty and nested list literals infer their element types, including contextual union tags; a mismatched element names both sites. In that context `~` and zero-valued terms fit an empty list, and two-item unfaced cells form cons lists, including nested cons and imported-list contexts; invalid heads or tails name both sites. A known gate sample also supplies context to matching positions in a single tuple or record argument, including nested cells; zero literals can fit list positions. A bound zero constant remains unsupported rather than a definite mismatch, and an unknown callee does not supply context. Faced or longer cells and a missing or altered prelude list fail closed. A known list result also supplies context through complete loobean, unit-shaped and list-shaped branches, including recursive and nested branches. For a known standard list with a supported element type, a complete `~` / `[item rest]` branch infers the element and tail types in either arm order and checks binders for shadowing. Uncontextualized list construction, unknown subjects, unsupported element types and other or incomplete list patterns remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. Other variable-dependent face merges remain unsupported. Forced equality of distinct written capitals now reports both source sites, following @iko’s decision; forcing one to a concrete type remains unsupported. Imported record spines with repeated faces fail closed where used, but only with a generic unsupported diagnostic. Hoon may erase unfaced nested-cell boundaries, so the check can conservatively reject valid names in distinct erased scopes. Supported closed unions print using an in-scope name or imported alias; an unnamed nongeneric union prints its cases, parenthesized when nested. The latter is print-only. Generic union types retain all arguments in their printed name; if that name is unavailable, the partial printer reports the limitation. Different import faces for the same origin remain compatible; compatibility across distinct union origins and some generic-argument comparisons remain unsupported. Nonrecursive generic aliases can reorder, repeat or omit parameters while retaining a union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do differing-variable face constraints in a union payload. A transitive generic union whose name is unavailable is reported as unsupported instead of hiding its arguments. Unfixed decimal literals default to `@ud` in gate-free inferred types; mutually recursive local groups and recursive molds, general branch tag context, other constraint cases and defaulting inside gate types still need work. Collection recognition checks the originating core and fails closed on shadows or unsupported Ford subject shapes; a wrapper regression also rejects forged subjects, samples and tails. Its golden fixtures include three real Tlon files. A Clay test passes a Ford-built nested union through the reader into partial inference. The partial prelude includes `murn`, `join`, `snip`, `rear` and the newly agreed shared-type `clap`, parsed but still awaiting checker and backend validation, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
2323
2424The shared prelude interface reserves every name present in the supplied vendored source and makes only supported inferred entries available, including `list`, `unit`, `same`, `fall`, `need`, `lure`, `weld`, `snoc` and `turn`. The validated standard `list` mold is injected when the prelude’s own gates are inferred; `weld` and `turn` have ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through direct or transitive mold aliases. List-dependent prelude mold aliases remain unsupported because their templates are prepared before injection. Unsupported entries such as most list helpers remain reserved but unavailable; backend validation of the helpers remains outstanding. All callers use the same prelude origin, so a library can export a type containing unqualified `(unit A)` to another module. Preparation rejects empty, malformed, conflicting or import-bearing source; the prepared value is trusted and must come unchanged from `+prepare-prelude`. The module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship. The source and checker remain incomplete, so this does not establish complete shadowing coverage or a checked module.
2525
@@ -39,8 +39,8 @@ What the plan asks for, and where it is:
3939
4040Besides the plan's list:
4141
42−- 533 golden cases: 317 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 533-case corpus passed under `urbit eval` in 64.1 s. The fake ship passed all 539 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 33.1 s for sync and 38.0 s for tests. The importer golden compares 149 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
42+- 535 golden cases: 319 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 535-case corpus passed under `urbit eval` in 66.0 s. The fake ship passed all 541 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 33.4 s for sync and 40.8 s for tests. The importer golden compares 149 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
4444- `tools/testdata/selftest` (22 checks) and `tools/testdata/ship-selftest` test the tools themselves.
4545- Two independent audits before 7c739b7, one of which compared the library with a reference parser written in Python from the doc over about 19,000 generated programs. Before ab797a9, a second Python parser, written from the decisions, agreed with the library on 8,000 generated programs and 900 hand-written probes.
4646- Speed: starting `urbit eval` and building the library takes about 8 s. After that, a 2,000-line module of 400 definitions parses in about a second. Loops over definitions, arms, lines and items grow no stack; nesting costs a few stack frames a level, and 100,000 nested brackets still parse (library section 3).
@@ -96,14 +96,15 @@ Besides the plan's list:
9696| ddba633 | 2026-10-30 | Infer top-level mutually recursive gates |
9797| 9f1517e | 2026-10-30 | Infer whole-case union patterns and prelude `turn` |
9898| 9dd35c8 | 2026-10-31 | Match finite boolean refinements of union cases |
99−| This change | 2026-10-31 | Contextualize tuple calls and infer known record changes |
99+| 54852d4 | 2026-10-31 | Contextualize tuple calls and infer known record changes |
100+| This change | 2026-10-31 | Contextualize record initializers and infer unit construction |
100101
101102## Checking it
102103
103104On a machine set up as [development.md](development.md) says:
104105
105106```
106−tools/golden # 533 cases under urbit eval
107+tools/golden # 535 cases under urbit eval
107108tools/importer-test # the Hoon importer fixture projection
108109tools/type-import-test # the importer/checker bridge fixture
109110tools/type-mark-test # the mark/checker bridge fixture
@@ -113,7 +114,7 @@ tools/testdata/selftest # the tools themselves
113114tools/doc-blocks docs/spec # the doc's examples are golden cases
114115tools/ship start
115116tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
116−tools/ship test # the same 533 cases as -test arms on the ship
117+tools/ship test # the same 535 cases as -test arms on the ship
117118tools/testdata/ship-selftest
118119tools/ship check-commit # |commit stores .jibb files
119120tools/clay-fixtures # example /sur files and marks build through Clay
jibb-dev/lib/jibb.hoon+28−9
@@ -6938,6 +6938,20 @@
69386938 [%| ["change field and replacement do not unify" ~[[at.entry (site-type-note "expected replacement" expected sub.state.p.value)] [(span-of val.entry) (site-type-note "replacement" typ.p.value sub.state.p.value)]]]]
69396939 $(edits t.edits, state state.p.value(sub sub.fit, next next.fit), seen [name.entry seen])
69406940::
6941+:: Backtick constructs the canonical prelude unit, after checking its
6942+:: prepared template has the standard null and [~ u=A] cases.
6943+++ standard-unit-template
6944+ |= [template=ischeme at=path]
6945+ ^- ?
6946+ ?. =(at /lib/jibb/prelude/jibb) |
6947+ ?~ vars.template |
6948+ ?^ t.vars.template |
6949+ =/ v=@ud i.vars.template
6950+ =/ nil=itype [%const [%null %n 0 '~']]
6951+ =/ expected=itype
6952+ [%union ~[nil [%cell nil [%face %u [%var v]]]] `[at %unit] `%unit ~[[%var v]]]
6953+ =(typ.template expected)
6954+::
69416955++ infer-fragment
69426956 |= [e=expr env=ienv state=istate]
69436957 ^- iresult
@@ -6955,6 +6969,17 @@
69556969 %term [%& [%tag next.state lit.e |] state(next +(next.state), tags [[next.state lit.e] tags.state])]
69566970 %null [%& [%tag next.state lit.e |] state(next +(next.state), tags [[next.state lit.e] tags.state])]
69576971 ==
6972+ %unit
6973+ ?~ prelude.state [%| ["unit construction needs the standard prelude in partial inference" ~]]
6974+ =/ standard=(unit ischeme) (find-jibb-mold %unit u.prelude.state)
6975+ ?~ standard [%| ["unit construction needs the standard prelude in partial inference" ~]]
6976+ ?. (standard-unit-template u.standard at.u.prelude.state)
6977+ [%| ["unit construction needs the standard prelude in partial inference" ~]]
6978+ =/ value=iresult $(e val.e)
6979+ ?: ?=(%| -.value) value
6980+ =/ result=(unit itype) (template-apply u.standard ~[typ.p.value])
6981+ ?~ result [%| ["unit construction is not supported by partial inference" ~]]
6982+ [%& u.result state.p.value]
69586983 %str (infer-string-pieces pieces.e env state)
69596984 %wing
69606985 ?~ names.e [%| ["empty wing" ~]]
@@ -7060,13 +7085,7 @@
70607085 ?^ diag [%| u.diag]
70617086 [%| ["cast mold is not supported by partial inference" ~]]
70627087 =/ value=iresult
7063− ?: &(?=(%union -.typ.u.target) (context-union-branch val.e))
7064− (infer-union-context val.e typ.u.target env state.u.target at.shape.e)
7065− ?: &(?=(%collection -.typ.u.target) =(%list name.typ.u.target) (context-union-branch val.e))
7066− (infer-union-context val.e typ.u.target env state.u.target at.shape.e)
7067− ?: &(?=(%collection -.typ.u.target) =(%list name.typ.u.target) (context-list-expression val.e))
7068− (infer-list-context val.e typ.u.target env state.u.target at.shape.e)
7069− $(e val.e, state state.u.target)
7088+ (infer-call-context-arg val.e typ.u.target env state.u.target at.shape.e)
70707089 ?: ?=(%| -.value) value
70717090 =/ fit=ifit (itype-fit typ.p.value typ.u.target sub.state.p.value next.state.p.value)
70727091 ?: ?=(%unknown -.fit) [%| ["cast constraint is not supported by partial inference" ~]]
@@ -7155,8 +7174,8 @@
71557174 ?: ?=(%unknown -.first) ~
71567175 $(args t.args, actual tal.actual, expected tal.expected, sub sub.first, next next.first)
71577176::
7158−:: Context can help each argument while the final fit still checks the
7159−:: complete right-nested sample, including any faces on its positions.
7177+:: Context can help a call argument or cast value while the final fit
7178+:: checks the complete right-nested type, including any written faces.
71607179::
71617180++ infer-call-context-arg
71627181 |= [e=expr expected=itype env=ienv state=istate context=span]
tests/golden/doc-grammar-06-cart-store/types.txt+1−1
@@ -3,5 +3,5 @@ partial inference; module not checked
33+$ cart-action: cases proven disjoint; mold not checked
44+$ poke: not checked
55++ main: name is not available to partial inference
6−++ init: cast constraint is not supported by partial inference
6+++ init: [items=(list @t) open=?]
77++ update: $-([a=cart-action s=[items=(list @t) open=?]] [items=(list @t) open=?])
tests/golden/prelude-list-helpers/types.txt+1−1
@@ -35,7 +35,7 @@ partial inference; module not checked
3535+$ tree: cases proven disjoint; mold not checked
3636+$ each: cases proven disjoint; mold not checked
3737+$ bloq: not checked
38−++ some: expression is not supported by partial inference
38+++ some: unit construction needs the standard prelude in partial inference
3939++ lure: cast mold is not supported by partial inference
4040++ snoc: sample mold is not supported by partial inference
4141++ flop: sample mold is not supported by partial inference
tests/golden/prelude-unit-list-transforms/types.txt+4−4
@@ -35,14 +35,14 @@ partial inference; module not checked
3535+$ tree: cases proven disjoint; mold not checked
3636+$ each: cases proven disjoint; mold not checked
3737+$ bloq: not checked
38−++ some: expression is not supported by partial inference
38+++ some: unit construction needs the standard prelude in partial inference
3939++ lure: cast mold is not supported by partial inference
4040++ snoc: sample mold is not supported by partial inference
4141++ flop: sample mold is not supported by partial inference
4242++ drop: unit branch results need unsupported inference
43−++ bind: expression is not supported by partial inference
43+++ bind: unit construction needs the standard prelude in partial inference
4444++ biff: unit branch results need unsupported inference
45−++ both: expression is not supported by partial inference
45+++ both: unit construction needs the standard prelude in partial inference
4646++ clap: branch pattern is not supported by partial inference
4747++ clef: branch pattern is not supported by partial inference
4848++ skim: sample mold is not supported by partial inference
@@ -51,7 +51,7 @@ partial inference; module not checked
5151++ lien: sample mold is not supported by partial inference
5252++ roll: sample mold is not supported by partial inference
5353++ reel: sample mold is not supported by partial inference
54−++ flit: expression is not supported by partial inference
54+++ flit: unit construction needs the standard prelude in partial inference
5555++ murn: sample mold is not supported by partial inference
5656++ join: sample mold is not supported by partial inference
5757++ snip: sample mold is not supported by partial inference
tests/golden/types-record-cast-context/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Literals by context: cells become records, tuples or list cons according to their expected type; Tag resolution: tags and `~` take their type from context.
2+tests: Record casts supply nested field context to lists and union tags, including the cart-store initializer. Faced and unfaced cells fit when their fields agree; incorrect faces, arity, tags, list items and other fields fail. Shared capitals stay shared, unrelated pending literals remain pending and uncertain constraints fail closed. Diagnostic expected-type sites point to the cast mold, not the original field declaration.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-record-cast-context/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the prepared prelude.
tests/golden/types-record-cast-context/source.jibbnew file+24
@@ -0,0 +1,24 @@
1++$ state [items=(list @t) open=?]
2++$ msg
3+ %go
4+ %stay
5++$ inner [payload=msg xs=(list @t)]
6++$ outer [data=inner title=@t]
7+++ init ^- state [~ %.n]
8+++ full ^- state [~["x"] %.y]
9+++ nested ^- outer [[%go ~["x"]] "ok"]
10+++ faced ^- inner [payload=%stay xs=~]
11+++ wrong-face ^- inner [wrong=%go xs=~]
12+++ wrong-count ^- inner [%go ~ "extra"]
13+++ wrong-tag ^- inner [%oops ~]
14+++ wrong-item ^- inner [%go ~[~zod]]
15+++ wrong-flag ^- state [~ "no"]
16+++ shared |= x=A ^- [left=A right=A] [x x]
17+++ forced |= x=A ^- [left=A right=A] [x "hi"]
18+++ pending-tag
19+ ~& %unused
20+ ^- state [~ %.n]
21+++ pending-null
22+ ~& ~
23+ ^- state [~ %.n]
24+++ unknown |= x ^- [left=A right=A] [x x]
tests/golden/types-record-cast-context/tokens.txtnew file+234
@@ -0,0 +1,234 @@
1+1:1 glyph +$
2+1:4 name state
3+1:10 glyph [
4+1:11 tight name items
5+1:16 tight glyph =
6+1:17 tight glyph (
7+1:18 tight name list
8+1:23 aura @t
9+1:25 tight glyph )
10+1:27 name open
11+1:31 tight glyph =
12+1:32 tight glyph ?
13+1:33 tight glyph ]
14+2:1 NEWLINE
15+2:1 glyph +$
16+2:4 name msg
17+3:3 INDENT
18+3:3 lit %go
19+4:3 NEWLINE
20+4:3 lit %stay
21+5:1 DEDENT
22+5:1 NEWLINE
23+5:1 glyph +$
24+5:4 name inner
25+5:10 glyph [
26+5:11 tight name payload
27+5:18 tight glyph =
28+5:19 tight name msg
29+5:23 name xs
30+5:25 tight glyph =
31+5:26 tight glyph (
32+5:27 tight name list
33+5:32 aura @t
34+5:34 tight glyph )
35+5:35 tight glyph ]
36+6:1 NEWLINE
37+6:1 glyph +$
38+6:4 name outer
39+6:10 glyph [
40+6:11 tight name data
41+6:15 tight glyph =
42+6:16 tight name inner
43+6:22 name title
44+6:27 tight glyph =
45+6:28 tight aura @t
46+6:30 tight glyph ]
47+7:1 NEWLINE
48+7:1 glyph ++
49+7:4 name init
50+7:9 glyph ^-
51+7:12 name state
52+7:18 glyph [
53+7:19 tight lit ~
54+7:21 lit %.n
55+7:24 tight glyph ]
56+8:1 NEWLINE
57+8:1 glyph ++
58+8:4 name full
59+8:9 glyph ^-
60+8:12 name state
61+8:18 glyph [
62+8:19 tight glyph ~[
63+8:21 tight str "x"
64+8:24 tight glyph ]
65+8:26 lit %.y
66+8:29 tight glyph ]
67+9:1 NEWLINE
68+9:1 glyph ++
69+9:4 name nested
70+9:11 glyph ^-
71+9:14 name outer
72+9:20 glyph [
73+9:21 tight glyph [
74+9:22 tight lit %go
75+9:26 glyph ~[
76+9:28 tight str "x"
77+9:31 tight glyph ]
78+9:32 tight glyph ]
79+9:34 str "ok"
80+9:38 tight glyph ]
81+10:1 NEWLINE
82+10:1 glyph ++
83+10:4 name faced
84+10:10 glyph ^-
85+10:13 name inner
86+10:19 glyph [
87+10:20 tight name payload
88+10:27 tight glyph =
89+10:28 tight lit %stay
90+10:34 name xs
91+10:36 tight glyph =
92+10:37 tight lit ~
93+10:38 tight glyph ]
94+11:1 NEWLINE
95+11:1 glyph ++
96+11:4 name wrong-face
97+11:15 glyph ^-
98+11:18 name inner
99+11:24 glyph [
100+11:25 tight name wrong
101+11:30 tight glyph =
102+11:31 tight lit %go
103+11:35 name xs
104+11:37 tight glyph =
105+11:38 tight lit ~
106+11:39 tight glyph ]
107+12:1 NEWLINE
108+12:1 glyph ++
109+12:4 name wrong-count
110+12:16 glyph ^-
111+12:19 name inner
112+12:25 glyph [
113+12:26 tight lit %go
114+12:30 lit ~
115+12:32 str "extra"
116+12:39 tight glyph ]
117+13:1 NEWLINE
118+13:1 glyph ++
119+13:4 name wrong-tag
120+13:14 glyph ^-
121+13:17 name inner
122+13:23 glyph [
123+13:24 tight lit %oops
124+13:30 lit ~
125+13:31 tight glyph ]
126+14:1 NEWLINE
127+14:1 glyph ++
128+14:4 name wrong-item
129+14:15 glyph ^-
130+14:18 name inner
131+14:24 glyph [
132+14:25 tight lit %go
133+14:29 glyph ~[
134+14:31 tight lit ~zod
135+14:35 tight glyph ]
136+14:36 tight glyph ]
137+15:1 NEWLINE
138+15:1 glyph ++
139+15:4 name wrong-flag
140+15:15 glyph ^-
141+15:18 name state
142+15:24 glyph [
143+15:25 tight lit ~
144+15:27 str "no"
145+15:31 tight glyph ]
146+16:1 NEWLINE
147+16:1 glyph ++
148+16:4 name shared
149+16:11 glyph |=
150+16:14 name x
151+16:15 tight glyph =
152+16:16 tight tvar A
153+16:18 glyph ^-
154+16:21 glyph [
155+16:22 tight name left
156+16:26 tight glyph =
157+16:27 tight tvar A
158+16:29 name right
159+16:34 tight glyph =
160+16:35 tight tvar A
161+16:36 tight glyph ]
162+16:38 glyph [
163+16:39 tight name x
164+16:41 name x
165+16:42 tight glyph ]
166+17:1 NEWLINE
167+17:1 glyph ++
168+17:4 name forced
169+17:11 glyph |=
170+17:14 name x
171+17:15 tight glyph =
172+17:16 tight tvar A
173+17:18 glyph ^-
174+17:21 glyph [
175+17:22 tight name left
176+17:26 tight glyph =
177+17:27 tight tvar A
178+17:29 name right
179+17:34 tight glyph =
180+17:35 tight tvar A
181+17:36 tight glyph ]
182+17:38 glyph [
183+17:39 tight name x
184+17:41 str "hi"
185+17:45 tight glyph ]
186+18:1 NEWLINE
187+18:1 glyph ++
188+18:4 name pending-tag
189+19:3 INDENT
190+19:3 glyph ~&
191+19:6 lit %unused
192+20:5 INDENT
193+20:5 glyph ^-
194+20:8 name state
195+20:14 glyph [
196+20:15 tight lit ~
197+20:17 lit %.n
198+20:20 tight glyph ]
199+21:1 DEDENT
200+21:1 DEDENT
201+21:1 NEWLINE
202+21:1 glyph ++
203+21:4 name pending-null
204+22:3 INDENT
205+22:3 glyph ~&
206+22:6 lit ~
207+23:5 INDENT
208+23:5 glyph ^-
209+23:8 name state
210+23:14 glyph [
211+23:15 tight lit ~
212+23:17 lit %.n
213+23:20 tight glyph ]
214+24:1 DEDENT
215+24:1 DEDENT
216+24:1 NEWLINE
217+24:1 glyph ++
218+24:4 name unknown
219+24:12 glyph |=
220+24:15 name x
221+24:17 glyph ^-
222+24:20 glyph [
223+24:21 tight name left
224+24:25 tight glyph =
225+24:26 tight tvar A
226+24:28 name right
227+24:33 tight glyph =
228+24:34 tight tvar A
229+24:35 tight glyph ]
230+24:37 glyph [
231+24:38 tight name x
232+24:40 name x
233+24:41 tight glyph ]
234+24:42 NEWLINE
tests/golden/types-record-cast-context/tree.txtnew file+105
@@ -0,0 +1,105 @@
1+(module
2+ (mold 1:1 state
3+ (cell 1:10
4+ (face 1:11 items
5+ (apply 1:17 list (aura 1:23 @t)))
6+ (face 1:27 open (flag 1:32))))
7+ (mold 2:1 msg
8+ (union 3:3 (const 3:3 %go) (const 4:3 %stay)))
9+ (mold 5:1 inner
10+ (cell 5:10
11+ (face 5:11 payload (ref 5:19 msg))
12+ (face 5:23 xs
13+ (apply 5:26 list (aura 5:32 @t)))))
14+ (mold 6:1 outer
15+ (cell 6:10
16+ (face 6:11 data (ref 6:16 inner))
17+ (face 6:22 title (aura 6:28 @t))))
18+ (value 7:1 init
19+ (cast 7:9
20+ (ref 7:12 state)
21+ (tuple 7:18 (lit 7:19 ~) (lit 7:21 %.n))))
22+ (value 8:1 full
23+ (cast 8:9
24+ (ref 8:12 state)
25+ (tuple 8:18
26+ (list 8:19 (str 8:21 "x"))
27+ (lit 8:26 %.y))))
28+ (value 9:1 nested
29+ (cast 9:11
30+ (ref 9:14 outer)
31+ (tuple 9:20
32+ (tuple 9:21
33+ (lit 9:22 %go)
34+ (list 9:26 (str 9:28 "x")))
35+ (str 9:34 "ok"))))
36+ (value 10:1 faced
37+ (cast 10:10
38+ (ref 10:13 inner)
39+ (tuple 10:19
40+ (face 10:20 payload (lit 10:28 %stay))
41+ (face 10:34 xs (lit 10:37 ~)))))
42+ (value 11:1 wrong-face
43+ (cast 11:15
44+ (ref 11:18 inner)
45+ (tuple 11:24
46+ (face 11:25 wrong (lit 11:31 %go))
47+ (face 11:35 xs (lit 11:38 ~)))))
48+ (value 12:1 wrong-count
49+ (cast 12:16
50+ (ref 12:19 inner)
51+ (tuple 12:25 (lit 12:26 %go) (lit 12:30 ~) (str 12:32 "extra"))))
52+ (value 13:1 wrong-tag
53+ (cast 13:14
54+ (ref 13:17 inner)
55+ (tuple 13:23 (lit 13:24 %oops) (lit 13:30 ~))))
56+ (value 14:1 wrong-item
57+ (cast 14:15
58+ (ref 14:18 inner)
59+ (tuple 14:24
60+ (lit 14:25 %go)
61+ (list 14:29 (lit 14:31 ~zod)))))
62+ (value 15:1 wrong-flag
63+ (cast 15:15
64+ (ref 15:18 state)
65+ (tuple 15:24 (lit 15:25 ~) (str 15:27 "no"))))
66+ (value 16:1 shared
67+ (gate 16:11
68+ (face 16:14 x (tvar 16:16 A))
69+ (cast 16:18
70+ (cell 16:21
71+ (face 16:22 left (tvar 16:27 A))
72+ (face 16:29 right (tvar 16:35 A)))
73+ (tuple 16:38 (wing 16:39 x) (wing 16:41 x)))))
74+ (value 17:1 forced
75+ (gate 17:11
76+ (face 17:14 x (tvar 17:16 A))
77+ (cast 17:18
78+ (cell 17:21
79+ (face 17:22 left (tvar 17:27 A))
80+ (face 17:29 right (tvar 17:35 A)))
81+ (tuple 17:38 (wing 17:39 x) (str 17:41 "hi")))))
82+ (value 18:1 pending-tag
83+ (body 19:3
84+ (trace 19:3
85+ (lit 19:6 %unused)
86+ (body 20:5
87+ (cast 20:5
88+ (ref 20:8 state)
89+ (tuple 20:14 (lit 20:15 ~) (lit 20:17 %.n)))))))
90+ (value 21:1 pending-null
91+ (body 22:3
92+ (trace 22:3
93+ (lit 22:6 ~)
94+ (body 23:5
95+ (cast 23:5
96+ (ref 23:8 state)
97+ (tuple 23:14 (lit 23:15 ~) (lit 23:17 %.n)))))))
98+ (value 24:1 unknown
99+ (gate 24:12
100+ (bind 24:15 x)
101+ (cast 24:17
102+ (cell 24:20
103+ (face 24:21 left (tvar 24:26 A))
104+ (face 24:28 right (tvar 24:34 A)))
105+ (tuple 24:37 (wing 24:38 x) (wing 24:40 x))))))
tests/golden/types-record-cast-context/types.txtnew file+49
@@ -0,0 +1,49 @@
1+partial inference; module not checked
2++$ state: not checked
3++$ msg: cases proven disjoint; mold not checked
4++$ inner: not checked
5++$ outer: not checked
6+++ init: [items=(list @t) open=?]
7+++ full: [items=(list @t) open=?]
8+++ nested: [data=[payload=msg xs=(list @t)] title=@t]
9+++ faced: [payload=msg xs=(list @t)]
10+++ wrong-face: cast mold and expression type do not unify
11+/tests/golden/types-record-cast-context/source.jibb:11:18: cast mold
12+++ wrong-face ^- inner [wrong=%go xs=~]
13+ ^
14+/tests/golden/types-record-cast-context/source.jibb:11:24: expression
15+++ wrong-face ^- inner [wrong=%go xs=~]
16+ ^
17+++ wrong-count: cast mold and expression type do not unify
18+/tests/golden/types-record-cast-context/source.jibb:12:19: cast mold
19+++ wrong-count ^- inner [%go ~ "extra"]
20+ ^
21+/tests/golden/types-record-cast-context/source.jibb:12:25: expression
22+++ wrong-count ^- inner [%go ~ "extra"]
23+ ^
24+++ wrong-tag: cast mold and expression type do not unify
25+/tests/golden/types-record-cast-context/source.jibb:13:17: cast mold
26+++ wrong-tag ^- inner [%oops ~]
27+ ^
28+/tests/golden/types-record-cast-context/source.jibb:13:23: expression
29+++ wrong-tag ^- inner [%oops ~]
30+ ^
31+++ wrong-item: list item does not fit its expected type
32+/tests/golden/types-record-cast-context/source.jibb:14:18: expected item has type @t
33+++ wrong-item ^- inner [%go ~[~zod]]
34+ ^
35+/tests/golden/types-record-cast-context/source.jibb:14:31: list item has type @p
36+++ wrong-item ^- inner [%go ~[~zod]]
37+ ^
38+++ wrong-flag: cast mold and expression type do not unify
39+/tests/golden/types-record-cast-context/source.jibb:15:18: cast mold has type [items=(list @t) open=?]
40+++ wrong-flag ^- state [~ "no"]
41+ ^
42+/tests/golden/types-record-cast-context/source.jibb:15:24: expression has type [(list @t) @t]
43+++ wrong-flag ^- state [~ "no"]
44+ ^
45+++ shared: $-(A [left=A right=A])
46+++ forced: explicit capital constraints are not supported by partial inference
47+++ pending-tag: tag needs context in partial inference
48+++ pending-null: `~` needs context in partial inference
49+++ unknown: cast constraint is not supported by partial inference
tests/golden/types-unit-construction/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Literals: a backtick constructs a `(unit A)`; Tag resolution: tags and `~` take their type from context.
2+tests: Unit construction uses the validated prelude shape, preserves generic and nested payload types, and makes prelude some available at independent types. Unresolved payloads and discarded literals stay pending. Payload constraints and unrelated user-defined unions fail closed where their compatibility is not yet supported.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-unit-construction/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the prepared prelude.
tests/golden/types-unit-construction/source.jibbnew file+29
@@ -0,0 +1,29 @@
1++$ msg
2+ %go
3+ %stay
4++$ other
5+ %one
6+ %two
7++$ mimic |$ [A]
8+ ~
9+ [~ u=A]
10+++ direct |= x=A `x
11+++ str `"hi"
12+++ ship `~zod
13+++ nested ``"hi"
14+++ same-first (some "hi")
15+++ same-second (some ~zod)
16+++ ctx ^- (unit msg) `%go
17+++ bad-tag ^- (unit msg) `%bad
18+++ missing-tag `%go
19+++ discarded-tag
20+ ~& %other
21+ `"hi"
22+++ discarded-null
23+ ~& ~
24+ `"hi"
25+++ mismatch ^- (unit @p) `"hi"
26+++ other-unit ^- (mimic @t) `"hi"
27+++ force |= x=A ^- (unit A) `"hi"
28+++ null-payload `~
29+++ tag-payload ^- (unit @tas) `%go
tests/golden/types-unit-construction/tokens.txtnew file+168
@@ -0,0 +1,168 @@
1+1:1 glyph +$
2+1:4 name msg
3+2:3 INDENT
4+2:3 lit %go
5+3:3 NEWLINE
6+3:3 lit %stay
7+4:1 DEDENT
8+4:1 NEWLINE
9+4:1 glyph +$
10+4:4 name other
11+5:3 INDENT
12+5:3 lit %one
13+6:3 NEWLINE
14+6:3 lit %two
15+7:1 DEDENT
16+7:1 NEWLINE
17+7:1 glyph +$
18+7:4 name mimic
19+7:10 glyph |$
20+7:13 glyph [
21+7:14 tight tvar A
22+7:15 tight glyph ]
23+8:3 INDENT
24+8:3 lit ~
25+9:3 NEWLINE
26+9:3 glyph [
27+9:4 tight lit ~
28+9:6 name u
29+9:7 tight glyph =
30+9:8 tight tvar A
31+9:9 tight glyph ]
32+10:1 DEDENT
33+10:1 NEWLINE
34+10:1 glyph ++
35+10:4 name direct
36+10:11 glyph |=
37+10:14 name x
38+10:15 tight glyph =
39+10:16 tight tvar A
40+10:18 glyph `
41+10:19 tight name x
42+11:1 NEWLINE
43+11:1 glyph ++
44+11:4 name str
45+11:8 glyph `
46+11:9 tight str "hi"
47+12:1 NEWLINE
48+12:1 glyph ++
49+12:4 name ship
50+12:9 glyph `
51+12:10 tight lit ~zod
52+13:1 NEWLINE
53+13:1 glyph ++
54+13:4 name nested
55+13:11 glyph `
56+13:12 tight glyph `
57+13:13 tight str "hi"
58+14:1 NEWLINE
59+14:1 glyph ++
60+14:4 name same-first
61+14:15 glyph (
62+14:16 tight name some
63+14:21 str "hi"
64+14:25 tight glyph )
65+15:1 NEWLINE
66+15:1 glyph ++
67+15:4 name same-second
68+15:16 glyph (
69+15:17 tight name some
70+15:22 lit ~zod
71+15:26 tight glyph )
72+16:1 NEWLINE
73+16:1 glyph ++
74+16:4 name ctx
75+16:8 glyph ^-
76+16:11 glyph (
77+16:12 tight name unit
78+16:17 name msg
79+16:20 tight glyph )
80+16:22 glyph `
81+16:23 tight lit %go
82+17:1 NEWLINE
83+17:1 glyph ++
84+17:4 name bad-tag
85+17:12 glyph ^-
86+17:15 glyph (
87+17:16 tight name unit
88+17:21 name msg
89+17:24 tight glyph )
90+17:26 glyph `
91+17:27 tight lit %bad
92+18:1 NEWLINE
93+18:1 glyph ++
94+18:4 name missing-tag
95+18:16 glyph `
96+18:17 tight lit %go
97+19:1 NEWLINE
98+19:1 glyph ++
99+19:4 name discarded-tag
100+20:3 INDENT
101+20:3 glyph ~&
102+20:6 lit %other
103+21:5 INDENT
104+21:5 glyph `
105+21:6 tight str "hi"
106+22:1 DEDENT
107+22:1 DEDENT
108+22:1 NEWLINE
109+22:1 glyph ++
110+22:4 name discarded-null
111+23:3 INDENT
112+23:3 glyph ~&
113+23:6 lit ~
114+24:5 INDENT
115+24:5 glyph `
116+24:6 tight str "hi"
117+25:1 DEDENT
118+25:1 DEDENT
119+25:1 NEWLINE
120+25:1 glyph ++
121+25:4 name mismatch
122+25:13 glyph ^-
123+25:16 glyph (
124+25:17 tight name unit
125+25:22 aura @p
126+25:24 tight glyph )
127+25:26 glyph `
128+25:27 tight str "hi"
129+26:1 NEWLINE
130+26:1 glyph ++
131+26:4 name other-unit
132+26:15 glyph ^-
133+26:18 glyph (
134+26:19 tight name mimic
135+26:25 aura @t
136+26:27 tight glyph )
137+26:29 glyph `
138+26:30 tight str "hi"
139+27:1 NEWLINE
140+27:1 glyph ++
141+27:4 name force
142+27:10 glyph |=
143+27:13 name x
144+27:14 tight glyph =
145+27:15 tight tvar A
146+27:17 glyph ^-
147+27:20 glyph (
148+27:21 tight name unit
149+27:26 tvar A
150+27:27 tight glyph )
151+27:29 glyph `
152+27:30 tight str "hi"
153+28:1 NEWLINE
154+28:1 glyph ++
155+28:4 name null-payload
156+28:17 glyph `
157+28:18 tight lit ~
158+29:1 NEWLINE
159+29:1 glyph ++
160+29:4 name tag-payload
161+29:16 glyph ^-
162+29:19 glyph (
163+29:20 tight name unit
164+29:25 aura @tas
165+29:29 tight glyph )
166+29:31 glyph `
167+29:32 tight lit %go
168+29:35 NEWLINE
tests/golden/types-unit-construction/tree.txtnew file+71
@@ -0,0 +1,71 @@
1+(module
2+ (mold 1:1 msg
3+ (union 2:3 (const 2:3 %go) (const 3:3 %stay)))
4+ (mold 4:1 other
5+ (union 5:3 (const 5:3 %one) (const 6:3 %two)))
6+ (mold 7:1 mimic
7+ (generic 7:10 A
8+ (union 8:3
9+ (const 8:3 ~)
10+ (cell 9:3
11+ (const 9:4 ~)
12+ (face 9:6 u (tvar 9:8 A))))))
13+ (value 10:1 direct
14+ (gate 10:11
15+ (face 10:14 x (tvar 10:16 A))
16+ (unit 10:18 (wing 10:19 x))))
17+ (value 11:1 str
18+ (unit 11:8 (str 11:9 "hi")))
19+ (value 12:1 ship
20+ (unit 12:9 (lit 12:10 ~zod)))
21+ (value 13:1 nested
22+ (unit 13:11
23+ (unit 13:12 (str 13:13 "hi"))))
24+ (value 14:1 same-first
25+ (group 14:15
26+ (call 14:16 (wing 14:16 some) (str 14:21 "hi"))))
27+ (value 15:1 same-second
28+ (group 15:16
29+ (call 15:17 (wing 15:17 some) (lit 15:22 ~zod))))
30+ (value 16:1 ctx
31+ (cast 16:8
32+ (apply 16:11 unit (ref 16:17 msg))
33+ (unit 16:22 (lit 16:23 %go))))
34+ (value 17:1 bad-tag
35+ (cast 17:12
36+ (apply 17:15 unit (ref 17:21 msg))
37+ (unit 17:26 (lit 17:27 %bad))))
38+ (value 18:1 missing-tag
39+ (unit 18:16 (lit 18:17 %go)))
40+ (value 19:1 discarded-tag
41+ (body 20:3
42+ (trace 20:3
43+ (lit 20:6 %other)
44+ (body 21:5
45+ (unit 21:5 (str 21:6 "hi"))))))
46+ (value 22:1 discarded-null
47+ (body 23:3
48+ (trace 23:3
49+ (lit 23:6 ~)
50+ (body 24:5
51+ (unit 24:5 (str 24:6 "hi"))))))
52+ (value 25:1 mismatch
53+ (cast 25:13
54+ (apply 25:16 unit (aura 25:22 @p))
55+ (unit 25:26 (str 25:27 "hi"))))
56+ (value 26:1 other-unit
57+ (cast 26:15
58+ (apply 26:18 mimic (aura 26:25 @t))
59+ (unit 26:29 (str 26:30 "hi"))))
60+ (value 27:1 force
61+ (gate 27:10
62+ (face 27:13 x (tvar 27:15 A))
63+ (cast 27:17
64+ (apply 27:20 unit (tvar 27:26 A))
65+ (unit 27:29 (str 27:30 "hi")))))
66+ (value 28:1 null-payload
67+ (unit 28:17 (lit 28:18 ~)))
68+ (value 29:1 tag-payload
69+ (cast 29:16
70+ (apply 29:19 unit (aura 29:25 @tas))
71+ (unit 29:31 (lit 29:32 %go)))))
tests/golden/types-unit-construction/types.txtnew file+20
@@ -0,0 +1,20 @@
1+partial inference; module not checked
2++$ msg: cases proven disjoint; mold not checked
3++$ other: cases proven disjoint; mold not checked
4++$ mimic: cases proven disjoint; mold not checked
5+++ direct: $-(A (unit A))
6+++ str: (unit @t)
7+++ ship: (unit @p)
8+++ nested: (unit (unit @t))
9+++ same-first: (unit @t)
10+++ same-second: (unit @p)
11+++ ctx: cast constraint is not supported by partial inference
12+++ bad-tag: cast constraint is not supported by partial inference
13+++ missing-tag: tag needs context in partial inference
14+++ discarded-tag: tag needs context in partial inference
15+++ discarded-null: `~` needs context in partial inference
16+++ mismatch: cast constraint is not supported by partial inference
17+++ other-unit: cast constraint is not supported by partial inference
18+++ force: explicit capital constraints are not supported by partial inference
19+++ null-payload: `~` needs context in partial inference
20+++ tag-payload: cast constraint is not supported by partial inference
tests/lib/jibb-module-scope.hoon+14−1
@@ -38,7 +38,7 @@
3838 =/ after-fixtures=(list [at=path source=@t])
3939 [[~[%ui %safe %jibb] library] duplicates]
4040 =/ after (golden-types-with-prelude:jibb /ui/main/jibb after-source ~ ~ after-fixtures prelude)
41− (of-wain:format ~[okay empty bad bad-value bad-mold collision duplicate after real-parity list-guard self-prelude-guards])
41+ (of-wain:format ~[okay empty bad bad-value bad-mold collision duplicate after real-parity list-guard self-prelude-guards unit-construction-guard])
4242::
4343++ real-parity
4444 ^- @t
@@ -80,4 +80,17 @@
8080 =/ d (golden-types-with-prelude:jibb /ui/main/jibb src ~ ~ ~ malformed)
8181 =/ e (golden-types-with-prelude:jibb /ui/main/jibb alias-source ~ ~ ~ alias-prelude)
8282 (of-wain:format ~[a b c d e])
83+::
84+++ unit-construction-guard
85+ ^- @t
86+ =/ src=@t (crip "++ x `\"hi\"\0a")
87+ =/ omitted=@t (crip "++ same |=(x x)\0a")
88+ =/ altered=@t (crip "+$ unit |$ [A] [A A]\0a")
89+ =/ malformed=@t (crip "+$ unit |$ [A]\0a")
90+ =/ local=@t (crip "+$ unit |$ [A] [A A]\0a++ x `\"hi\"\0a")
91+ =/ a (golden-types-with-prelude:jibb /ui/main/jibb src ~ ~ ~ omitted)
92+ =/ b (golden-types-with-prelude:jibb /ui/main/jibb src ~ ~ ~ altered)
93+ =/ c (golden-types-with-prelude:jibb /ui/main/jibb src ~ ~ ~ malformed)
94+ =/ d (golden-types-with-prelude:jibb /ui/main/jibb local ~ ~ ~ omitted)
95+ (of-wain:format ~[a b c d])
8396--
tests/lib/jibb.hoon+283−271
@@ -1684,227 +1684,235 @@
16841684/* tok-483 %txt /tests/golden/types-record-bound-variable/tokens/txt
16851685/* tre-483 %txt /tests/golden/types-record-bound-variable/tree/txt
16861686/* typ-483 %txt /tests/golden/types-record-bound-variable/types/txt
1687−/* src-484 %jibb /tests/golden/types-record-change/source/jibb
1688−/* tok-484 %txt /tests/golden/types-record-change/tokens/txt
1689−/* tre-484 %txt /tests/golden/types-record-change/tree/txt
1690−/* typ-484 %txt /tests/golden/types-record-change/types/txt
1691−/* src-485 %jibb /tests/golden/types-record-change-generic/source/jibb
1692−/* tok-485 %txt /tests/golden/types-record-change-generic/tokens/txt
1693−/* tre-485 %txt /tests/golden/types-record-change-generic/tree/txt
1694−/* typ-485 %txt /tests/golden/types-record-change-generic/types/txt
1695−/* src-486 %jibb /tests/golden/types-record-faces/source/jibb
1696−/* tok-486 %txt /tests/golden/types-record-faces/tokens/txt
1697−/* tre-486 %txt /tests/golden/types-record-faces/tree/txt
1698−/* typ-486 %txt /tests/golden/types-record-faces/types/txt
1699−/* src-487 %jibb /tests/golden/types-record-import/source/jibb
1700−/* tok-487 %txt /tests/golden/types-record-import/tokens/txt
1701−/* tre-487 %txt /tests/golden/types-record-import/tree/txt
1702−/* mod-487-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1703−/* typ-487 %txt /tests/golden/types-record-import/types/txt
1704−/* mtre-487 %txt /tests/golden/types-record-import/module-trees/txt
1705−/* src-488 %jibb /tests/golden/types-record-local-scheme/source/jibb
1706−/* tok-488 %txt /tests/golden/types-record-local-scheme/tokens/txt
1707−/* tre-488 %txt /tests/golden/types-record-local-scheme/tree/txt
1708−/* typ-488 %txt /tests/golden/types-record-local-scheme/types/txt
1709−/* src-489 %jibb /tests/golden/types-record-nested/source/jibb
1710−/* tok-489 %txt /tests/golden/types-record-nested/tokens/txt
1711−/* tre-489 %txt /tests/golden/types-record-nested/tree/txt
1712−/* typ-489 %txt /tests/golden/types-record-nested/types/txt
1713−/* src-490 %jibb /tests/golden/types-record-to-tuple/source/jibb
1714−/* tok-490 %txt /tests/golden/types-record-to-tuple/tokens/txt
1715−/* tre-490 %txt /tests/golden/types-record-to-tuple/tree/txt
1716−/* typ-490 %txt /tests/golden/types-record-to-tuple/types/txt
1717−/* src-491 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
1718−/* tok-491 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
1719−/* tre-491 %txt /tests/golden/types-recursion-scc-failures/tree/txt
1720−/* typ-491 %txt /tests/golden/types-recursion-scc-failures/types/txt
1721−/* src-492 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
1722−/* tok-492 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
1723−/* tre-492 %txt /tests/golden/types-recursion-scc-groups/tree/txt
1724−/* typ-492 %txt /tests/golden/types-recursion-scc-groups/types/txt
1725−/* src-493 %jibb /tests/golden/types-recursion-scc-import/source/jibb
1726−/* tok-493 %txt /tests/golden/types-recursion-scc-import/tokens/txt
1727−/* tre-493 %txt /tests/golden/types-recursion-scc-import/tree/txt
1728−/* mod-493-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
1729−/* typ-493 %txt /tests/golden/types-recursion-scc-import/types/txt
1730−/* mtre-493 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
1731−/* src-494 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
1732−/* tok-494 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
1733−/* tre-494 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
1734−/* mod-494-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
1735−/* typ-494 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
1736−/* mtre-494 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
1737−/* src-495 %jibb /tests/golden/types-recursion-scc-local/source/jibb
1738−/* tok-495 %txt /tests/golden/types-recursion-scc-local/tokens/txt
1739−/* tre-495 %txt /tests/golden/types-recursion-scc-local/tree/txt
1740−/* typ-495 %txt /tests/golden/types-recursion-scc-local/types/txt
1741−/* src-496 %jibb /tests/golden/types-recursion-scc-order/source/jibb
1742−/* tok-496 %txt /tests/golden/types-recursion-scc-order/tokens/txt
1743−/* tre-496 %txt /tests/golden/types-recursion-scc-order/tree/txt
1744−/* typ-496 %txt /tests/golden/types-recursion-scc-order/types/txt
1745−/* src-497 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
1746−/* tok-497 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
1747−/* tre-497 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
1748−/* typ-497 %txt /tests/golden/types-recursion-scc-shadow/types/txt
1749−/* src-498 %jibb /tests/golden/types-recursive-branch/source/jibb
1750−/* tok-498 %txt /tests/golden/types-recursive-branch/tokens/txt
1751−/* tre-498 %txt /tests/golden/types-recursive-branch/tree/txt
1752−/* typ-498 %txt /tests/golden/types-recursive-branch/types/txt
1753−/* src-499 %jibb /tests/golden/types-recursive-gate/source/jibb
1754−/* tok-499 %txt /tests/golden/types-recursive-gate/tokens/txt
1755−/* tre-499 %txt /tests/golden/types-recursive-gate/tree/txt
1756−/* typ-499 %txt /tests/golden/types-recursive-gate/types/txt
1757−/* src-500 %jibb /tests/golden/types-recursive-sample/source/jibb
1758−/* tok-500 %txt /tests/golden/types-recursive-sample/tokens/txt
1759−/* tre-500 %txt /tests/golden/types-recursive-sample/tree/txt
1760−/* typ-500 %txt /tests/golden/types-recursive-sample/types/txt
1761−/* src-501 %jibb /tests/golden/types-string-interpolation/source/jibb
1762−/* tok-501 %txt /tests/golden/types-string-interpolation/tokens/txt
1763−/* tre-501 %txt /tests/golden/types-string-interpolation/tree/txt
1764−/* typ-501 %txt /tests/golden/types-string-interpolation/types/txt
1765−/* src-502 %jibb /tests/golden/types-tuple-context/source/jibb
1766−/* tok-502 %txt /tests/golden/types-tuple-context/tokens/txt
1767−/* tre-502 %txt /tests/golden/types-tuple-context/tree/txt
1768−/* typ-502 %txt /tests/golden/types-tuple-context/types/txt
1769−/* src-503 %jibb /tests/golden/types-tuple-context-nested/source/jibb
1770−/* tok-503 %txt /tests/golden/types-tuple-context-nested/tokens/txt
1771−/* tre-503 %txt /tests/golden/types-tuple-context-nested/tree/txt
1772−/* typ-503 %txt /tests/golden/types-tuple-context-nested/types/txt
1773−/* src-504 %jibb /tests/golden/types-union-alias/source/jibb
1774−/* tok-504 %txt /tests/golden/types-union-alias/tokens/txt
1775−/* tre-504 %txt /tests/golden/types-union-alias/tree/txt
1776−/* typ-504 %txt /tests/golden/types-union-alias/types/txt
1777−/* src-505 %jibb /tests/golden/types-union-branch-context/source/jibb
1778−/* tok-505 %txt /tests/golden/types-union-branch-context/tokens/txt
1779−/* tre-505 %txt /tests/golden/types-union-branch-context/tree/txt
1780−/* typ-505 %txt /tests/golden/types-union-branch-context/types/txt
1781−/* src-506 %jibb /tests/golden/types-union-branch-pending/source/jibb
1782−/* tok-506 %txt /tests/golden/types-union-branch-pending/tokens/txt
1783−/* tre-506 %txt /tests/golden/types-union-branch-pending/tree/txt
1784−/* typ-506 %txt /tests/golden/types-union-branch-pending/types/txt
1785−/* src-507 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1786−/* tok-507 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1787−/* tre-507 %txt /tests/golden/types-union-constructor-shape/tree/txt
1788−/* typ-507 %txt /tests/golden/types-union-constructor-shape/types/txt
1789−/* src-508 %jibb /tests/golden/types-union-context-flow/source/jibb
1790−/* tok-508 %txt /tests/golden/types-union-context-flow/tokens/txt
1791−/* tre-508 %txt /tests/golden/types-union-context-flow/tree/txt
1792−/* typ-508 %txt /tests/golden/types-union-context-flow/types/txt
1793−/* src-509 %jibb /tests/golden/types-union-finite/source/jibb
1794−/* tok-509 %txt /tests/golden/types-union-finite/tokens/txt
1795−/* tre-509 %txt /tests/golden/types-union-finite/tree/txt
1796−/* typ-509 %txt /tests/golden/types-union-finite/types/txt
1797−/* src-510 %jibb /tests/golden/types-union-finite-generic/source/jibb
1798−/* tok-510 %txt /tests/golden/types-union-finite-generic/tokens/txt
1799−/* tre-510 %txt /tests/golden/types-union-finite-generic/tree/txt
1800−/* typ-510 %txt /tests/golden/types-union-finite-generic/types/txt
1801−/* src-511 %jibb /tests/golden/types-union-finite-limit/source/jibb
1802−/* tok-511 %txt /tests/golden/types-union-finite-limit/tokens/txt
1803−/* tre-511 %txt /tests/golden/types-union-finite-limit/tree/txt
1804−/* typ-511 %txt /tests/golden/types-union-finite-limit/types/txt
1805−/* src-512 %jibb /tests/golden/types-union-import/source/jibb
1806−/* tok-512 %txt /tests/golden/types-union-import/tokens/txt
1807−/* tre-512 %txt /tests/golden/types-union-import/tree/txt
1808−/* mod-512-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1809−/* typ-512 %txt /tests/golden/types-union-import/types/txt
1810−/* mtre-512 %txt /tests/golden/types-union-import/module-trees/txt
1811−/* src-513 %jibb /tests/golden/types-union-local-pending/source/jibb
1812−/* tok-513 %txt /tests/golden/types-union-local-pending/tokens/txt
1813−/* tre-513 %txt /tests/golden/types-union-local-pending/tree/txt
1814−/* typ-513 %txt /tests/golden/types-union-local-pending/types/txt
1815−/* src-514 %jibb /tests/golden/types-union-overlap/source/jibb
1816−/* tok-514 %txt /tests/golden/types-union-overlap/tokens/txt
1817−/* tre-514 %txt /tests/golden/types-union-overlap/tree/txt
1818−/* typ-514 %txt /tests/golden/types-union-overlap/types/txt
1819−/* src-515 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1820−/* tok-515 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1821−/* tre-515 %txt /tests/golden/types-union-overlap-nested/tree/txt
1822−/* typ-515 %txt /tests/golden/types-union-overlap-nested/types/txt
1823−/* src-516 %jibb /tests/golden/types-union-patterns/source/jibb
1824−/* tok-516 %txt /tests/golden/types-union-patterns/tokens/txt
1825−/* tre-516 %txt /tests/golden/types-union-patterns/tree/txt
1826−/* typ-516 %txt /tests/golden/types-union-patterns/types/txt
1827−/* src-517 %jibb /tests/golden/types-union-patterns-generic/source/jibb
1828−/* tok-517 %txt /tests/golden/types-union-patterns-generic/tokens/txt
1829−/* tre-517 %txt /tests/golden/types-union-patterns-generic/tree/txt
1830−/* typ-517 %txt /tests/golden/types-union-patterns-generic/types/txt
1831−/* src-518 %jibb /tests/golden/types-union-patterns-import/source/jibb
1832−/* tok-518 %txt /tests/golden/types-union-patterns-import/tokens/txt
1833−/* tre-518 %txt /tests/golden/types-union-patterns-import/tree/txt
1834−/* mod-518-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
1835−/* typ-518 %txt /tests/golden/types-union-patterns-import/types/txt
1836−/* mtre-518 %txt /tests/golden/types-union-patterns-import/module-trees/txt
1837−/* src-519 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1838−/* tok-519 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1839−/* tre-519 %txt /tests/golden/types-union-phantom-generic/tree/txt
1840−/* typ-519 %txt /tests/golden/types-union-phantom-generic/types/txt
1841−/* src-520 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1842−/* tok-520 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1843−/* tre-520 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1844−/* mod-520-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1845−/* typ-520 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1846−/* mtre-520 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1847−/* src-521 %jibb /tests/golden/types-union-print-distinct/source/jibb
1848−/* tok-521 %txt /tests/golden/types-union-print-distinct/tokens/txt
1849−/* tre-521 %txt /tests/golden/types-union-print-distinct/tree/txt
1850−/* mod-521-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1851−/* mod-521-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1852−/* mod-521-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1853−/* typ-521 %txt /tests/golden/types-union-print-distinct/types/txt
1854−/* mtre-521 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1855−/* src-522 %jibb /tests/golden/types-union-print-escape/source/jibb
1856−/* tok-522 %txt /tests/golden/types-union-print-escape/tokens/txt
1857−/* tre-522 %txt /tests/golden/types-union-print-escape/tree/txt
1858−/* typ-522 %txt /tests/golden/types-union-print-escape/types/txt
1859−/* src-523 %jibb /tests/golden/types-union-print-local/source/jibb
1860−/* tok-523 %txt /tests/golden/types-union-print-local/tokens/txt
1861−/* tre-523 %txt /tests/golden/types-union-print-local/tree/txt
1862−/* typ-523 %txt /tests/golden/types-union-print-local/types/txt
1863−/* src-524 %jibb /tests/golden/types-union-print-nested/source/jibb
1864−/* tok-524 %txt /tests/golden/types-union-print-nested/tokens/txt
1865−/* tre-524 %txt /tests/golden/types-union-print-nested/tree/txt
1866−/* typ-524 %txt /tests/golden/types-union-print-nested/types/txt
1867−/* src-525 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1868−/* tok-525 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1869−/* tre-525 %txt /tests/golden/types-union-print-same-origin/tree/txt
1870−/* mod-525-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1871−/* typ-525 %txt /tests/golden/types-union-print-same-origin/types/txt
1872−/* mtre-525 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1873−/* src-526 %jibb /tests/golden/types-union-print-transitive/source/jibb
1874−/* tok-526 %txt /tests/golden/types-union-print-transitive/tokens/txt
1875−/* tre-526 %txt /tests/golden/types-union-print-transitive/tree/txt
1876−/* mod-526-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1877−/* mod-526-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1878−/* typ-526 %txt /tests/golden/types-union-print-transitive/types/txt
1879−/* mtre-526 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1880−/* src-527 %jibb /tests/golden/types-union-singleton/source/jibb
1881−/* tok-527 %txt /tests/golden/types-union-singleton/tokens/txt
1882−/* tre-527 %txt /tests/golden/types-union-singleton/tree/txt
1883−/* typ-527 %txt /tests/golden/types-union-singleton/types/txt
1884−/* src-528 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1885−/* tok-528 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1886−/* tre-528 %txt /tests/golden/types-union-tag-atoms/tree/txt
1887−/* typ-528 %txt /tests/golden/types-union-tag-atoms/types/txt
1888−/* src-529 %jibb /tests/golden/types-union-tags/source/jibb
1889−/* tok-529 %txt /tests/golden/types-union-tags/tokens/txt
1890−/* tre-529 %txt /tests/golden/types-union-tags/tree/txt
1891−/* typ-529 %txt /tests/golden/types-union-tags/types/txt
1892−/* src-530 %jibb /tests/golden/types-union-unresolved/source/jibb
1893−/* tok-530 %txt /tests/golden/types-union-unresolved/tokens/txt
1894−/* tre-530 %txt /tests/golden/types-union-unresolved/tree/txt
1895−/* typ-530 %txt /tests/golden/types-union-unresolved/types/txt
1896−/* src-531 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
1897−/* tok-531 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
1898−/* tre-531 %txt /tests/golden/types-union-unresolved-flow/tree/txt
1899−/* typ-531 %txt /tests/golden/types-union-unresolved-flow/types/txt
1900−/* src-532 %jibb /tests/golden/types-unit-context/source/jibb
1901−/* tok-532 %txt /tests/golden/types-unit-context/tokens/txt
1902−/* tre-532 %txt /tests/golden/types-unit-context/tree/txt
1903−/* typ-532 %txt /tests/golden/types-unit-context/types/txt
1904−/* src-533 %jibb /tests/golden/types-unit-patterns/source/jibb
1905−/* tok-533 %txt /tests/golden/types-unit-patterns/tokens/txt
1906−/* tre-533 %txt /tests/golden/types-unit-patterns/tree/txt
1907−/* typ-533 %txt /tests/golden/types-unit-patterns/types/txt
1687+/* src-484 %jibb /tests/golden/types-record-cast-context/source/jibb
1688+/* tok-484 %txt /tests/golden/types-record-cast-context/tokens/txt
1689+/* tre-484 %txt /tests/golden/types-record-cast-context/tree/txt
1690+/* typ-484 %txt /tests/golden/types-record-cast-context/types/txt
1691+/* src-485 %jibb /tests/golden/types-record-change/source/jibb
1692+/* tok-485 %txt /tests/golden/types-record-change/tokens/txt
1693+/* tre-485 %txt /tests/golden/types-record-change/tree/txt
1694+/* typ-485 %txt /tests/golden/types-record-change/types/txt
1695+/* src-486 %jibb /tests/golden/types-record-change-generic/source/jibb
1696+/* tok-486 %txt /tests/golden/types-record-change-generic/tokens/txt
1697+/* tre-486 %txt /tests/golden/types-record-change-generic/tree/txt
1698+/* typ-486 %txt /tests/golden/types-record-change-generic/types/txt
1699+/* src-487 %jibb /tests/golden/types-record-faces/source/jibb
1700+/* tok-487 %txt /tests/golden/types-record-faces/tokens/txt
1701+/* tre-487 %txt /tests/golden/types-record-faces/tree/txt
1702+/* typ-487 %txt /tests/golden/types-record-faces/types/txt
1703+/* src-488 %jibb /tests/golden/types-record-import/source/jibb
1704+/* tok-488 %txt /tests/golden/types-record-import/tokens/txt
1705+/* tre-488 %txt /tests/golden/types-record-import/tree/txt
1706+/* mod-488-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1707+/* typ-488 %txt /tests/golden/types-record-import/types/txt
1708+/* mtre-488 %txt /tests/golden/types-record-import/module-trees/txt
1709+/* src-489 %jibb /tests/golden/types-record-local-scheme/source/jibb
1710+/* tok-489 %txt /tests/golden/types-record-local-scheme/tokens/txt
1711+/* tre-489 %txt /tests/golden/types-record-local-scheme/tree/txt
1712+/* typ-489 %txt /tests/golden/types-record-local-scheme/types/txt
1713+/* src-490 %jibb /tests/golden/types-record-nested/source/jibb
1714+/* tok-490 %txt /tests/golden/types-record-nested/tokens/txt
1715+/* tre-490 %txt /tests/golden/types-record-nested/tree/txt
1716+/* typ-490 %txt /tests/golden/types-record-nested/types/txt
1717+/* src-491 %jibb /tests/golden/types-record-to-tuple/source/jibb
1718+/* tok-491 %txt /tests/golden/types-record-to-tuple/tokens/txt
1719+/* tre-491 %txt /tests/golden/types-record-to-tuple/tree/txt
1720+/* typ-491 %txt /tests/golden/types-record-to-tuple/types/txt
1721+/* src-492 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
1722+/* tok-492 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
1723+/* tre-492 %txt /tests/golden/types-recursion-scc-failures/tree/txt
1724+/* typ-492 %txt /tests/golden/types-recursion-scc-failures/types/txt
1725+/* src-493 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
1726+/* tok-493 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
1727+/* tre-493 %txt /tests/golden/types-recursion-scc-groups/tree/txt
1728+/* typ-493 %txt /tests/golden/types-recursion-scc-groups/types/txt
1729+/* src-494 %jibb /tests/golden/types-recursion-scc-import/source/jibb
1730+/* tok-494 %txt /tests/golden/types-recursion-scc-import/tokens/txt
1731+/* tre-494 %txt /tests/golden/types-recursion-scc-import/tree/txt
1732+/* mod-494-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
1733+/* typ-494 %txt /tests/golden/types-recursion-scc-import/types/txt
1734+/* mtre-494 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
1735+/* src-495 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
1736+/* tok-495 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
1737+/* tre-495 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
1738+/* mod-495-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
1739+/* typ-495 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
1740+/* mtre-495 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
1741+/* src-496 %jibb /tests/golden/types-recursion-scc-local/source/jibb
1742+/* tok-496 %txt /tests/golden/types-recursion-scc-local/tokens/txt
1743+/* tre-496 %txt /tests/golden/types-recursion-scc-local/tree/txt
1744+/* typ-496 %txt /tests/golden/types-recursion-scc-local/types/txt
1745+/* src-497 %jibb /tests/golden/types-recursion-scc-order/source/jibb
1746+/* tok-497 %txt /tests/golden/types-recursion-scc-order/tokens/txt
1747+/* tre-497 %txt /tests/golden/types-recursion-scc-order/tree/txt
1748+/* typ-497 %txt /tests/golden/types-recursion-scc-order/types/txt
1749+/* src-498 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
1750+/* tok-498 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
1751+/* tre-498 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
1752+/* typ-498 %txt /tests/golden/types-recursion-scc-shadow/types/txt
1753+/* src-499 %jibb /tests/golden/types-recursive-branch/source/jibb
1754+/* tok-499 %txt /tests/golden/types-recursive-branch/tokens/txt
1755+/* tre-499 %txt /tests/golden/types-recursive-branch/tree/txt
1756+/* typ-499 %txt /tests/golden/types-recursive-branch/types/txt
1757+/* src-500 %jibb /tests/golden/types-recursive-gate/source/jibb
1758+/* tok-500 %txt /tests/golden/types-recursive-gate/tokens/txt
1759+/* tre-500 %txt /tests/golden/types-recursive-gate/tree/txt
1760+/* typ-500 %txt /tests/golden/types-recursive-gate/types/txt
1761+/* src-501 %jibb /tests/golden/types-recursive-sample/source/jibb
1762+/* tok-501 %txt /tests/golden/types-recursive-sample/tokens/txt
1763+/* tre-501 %txt /tests/golden/types-recursive-sample/tree/txt
1764+/* typ-501 %txt /tests/golden/types-recursive-sample/types/txt
1765+/* src-502 %jibb /tests/golden/types-string-interpolation/source/jibb
1766+/* tok-502 %txt /tests/golden/types-string-interpolation/tokens/txt
1767+/* tre-502 %txt /tests/golden/types-string-interpolation/tree/txt
1768+/* typ-502 %txt /tests/golden/types-string-interpolation/types/txt
1769+/* src-503 %jibb /tests/golden/types-tuple-context/source/jibb
1770+/* tok-503 %txt /tests/golden/types-tuple-context/tokens/txt
1771+/* tre-503 %txt /tests/golden/types-tuple-context/tree/txt
1772+/* typ-503 %txt /tests/golden/types-tuple-context/types/txt
1773+/* src-504 %jibb /tests/golden/types-tuple-context-nested/source/jibb
1774+/* tok-504 %txt /tests/golden/types-tuple-context-nested/tokens/txt
1775+/* tre-504 %txt /tests/golden/types-tuple-context-nested/tree/txt
1776+/* typ-504 %txt /tests/golden/types-tuple-context-nested/types/txt
1777+/* src-505 %jibb /tests/golden/types-union-alias/source/jibb
1778+/* tok-505 %txt /tests/golden/types-union-alias/tokens/txt
1779+/* tre-505 %txt /tests/golden/types-union-alias/tree/txt
1780+/* typ-505 %txt /tests/golden/types-union-alias/types/txt
1781+/* src-506 %jibb /tests/golden/types-union-branch-context/source/jibb
1782+/* tok-506 %txt /tests/golden/types-union-branch-context/tokens/txt
1783+/* tre-506 %txt /tests/golden/types-union-branch-context/tree/txt
1784+/* typ-506 %txt /tests/golden/types-union-branch-context/types/txt
1785+/* src-507 %jibb /tests/golden/types-union-branch-pending/source/jibb
1786+/* tok-507 %txt /tests/golden/types-union-branch-pending/tokens/txt
1787+/* tre-507 %txt /tests/golden/types-union-branch-pending/tree/txt
1788+/* typ-507 %txt /tests/golden/types-union-branch-pending/types/txt
1789+/* src-508 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1790+/* tok-508 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1791+/* tre-508 %txt /tests/golden/types-union-constructor-shape/tree/txt
1792+/* typ-508 %txt /tests/golden/types-union-constructor-shape/types/txt
1793+/* src-509 %jibb /tests/golden/types-union-context-flow/source/jibb
1794+/* tok-509 %txt /tests/golden/types-union-context-flow/tokens/txt
1795+/* tre-509 %txt /tests/golden/types-union-context-flow/tree/txt
1796+/* typ-509 %txt /tests/golden/types-union-context-flow/types/txt
1797+/* src-510 %jibb /tests/golden/types-union-finite/source/jibb
1798+/* tok-510 %txt /tests/golden/types-union-finite/tokens/txt
1799+/* tre-510 %txt /tests/golden/types-union-finite/tree/txt
1800+/* typ-510 %txt /tests/golden/types-union-finite/types/txt
1801+/* src-511 %jibb /tests/golden/types-union-finite-generic/source/jibb
1802+/* tok-511 %txt /tests/golden/types-union-finite-generic/tokens/txt
1803+/* tre-511 %txt /tests/golden/types-union-finite-generic/tree/txt
1804+/* typ-511 %txt /tests/golden/types-union-finite-generic/types/txt
1805+/* src-512 %jibb /tests/golden/types-union-finite-limit/source/jibb
1806+/* tok-512 %txt /tests/golden/types-union-finite-limit/tokens/txt
1807+/* tre-512 %txt /tests/golden/types-union-finite-limit/tree/txt
1808+/* typ-512 %txt /tests/golden/types-union-finite-limit/types/txt
1809+/* src-513 %jibb /tests/golden/types-union-import/source/jibb
1810+/* tok-513 %txt /tests/golden/types-union-import/tokens/txt
1811+/* tre-513 %txt /tests/golden/types-union-import/tree/txt
1812+/* mod-513-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1813+/* typ-513 %txt /tests/golden/types-union-import/types/txt
1814+/* mtre-513 %txt /tests/golden/types-union-import/module-trees/txt
1815+/* src-514 %jibb /tests/golden/types-union-local-pending/source/jibb
1816+/* tok-514 %txt /tests/golden/types-union-local-pending/tokens/txt
1817+/* tre-514 %txt /tests/golden/types-union-local-pending/tree/txt
1818+/* typ-514 %txt /tests/golden/types-union-local-pending/types/txt
1819+/* src-515 %jibb /tests/golden/types-union-overlap/source/jibb
1820+/* tok-515 %txt /tests/golden/types-union-overlap/tokens/txt
1821+/* tre-515 %txt /tests/golden/types-union-overlap/tree/txt
1822+/* typ-515 %txt /tests/golden/types-union-overlap/types/txt
1823+/* src-516 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1824+/* tok-516 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1825+/* tre-516 %txt /tests/golden/types-union-overlap-nested/tree/txt
1826+/* typ-516 %txt /tests/golden/types-union-overlap-nested/types/txt
1827+/* src-517 %jibb /tests/golden/types-union-patterns/source/jibb
1828+/* tok-517 %txt /tests/golden/types-union-patterns/tokens/txt
1829+/* tre-517 %txt /tests/golden/types-union-patterns/tree/txt
1830+/* typ-517 %txt /tests/golden/types-union-patterns/types/txt
1831+/* src-518 %jibb /tests/golden/types-union-patterns-generic/source/jibb
1832+/* tok-518 %txt /tests/golden/types-union-patterns-generic/tokens/txt
1833+/* tre-518 %txt /tests/golden/types-union-patterns-generic/tree/txt
1834+/* typ-518 %txt /tests/golden/types-union-patterns-generic/types/txt
1835+/* src-519 %jibb /tests/golden/types-union-patterns-import/source/jibb
1836+/* tok-519 %txt /tests/golden/types-union-patterns-import/tokens/txt
1837+/* tre-519 %txt /tests/golden/types-union-patterns-import/tree/txt
1838+/* mod-519-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
1839+/* typ-519 %txt /tests/golden/types-union-patterns-import/types/txt
1840+/* mtre-519 %txt /tests/golden/types-union-patterns-import/module-trees/txt
1841+/* src-520 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1842+/* tok-520 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1843+/* tre-520 %txt /tests/golden/types-union-phantom-generic/tree/txt
1844+/* typ-520 %txt /tests/golden/types-union-phantom-generic/types/txt
1845+/* src-521 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1846+/* tok-521 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1847+/* tre-521 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1848+/* mod-521-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1849+/* typ-521 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1850+/* mtre-521 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1851+/* src-522 %jibb /tests/golden/types-union-print-distinct/source/jibb
1852+/* tok-522 %txt /tests/golden/types-union-print-distinct/tokens/txt
1853+/* tre-522 %txt /tests/golden/types-union-print-distinct/tree/txt
1854+/* mod-522-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1855+/* mod-522-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1856+/* mod-522-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1857+/* typ-522 %txt /tests/golden/types-union-print-distinct/types/txt
1858+/* mtre-522 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1859+/* src-523 %jibb /tests/golden/types-union-print-escape/source/jibb
1860+/* tok-523 %txt /tests/golden/types-union-print-escape/tokens/txt
1861+/* tre-523 %txt /tests/golden/types-union-print-escape/tree/txt
1862+/* typ-523 %txt /tests/golden/types-union-print-escape/types/txt
1863+/* src-524 %jibb /tests/golden/types-union-print-local/source/jibb
1864+/* tok-524 %txt /tests/golden/types-union-print-local/tokens/txt
1865+/* tre-524 %txt /tests/golden/types-union-print-local/tree/txt
1866+/* typ-524 %txt /tests/golden/types-union-print-local/types/txt
1867+/* src-525 %jibb /tests/golden/types-union-print-nested/source/jibb
1868+/* tok-525 %txt /tests/golden/types-union-print-nested/tokens/txt
1869+/* tre-525 %txt /tests/golden/types-union-print-nested/tree/txt
1870+/* typ-525 %txt /tests/golden/types-union-print-nested/types/txt
1871+/* src-526 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1872+/* tok-526 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1873+/* tre-526 %txt /tests/golden/types-union-print-same-origin/tree/txt
1874+/* mod-526-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1875+/* typ-526 %txt /tests/golden/types-union-print-same-origin/types/txt
1876+/* mtre-526 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1877+/* src-527 %jibb /tests/golden/types-union-print-transitive/source/jibb
1878+/* tok-527 %txt /tests/golden/types-union-print-transitive/tokens/txt
1879+/* tre-527 %txt /tests/golden/types-union-print-transitive/tree/txt
1880+/* mod-527-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1881+/* mod-527-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1882+/* typ-527 %txt /tests/golden/types-union-print-transitive/types/txt
1883+/* mtre-527 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1884+/* src-528 %jibb /tests/golden/types-union-singleton/source/jibb
1885+/* tok-528 %txt /tests/golden/types-union-singleton/tokens/txt
1886+/* tre-528 %txt /tests/golden/types-union-singleton/tree/txt
1887+/* typ-528 %txt /tests/golden/types-union-singleton/types/txt
1888+/* src-529 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1889+/* tok-529 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1890+/* tre-529 %txt /tests/golden/types-union-tag-atoms/tree/txt
1891+/* typ-529 %txt /tests/golden/types-union-tag-atoms/types/txt
1892+/* src-530 %jibb /tests/golden/types-union-tags/source/jibb
1893+/* tok-530 %txt /tests/golden/types-union-tags/tokens/txt
1894+/* tre-530 %txt /tests/golden/types-union-tags/tree/txt
1895+/* typ-530 %txt /tests/golden/types-union-tags/types/txt
1896+/* src-531 %jibb /tests/golden/types-union-unresolved/source/jibb
1897+/* tok-531 %txt /tests/golden/types-union-unresolved/tokens/txt
1898+/* tre-531 %txt /tests/golden/types-union-unresolved/tree/txt
1899+/* typ-531 %txt /tests/golden/types-union-unresolved/types/txt
1900+/* src-532 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
1901+/* tok-532 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
1902+/* tre-532 %txt /tests/golden/types-union-unresolved-flow/tree/txt
1903+/* typ-532 %txt /tests/golden/types-union-unresolved-flow/types/txt
1904+/* src-533 %jibb /tests/golden/types-unit-construction/source/jibb
1905+/* tok-533 %txt /tests/golden/types-unit-construction/tokens/txt
1906+/* tre-533 %txt /tests/golden/types-unit-construction/tree/txt
1907+/* typ-533 %txt /tests/golden/types-unit-construction/types/txt
1908+/* src-534 %jibb /tests/golden/types-unit-context/source/jibb
1909+/* tok-534 %txt /tests/golden/types-unit-context/tokens/txt
1910+/* tre-534 %txt /tests/golden/types-unit-context/tree/txt
1911+/* typ-534 %txt /tests/golden/types-unit-context/types/txt
1912+/* src-535 %jibb /tests/golden/types-unit-patterns/source/jibb
1913+/* tok-535 %txt /tests/golden/types-unit-patterns/tokens/txt
1914+/* tre-535 %txt /tests/golden/types-unit-patterns/tree/txt
1915+/* typ-535 %txt /tests/golden/types-unit-patterns/types/txt
19081916=/ prepared-prelude (prepare-prelude:jibb prelude-source)
19091917|%
19101918:: one arm per case
@@ -2875,106 +2883,110 @@
28752883 (weld (weld (check ~.types-prelude-list-functions src-482 `tok-482 `tre-482) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-482 `typ-482 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-482-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-482 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-482-1]]))
28762884++ test-types-record-bound-variable
28772885 (weld (check ~.types-record-bound-variable src-483 `tok-483 `tre-483) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-483 `typ-483))
2886+++ test-types-record-cast-context
2887+ (weld (check ~.types-record-cast-context src-484 `tok-484 `tre-484) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-484 `typ-484 ~ ~ ~))
28782888++ test-types-record-change
2879− (weld (check ~.types-record-change src-484 `tok-484 `tre-484) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-484 `typ-484 ~ ~ ~))
2889+ (weld (check ~.types-record-change src-485 `tok-485 `tre-485) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-485 `typ-485 ~ ~ ~))
28802890++ test-types-record-change-generic
2881− (weld (check ~.types-record-change-generic src-485 `tok-485 `tre-485) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-485 `typ-485 ~ ~ ~))
2891+ (weld (check ~.types-record-change-generic src-486 `tok-486 `tre-486) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-486 `typ-486 ~ ~ ~))
28822892++ test-types-record-faces
2883− (weld (check ~.types-record-faces src-486 `tok-486 `tre-486) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-486 `typ-486))
2893+ (weld (check ~.types-record-faces src-487 `tok-487 `tre-487) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-487 `typ-487))
28842894++ test-types-record-import
2885− (weld (weld (check ~.types-record-import src-487 `tok-487 `tre-487) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-487 `typ-487 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-487-1]])) (check-module-trees ~.types-record-import `mtre-487 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-487-1]]))
2895+ (weld (weld (check ~.types-record-import src-488 `tok-488 `tre-488) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-488 `typ-488 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-488-1]])) (check-module-trees ~.types-record-import `mtre-488 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-488-1]]))
28862896++ test-types-record-local-scheme
2887− (weld (check ~.types-record-local-scheme src-488 `tok-488 `tre-488) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-488 `typ-488))
2897+ (weld (check ~.types-record-local-scheme src-489 `tok-489 `tre-489) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-489 `typ-489))
28882898++ test-types-record-nested
2889− (weld (check ~.types-record-nested src-489 `tok-489 `tre-489) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-489 `typ-489))
2899+ (weld (check ~.types-record-nested src-490 `tok-490 `tre-490) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-490 `typ-490))
28902900++ test-types-record-to-tuple
2891− (weld (check ~.types-record-to-tuple src-490 `tok-490 `tre-490) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-490 `typ-490))
2901+ (weld (check ~.types-record-to-tuple src-491 `tok-491 `tre-491) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-491 `typ-491))
28922902++ test-types-recursion-scc-failures
2893− (weld (check ~.types-recursion-scc-failures src-491 `tok-491 `tre-491) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-491 `typ-491 ~ ~ ~))
2903+ (weld (check ~.types-recursion-scc-failures src-492 `tok-492 `tre-492) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-492 `typ-492 ~ ~ ~))
28942904++ test-types-recursion-scc-groups
2895− (weld (check ~.types-recursion-scc-groups src-492 `tok-492 `tre-492) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-492 `typ-492 ~ ~ ~))
2905+ (weld (check ~.types-recursion-scc-groups src-493 `tok-493 `tre-493) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-493 `typ-493 ~ ~ ~))
28962906++ test-types-recursion-scc-import
2897− (weld (weld (check ~.types-recursion-scc-import src-493 `tok-493 `tre-493) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-493 `typ-493 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-493-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-493 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-493-1]]))
2907+ (weld (weld (check ~.types-recursion-scc-import src-494 `tok-494 `tre-494) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-494 `typ-494 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-494-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-494 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-494-1]]))
28982908++ test-types-recursion-scc-import-bad
2899− (weld (weld (check ~.types-recursion-scc-import-bad src-494 `tok-494 `tre-494) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-494 `typ-494 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-494-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-494 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-494-1]]))
2909+ (weld (weld (check ~.types-recursion-scc-import-bad src-495 `tok-495 `tre-495) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-495 `typ-495 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-495-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-495 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-495-1]]))
29002910++ test-types-recursion-scc-local
2901− (weld (check ~.types-recursion-scc-local src-495 `tok-495 `tre-495) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-495 `typ-495 ~ ~ ~))
2911+ (weld (check ~.types-recursion-scc-local src-496 `tok-496 `tre-496) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-496 `typ-496 ~ ~ ~))
29022912++ test-types-recursion-scc-order
2903− (weld (check ~.types-recursion-scc-order src-496 `tok-496 `tre-496) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-496 `typ-496 ~ ~ ~))
2913+ (weld (check ~.types-recursion-scc-order src-497 `tok-497 `tre-497) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-497 `typ-497 ~ ~ ~))
29042914++ test-types-recursion-scc-shadow
2905− (weld (check ~.types-recursion-scc-shadow src-497 `tok-497 `tre-497) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-497 `typ-497 ~ ~ ~))
2915+ (weld (check ~.types-recursion-scc-shadow src-498 `tok-498 `tre-498) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-498 `typ-498 ~ ~ ~))
29062916++ test-types-recursive-branch
2907− (weld (check ~.types-recursive-branch src-498 `tok-498 `tre-498) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-498 `typ-498 ~ ~ ~))
2917+ (weld (check ~.types-recursive-branch src-499 `tok-499 `tre-499) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-499 `typ-499 ~ ~ ~))
29082918++ test-types-recursive-gate
2909− (weld (check ~.types-recursive-gate src-499 `tok-499 `tre-499) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-499 `typ-499))
2919+ (weld (check ~.types-recursive-gate src-500 `tok-500 `tre-500) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-500 `typ-500))
29102920++ test-types-recursive-sample
2911− (weld (check ~.types-recursive-sample src-500 `tok-500 `tre-500) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-500 `typ-500))
2921+ (weld (check ~.types-recursive-sample src-501 `tok-501 `tre-501) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-501 `typ-501))
29122922++ test-types-string-interpolation
2913− (weld (check ~.types-string-interpolation src-501 `tok-501 `tre-501) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-501 `typ-501 ~ ~ ~))
2923+ (weld (check ~.types-string-interpolation src-502 `tok-502 `tre-502) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-502 `typ-502 ~ ~ ~))
29142924++ test-types-tuple-context
2915− (weld (check ~.types-tuple-context src-502 `tok-502 `tre-502) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-502 `typ-502 ~ ~ ~))
2925+ (weld (check ~.types-tuple-context src-503 `tok-503 `tre-503) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-503 `typ-503 ~ ~ ~))
29162926++ test-types-tuple-context-nested
2917− (weld (check ~.types-tuple-context-nested src-503 `tok-503 `tre-503) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-503 `typ-503 ~ ~ ~))
2927+ (weld (check ~.types-tuple-context-nested src-504 `tok-504 `tre-504) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-504 `typ-504 ~ ~ ~))
29182928++ test-types-union-alias
2919− (weld (check ~.types-union-alias src-504 `tok-504 `tre-504) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-504 `typ-504))
2929+ (weld (check ~.types-union-alias src-505 `tok-505 `tre-505) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-505 `typ-505))
29202930++ test-types-union-branch-context
2921− (weld (check ~.types-union-branch-context src-505 `tok-505 `tre-505) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-505 `typ-505))
2931+ (weld (check ~.types-union-branch-context src-506 `tok-506 `tre-506) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-506 `typ-506))
29222932++ test-types-union-branch-pending
2923− (weld (check ~.types-union-branch-pending src-506 `tok-506 `tre-506) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-506 `typ-506))
2933+ (weld (check ~.types-union-branch-pending src-507 `tok-507 `tre-507) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-507 `typ-507))
29242934++ test-types-union-constructor-shape
2925− (weld (check ~.types-union-constructor-shape src-507 `tok-507 `tre-507) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-507 `typ-507))
2935+ (weld (check ~.types-union-constructor-shape src-508 `tok-508 `tre-508) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-508 `typ-508))
29262936++ test-types-union-context-flow
2927− (weld (check ~.types-union-context-flow src-508 `tok-508 `tre-508) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-508 `typ-508))
2937+ (weld (check ~.types-union-context-flow src-509 `tok-509 `tre-509) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-509 `typ-509))
29282938++ test-types-union-finite
2929− (weld (check ~.types-union-finite src-509 `tok-509 `tre-509) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-509 `typ-509 ~ ~ ~))
2939+ (weld (check ~.types-union-finite src-510 `tok-510 `tre-510) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-510 `typ-510 ~ ~ ~))
29302940++ test-types-union-finite-generic
2931− (weld (check ~.types-union-finite-generic src-510 `tok-510 `tre-510) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-510 `typ-510 ~ ~ ~))
2941+ (weld (check ~.types-union-finite-generic src-511 `tok-511 `tre-511) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-511 `typ-511 ~ ~ ~))
29322942++ test-types-union-finite-limit
2933− (weld (check ~.types-union-finite-limit src-511 `tok-511 `tre-511) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-511 `typ-511 ~ ~ ~))
2943+ (weld (check ~.types-union-finite-limit src-512 `tok-512 `tre-512) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-512 `typ-512 ~ ~ ~))
29342944++ test-types-union-import
2935− (weld (weld (check ~.types-union-import src-512 `tok-512 `tre-512) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-512 `typ-512 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-512-1]])) (check-module-trees ~.types-union-import `mtre-512 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-512-1]]))
2945+ (weld (weld (check ~.types-union-import src-513 `tok-513 `tre-513) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-513 `typ-513 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-513-1]])) (check-module-trees ~.types-union-import `mtre-513 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-513-1]]))
29362946++ test-types-union-local-pending
2937− (weld (check ~.types-union-local-pending src-513 `tok-513 `tre-513) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-513 `typ-513))
2947+ (weld (check ~.types-union-local-pending src-514 `tok-514 `tre-514) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-514 `typ-514))
29382948++ test-types-union-overlap
2939− (weld (check ~.types-union-overlap src-514 `tok-514 `tre-514) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-514 `typ-514))
2949+ (weld (check ~.types-union-overlap src-515 `tok-515 `tre-515) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-515 `typ-515))
29402950++ test-types-union-overlap-nested
2941− (weld (check ~.types-union-overlap-nested src-515 `tok-515 `tre-515) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-515 `typ-515))
2951+ (weld (check ~.types-union-overlap-nested src-516 `tok-516 `tre-516) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-516 `typ-516))
29422952++ test-types-union-patterns
2943− (weld (check ~.types-union-patterns src-516 `tok-516 `tre-516) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-516 `typ-516 ~ ~ ~))
2953+ (weld (check ~.types-union-patterns src-517 `tok-517 `tre-517) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-517 `typ-517 ~ ~ ~))
29442954++ test-types-union-patterns-generic
2945− (weld (check ~.types-union-patterns-generic src-517 `tok-517 `tre-517) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-517 `typ-517 ~ ~ ~))
2955+ (weld (check ~.types-union-patterns-generic src-518 `tok-518 `tre-518) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-518 `typ-518 ~ ~ ~))
29462956++ test-types-union-patterns-import
2947− (weld (weld (check ~.types-union-patterns-import src-518 `tok-518 `tre-518) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-518 `typ-518 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-518-1]])) (check-module-trees ~.types-union-patterns-import `mtre-518 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-518-1]]))
2957+ (weld (weld (check ~.types-union-patterns-import src-519 `tok-519 `tre-519) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-519 `typ-519 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-519-1]])) (check-module-trees ~.types-union-patterns-import `mtre-519 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-519-1]]))
29482958++ test-types-union-phantom-generic
2949− (weld (check ~.types-union-phantom-generic src-519 `tok-519 `tre-519) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-519 `typ-519))
2959+ (weld (check ~.types-union-phantom-generic src-520 `tok-520 `tre-520) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-520 `typ-520))
29502960++ test-types-union-print-cross-namespace
2951− (weld (weld (check ~.types-union-print-cross-namespace src-520 `tok-520 `tre-520) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-520 `typ-520 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-520-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-520 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-520-1]]))
2961+ (weld (weld (check ~.types-union-print-cross-namespace src-521 `tok-521 `tre-521) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-521 `typ-521 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-521-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-521 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-521-1]]))
29522962++ test-types-union-print-distinct
2953− (weld (weld (check ~.types-union-print-distinct src-521 `tok-521 `tre-521) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-521 `typ-521 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-521-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-521-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-521-3]])) (check-module-trees ~.types-union-print-distinct `mtre-521 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-521-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-521-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-521-3]]))
2963+ (weld (weld (check ~.types-union-print-distinct src-522 `tok-522 `tre-522) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-522 `typ-522 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-522-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-522-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-522-3]])) (check-module-trees ~.types-union-print-distinct `mtre-522 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-522-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-522-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-522-3]]))
29542964++ test-types-union-print-escape
2955− (weld (check ~.types-union-print-escape src-522 `tok-522 `tre-522) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-522 `typ-522))
2965+ (weld (check ~.types-union-print-escape src-523 `tok-523 `tre-523) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-523 `typ-523))
29562966++ test-types-union-print-local
2957− (weld (check ~.types-union-print-local src-523 `tok-523 `tre-523) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-523 `typ-523))
2967+ (weld (check ~.types-union-print-local src-524 `tok-524 `tre-524) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-524 `typ-524))
29582968++ test-types-union-print-nested
2959− (weld (check ~.types-union-print-nested src-524 `tok-524 `tre-524) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-524 `typ-524))
2969+ (weld (check ~.types-union-print-nested src-525 `tok-525 `tre-525) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-525 `typ-525))
29602970++ test-types-union-print-same-origin
2961− (weld (weld (check ~.types-union-print-same-origin src-525 `tok-525 `tre-525) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-525 `typ-525 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-525-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-525 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-525-1]]))
2971+ (weld (weld (check ~.types-union-print-same-origin src-526 `tok-526 `tre-526) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-526 `typ-526 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-526-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-526 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-526-1]]))
29622972++ test-types-union-print-transitive
2963− (weld (weld (check ~.types-union-print-transitive src-526 `tok-526 `tre-526) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-526 `typ-526 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-526-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-526-2]])) (check-module-trees ~.types-union-print-transitive `mtre-526 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-526-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-526-2]]))
2973+ (weld (weld (check ~.types-union-print-transitive src-527 `tok-527 `tre-527) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-527 `typ-527 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-527-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-527-2]])) (check-module-trees ~.types-union-print-transitive `mtre-527 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-527-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-527-2]]))
29642974++ test-types-union-singleton
2965− (weld (check ~.types-union-singleton src-527 `tok-527 `tre-527) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-527 `typ-527))
2975+ (weld (check ~.types-union-singleton src-528 `tok-528 `tre-528) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-528 `typ-528))
29662976++ test-types-union-tag-atoms
2967− (weld (check ~.types-union-tag-atoms src-528 `tok-528 `tre-528) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-528 `typ-528))
2977+ (weld (check ~.types-union-tag-atoms src-529 `tok-529 `tre-529) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-529 `typ-529))
29682978++ test-types-union-tags
2969− (weld (check ~.types-union-tags src-529 `tok-529 `tre-529) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-529 `typ-529))
2979+ (weld (check ~.types-union-tags src-530 `tok-530 `tre-530) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-530 `typ-530))
29702980++ test-types-union-unresolved
2971− (weld (check ~.types-union-unresolved src-530 `tok-530 `tre-530) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-530 `typ-530))
2981+ (weld (check ~.types-union-unresolved src-531 `tok-531 `tre-531) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-531 `typ-531))
29722982++ test-types-union-unresolved-flow
2973− (weld (check ~.types-union-unresolved-flow src-531 `tok-531 `tre-531) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-531 `typ-531))
2983+ (weld (check ~.types-union-unresolved-flow src-532 `tok-532 `tre-532) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-532 `typ-532))
2984+++ test-types-unit-construction
2985+ (weld (check ~.types-unit-construction src-533 `tok-533 `tre-533) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-533 `typ-533 ~ ~ ~))
29742986++ test-types-unit-context
2975− (weld (check ~.types-unit-context src-532 `tok-532 `tre-532) (check-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-532 `typ-532))
2987+ (weld (check ~.types-unit-context src-534 `tok-534 `tre-534) (check-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-534 `typ-534))
29762988++ test-types-unit-patterns
2977− (weld (check ~.types-unit-patterns src-533 `tok-533 `tre-533) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-533 `typ-533))
2989+ (weld (check ~.types-unit-patterns src-535 `tok-535 `tre-535) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-535 `typ-535))
29782990::
29792991:: +check: run golden:jibb on a case and compare both outputs
29802992::
tests/type-module-scope/expected.txt+9
@@ -47,3 +47,12 @@ prelude source does not parse; module import inference unsupported
4747partial inference; module not checked
4848++ attempt: name is not available to partial inference
4949++ direct: sample mold is not supported by partial inference
50+partial inference; module not checked
51+++ x: unit construction needs the standard prelude in partial inference
52+partial inference; module not checked
53+++ x: unit construction needs the standard prelude in partial inference
54+partial inference; module not checked
55+prelude source does not parse; module import inference unsupported
56+partial inference; module not checked
57++$ unit: not checked
58+++ x: unit construction needs the standard prelude in partial inference