on master help sign in
Infer nonrecursive generic mold aliases
edd9277iko
docs/compiler.md+2−2
@@ -56,13 +56,13 @@ The core is split into chapters, `+| %name`, in this order:
56| `%span-check` | `+check-spans`, which `+golden` runs on every tree, and `+check-spans-test` |
56| `%span-check` | `+check-spans`, which `+golden` runs on every tree, and `+check-spans-test` |
57| `%type-inference` | The initial inference fragment and its unification helpers; not yet a module type checker |
57| `%type-inference` | The initial inference fragment and its unification helpers; not yet a module type checker |
58
58
59−The inference fragment supports fixed auras, unrestricted `@`, one-way widening into it and toward aura-family ancestors, generic variables and gates, faced and unfaced cells, cell sample binders, known record field reads, a two-binder cell pattern, a complete two-arm loobean branch, closed local mold aliases and acyclic forward value references. It instantiates generalized top-level definitions when they are used. Acyclic local value definitions can refer forward and generalize variables that are free of their enclosing environment; captured variables and explicit capitals remain shared. Acyclic simple local mold aliases can also refer forward, and are scoped to the body, not its gate's sample. Recursive local groups, and recursive, generic or union local molds remain unsupported. It can infer and generalize atom constraints arising from explicit capitals or bare sample binders, preserve those constraints through aliases, instantiate them independently, and print multiple constraints. Unresolved decimal variables default to `@ud` for inferred types without gates; defaulting inside gate types and other constraint cases remain incomplete. It does not yet check a module, complete imports, general patterns, deferred constraints, recursive or generic molds, dependency cycles or most errors with both conflicting excerpts. Definite cast and call mismatches, incompatible branches and overlapping union cases report both sites and excerpts. Concrete branch results can join at an explicitly present parent aura or `@`. Some known tuple and record positions acquire matching faces, while variable-dependent face merges and ambiguous call-result propagation remain unsupported; function compatibility involving nested `@` and variable-dependent joins remain unsupported except for equal types. The current dependency pass can take quadratic time on long forward chains; the milestone's speed target remains unverified. A separate conservative pass reports unions whose cases are provably disjoint or overlapping and leaves other cases unresolved; it does not claim the mold is checked. Unsupported forms are reported as such, and the partial output says the module has not been checked.
59+The inference fragment supports fixed auras, unrestricted `@`, one-way widening into it and toward aura-family ancestors, generic variables and gates, faced and unfaced cells, cell sample binders, known record field reads, a two-binder cell pattern, a complete two-arm loobean branch, closed local mold aliases and acyclic forward value references. It instantiates generalized top-level definitions when they are used. Acyclic local value definitions can refer forward and generalize variables that are free of their enclosing environment; captured variables and explicit capitals remain shared. Acyclic simple local mold aliases can also refer forward, and are scoped to the body, not its gate's sample. Nonrecursive generic aliases of supported molds can be applied at exact arity, including locally and through library interfaces; their parameters are lexical. Recursive local groups and recursive or union molds remain unsupported. It can infer and generalize atom constraints arising from explicit capitals or bare sample binders, preserve those constraints through aliases, instantiate them independently, and print multiple constraints. Unresolved decimal variables default to `@ud` for inferred types without gates; defaulting inside gate types and other constraint cases remain incomplete. It does not yet check a module, complete imports, general patterns, deferred constraints, recursive or union molds, dependency cycles or most errors with both conflicting excerpts. Definite cast and call mismatches, incompatible branches and overlapping union cases report both sites and excerpts. Concrete branch results can join at an explicitly present parent aura or `@`. Some known tuple and record positions acquire matching faces, while variable-dependent face merges and ambiguous call-result propagation remain unsupported; function compatibility involving nested `@` and variable-dependent joins remain unsupported except for equal types. The current dependency pass can take quadratic time on long forward chains; the milestone's speed target remains unverified. A separate conservative pass reports unions whose cases are provably disjoint or overlapping and leaves other cases unresolved; it does not claim the mold is checked. Unsupported forms are reported as such, and the partial output says the module has not been checked.
60
60
61The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also reads ordered map fields in records when the map arguments are syntactically fixed atom molds and other fields are fixed atom molds or standard collections of static atom molds. Collection names must not be shadowed. The reader can also import a mark door sample, removing its outer sample face and validating its build subject. A single nested `$^` in a record is checked when its branches and sibling fields use only aura atom molds such as `@ud`, constant tags and records built from them; both source branches are re-evaluated, unchanged siblings are verified and overlapping cases are rejected. Other nested `$^`, including `$^` in collection arguments, is rejected; other nested ordered maps, general source-level disjointness and complete integration with the checker remain unfinished. `+golden-types-imports` can consume fixed-aura atoms and nested faced or unfaced cells with valid Jibb face names from caller-supplied reader results for declared `/-` imports; `+golden-types-with-marks` accepts those same shapes from declared mark imports in a separate list. Other forms remain unsupported. Its disjointness proof is conservative and can reject a valid union it cannot prove disjoint. Collection recognition requires the originating `/sur` core. The reader validates direct zuse subjects and Ford subjects consisting of faced imported cores and a validated tail, checking imported cores transitively; it rejects shadowed names, inconsistent core subjects and other subject shapes. For a recursive reference, the reader matches the exact Hoon hold against named arms in validated cores, including transitive Ford imports; it rejects missing, unlabelled or ambiguous origins. Its fixtures include three real Tlon files; `tools/importer-test` compares the internal projection under eval, and the ship test compares the same golden output. `tools/type-import-test` and `tools/type-mark-test` compare bridge reports under eval and on the ship. `tools/clay-fixtures` also passes Clay-built `/sur` molds and mark samples through the Clay-built importer and partial checker.
61The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also reads ordered map fields in records when the map arguments are syntactically fixed atom molds and other fields are fixed atom molds or standard collections of static atom molds. Collection names must not be shadowed. The reader can also import a mark door sample, removing its outer sample face and validating its build subject. A single nested `$^` in a record is checked when its branches and sibling fields use only aura atom molds such as `@ud`, constant tags and records built from them; both source branches are re-evaluated, unchanged siblings are verified and overlapping cases are rejected. Other nested `$^`, including `$^` in collection arguments, is rejected; other nested ordered maps, general source-level disjointness and complete integration with the checker remain unfinished. `+golden-types-imports` can consume fixed-aura atoms and nested faced or unfaced cells with valid Jibb face names from caller-supplied reader results for declared `/-` imports; `+golden-types-with-marks` accepts those same shapes from declared mark imports in a separate list. Other forms remain unsupported. Its disjointness proof is conservative and can reject a valid union it cannot prove disjoint. Collection recognition requires the originating `/sur` core. The reader validates direct zuse subjects and Ford subjects consisting of faced imported cores and a validated tail, checking imported cores transitively; it rejects shadowed names, inconsistent core subjects and other subject shapes. For a recursive reference, the reader matches the exact Hoon hold against named arms in validated cores, including transitive Ford imports; it rejects missing, unlabelled or ambiguous origins. Its fixtures include three real Tlon files; `tools/importer-test` compares the internal projection under eval, and the ship test compares the same golden output. `tools/type-import-test` and `tools/type-mark-test` compare bridge reports under eval and on the ship. `tools/clay-fixtures` also passes Clay-built `/sur` molds and mark samples through the Clay-built importer and partial checker.
62
62
63Callers that have a `/sur` core and a name can use `+read-named`: it checks for a locally declared arm before asking Hoon to evaluate the mold, and reports evaluation failures with the final Hoon trace line. `+read-mold-in` remains available when the caller already has the selected type. The checker currently treats a failed import as unsupported rather than rendering the importer's error.
63Callers that have a `/sur` core and a name can use `+read-named`: it checks for a locally declared arm before asking Hoon to evaluate the mold, and reports evaluation failures with the final Hoon trace line. `+read-mold-in` remains available when the caller already has the selected type. The checker currently treats a failed import as unsupported rather than rendering the importer's error.
64
64
65−`+golden-types-with-prelude` accepts case-local Jibb module sources alongside `/sur` and mark results and the vendored prelude source. It resolves reachable ordinary library modules in dependency order, caching completed interfaces per invocation and exporting supported closed value schemes and simple mold aliases. It reserves names from the supplied prelude, detects missing sources and cycles, and rejects a dependency if its interface cannot be inferred by the fragment. API files, modules with `main`, unsupported definitions and many other features remain outside this subset; the prelude inventory itself is incomplete. The older `+golden-types-with-modules` entry point fails closed for imports because it has no prelude scope. Neither entry point claims the module has been checked.
65+`+golden-types-with-prelude` accepts case-local Jibb module sources alongside `/sur` and mark results and the vendored prelude source. It resolves reachable ordinary library modules in dependency order, caching completed interfaces per invocation and exporting supported closed value schemes and simple or nonrecursive generic mold aliases. It reserves names from the supplied prelude, detects missing sources and cycles, and rejects a dependency if its interface cannot be inferred by the fragment. API files, modules with `main`, unsupported definitions and many other features remain outside this subset; the prelude inventory itself is incomplete. The older `+golden-types-with-modules` entry point fails closed for imports because it has no prelude scope. Neither entry point claims the module has been checked.
66
66
67And the design notes:
67And the design notes:
68
68
docs/open-questions.md+3−1
@@ -18,7 +18,7 @@ On 2026-10-30, @iko adopted gate-free `eq` arguments and map and set keys, treat
18
18
19## Questions milestone 2 raises
19## Questions milestone 2 raises
20
20
21−Found while writing [prompts/milestone-2.md](prompts/milestone-2.md) and checking it against the doc's examples. The numbering is retained so existing references stay valid. The prelude inventory in question 3, the `like` representation in question 18, and the type of `clap` in question 20 remain open; the other questions are settled.
21+Found while writing [prompts/milestone-2.md](prompts/milestone-2.md) and checking it against the doc's examples. The numbering is retained so existing references stay valid. Questions 3, 18, 20, 21 and 22 remain open; the other questions are settled.
22
22
231. **Settled: how the prelude identifies jetted functions.** On 2026-10-30, @iko said the prelude functions have working Jibb implementations, and the compiler recognizes their shapes and uses the Hoon versions so jets can fire.
231. **Settled: how the prelude identifies jetted functions.** On 2026-10-30, @iko said the prelude functions have working Jibb implementations, and the compiler recognizes their shapes and uses the Hoon versions so jets can fire.
242. **Settled: how the prelude keeps helpers private.** On 2026-10-30, @iko chose a separate internal prelude module imported by the prelude, without exposing the imported helpers.
242. **Settled: how the prelude keeps helpers private.** On 2026-10-30, @iko chose a separate internal prelude module imported by the prelude, without exposing the imported helpers.
@@ -40,6 +40,8 @@ Found while writing [prompts/milestone-2.md](prompts/milestone-2.md) and checkin
4018. **The two uses of Hoon `like`.** Hoon `+like` is a wet mold builder, but the gate it returns is callable and applies its supplied gate to the product. In a verified Hoon 135 example, applying `(like f)` to `[[1 2] [7 8 ~]]` produces an edge whose product is `8` when `f` is identity and `42` when `f` returns `42`; the resulting nail is the original input. Jibb molds are types, not callable values. The prelude now declares a generic `(like A)` mold and a `wonk` extractor; both parse, but their full type and backend validation remain outstanding. Should it also expose a value gate under `like`? If so, should the value preserve Hoon's input shape and behavior, or instead map the product of an already constructed edge? @iko is reviewing these alternatives; the exact public signature is not yet decided.
4018. **The two uses of Hoon `like`.** Hoon `+like` is a wet mold builder, but the gate it returns is callable and applies its supplied gate to the product. In a verified Hoon 135 example, applying `(like f)` to `[[1 2] [7 8 ~]]` produces an edge whose product is `8` when `f` is identity and `42` when `f` returns `42`; the resulting nail is the original input. Jibb molds are types, not callable values. The prelude now declares a generic `(like A)` mold and a `wonk` extractor; both parse, but their full type and backend validation remain outstanding. Should it also expose a value gate under `like`? If so, should the value preserve Hoon's input shape and behavior, or instead map the product of an already constructed edge? @iko is reviewing these alternatives; the exact public signature is not yet decided.
4119. **Settled: Hoon aura families and `step.hoon`.** On 2026-10-30, @iko chose `step.hoon` for Hoon 1c `step`, avoiding a clash with the Grammar example's `step`, and chose one-way widening across Hoon aura families: for example, `@ud` and `@ux` fit `@u`, and `@tD` fits `@t`. The reverse needs a check. The `step.hoon` group representation is not implemented yet.
4119. **Settled: Hoon aura families and `step.hoon`.** On 2026-10-30, @iko chose `step.hoon` for Hoon 1c `step`, avoiding a clash with the Grammar example's `step`, and chose one-way widening across Hoon aura families: for example, `@ud` and `@ux` fit `@u`, and `@tD` fits `@t`. The reverse needs a check. The `step.hoon` group representation is not implemented yet.
4220. **The type of Hoon `clap`.** Hoon allows its two input units and combining gate's result to have different types. If only one unit is present it returns that unit; when both are present it returns the combining gate's result. Jibb branches normally need a common type, while every union written in Jibb has a name. Should the Jibb gate require a shared type, infer an unnamed union of the possible values, or wait for a different typing design? Asked @iko on 2026-10-30. `clap` is not implemented while this is open.
4220. **The type of Hoon `clap`.** Hoon allows its two input units and combining gate's result to have different types. If only one unit is present it returns that unit; when both are present it returns the combining gate's result. Jibb branches normally need a common type, while every union written in Jibb has a name. Should the Jibb gate require a shared type, infer an unnamed union of the possible values, or wait for a different typing design? Asked @iko on 2026-10-30. `clap` is not implemented while this is open.
43+21. **Duplicate faces in imported Hoon records.** Hoon permits `[a=@ud a=@t]`, and its lookup picks the first `a`. Should Jibb reject the imported type where it is used, use the first field, or permit the type but reject access to the ambiguous field? Asked @iko on 2026-10-30. The inference fragment currently permits the type but declines ambiguous field access (doc question).
44+22. **Overlapping imported `$%` and `$?` cases.** The Grammar says a union whose cases don't all differ as nouns is rejected, while the import table explicitly mentions that condition only for `$^`; its `$%` and `$?` row says they become a union. Does the general disjointness rule reject imported `$%` and `$?` cases such as `[%x @ud]` and `[%x @t]` where the type is used? Asked @iko on 2026-10-30. The general rule is the provisional reading (doc question); the importer currently accepts some overlaps, and a fix is in progress.
43
45
44## Grammar questions never put to the doc's author
46## Grammar questions never put to the doc's author
45
47
docs/status.md+7−6
@@ -19,7 +19,7 @@ On 2026-10-30, @iko decided that Jibb drops `$?`, so a `+$` takes a union's case
19
19
20## Milestone 2: in progress
20## Milestone 2: in progress
21
21
22−The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass selected Hoon atoms and nested faced or unfaced cells from `/sur` molds and marks into inference. The reader handles mark samples, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, certain ordered-map fields, and direct `$^` unions whose cases can be proved disjoint. Ambiguous recursive origins fail closed; one nested `$^` in a static record of aura and constant-tag molds is checked, while other nested `$^`, nested ordered maps, general union disjointness and complete import integration remain unfinished. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and the current prelude names, 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, simple acyclic local mold aliases, and selected faced record casts and field reads. Variable-dependent face merges remain unsupported. Unfixed decimal literals default to `@ud` in gate-free inferred types; recursive local groups, more complex local molds, 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; its golden fixtures include three real Tlon files. The prelude currently has only a few functions, 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 and nested faced or unfaced cells from `/sur` molds and marks into inference. The reader handles mark samples, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, certain ordered-map fields, and direct `$^` unions whose cases can be proved disjoint. Ambiguous recursive origins fail closed; one nested `$^` in a static record of aura and constant-tag molds is checked, while other nested `$^`, nested ordered maps, general union disjointness and complete import integration remain unfinished. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and the current prelude names, 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, simple and nonrecursive generic mold aliases, and selected faced record casts and field reads. Variable-dependent face merges remain unsupported. Unfixed decimal literals default to `@ud` in gate-free inferred types; recursive local groups, recursive and union generic molds, 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; its golden fixtures include three real Tlon files. The prelude currently has only a few functions, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
23
23
24## Milestone 1: parser and mark
24## Milestone 1: parser and mark
25
25
@@ -37,8 +37,8 @@ What the plan asks for, and where it is:
37
37
38Besides the plan's list:
38Besides the plan's list:
39
39
40−- 447 golden cases: 231 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.
40+- 459 golden cases: 243 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.
41−- The 447-case corpus passed under `urbit eval` in 32.4 s. The fake ship passed all 452 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 22.3 s for sync and 34.3 s for tests. The importer golden compares 110 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.
41+- The 459-case corpus passed under `urbit eval` in 33.6 s. The fake ship passed all 464 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 24.0 s for sync and 29.8 s for tests. The importer golden compares 110 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- `tools/testdata/selftest` (22 checks) and `tools/testdata/ship-selftest` test the tools themselves.
42- `tools/testdata/selftest` (22 checks) and `tools/testdata/ship-selftest` test the tools themselves.
43- 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.
43- 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.
44- 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).
44- 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).
@@ -66,14 +66,15 @@ Besides the plan's list:
66| 8b9c9ac | 2026-10-30 | Preserve recursive import origins, infer simple local molds, and supply Jibb module sources to the partial checker |
66| 8b9c9ac | 2026-10-30 | Preserve recursive import origins, infer simple local molds, and supply Jibb module sources to the partial checker |
67| 529736a | 2026-10-30 | Infer supported library import graphs and guard nested Hoon `$^` in collections |
67| 529736a | 2026-10-30 | Infer supported library import graphs and guard nested Hoon `$^` in collections |
68| 8bf1b12 | 2026-10-30 | Infer selected record faces and check nested `$^` in static Hoon records |
68| 8bf1b12 | 2026-10-30 | Infer selected record faces and check nested `$^` in static Hoon records |
69−| This change | 2026-10-30 | Cache library interfaces, preserve imported Hoon record faces, and check nested tagged unions |
69+| d8ac47d | 2026-10-30 | Cache library interfaces, preserve imported Hoon record faces, and check nested tagged unions |
70+| This change | 2026-10-30 | Infer nonrecursive generic mold aliases with lexical parameters |
70
71
71## Checking it
72## Checking it
72
73
73On a machine set up as [development.md](development.md) says:
74On a machine set up as [development.md](development.md) says:
74
75
75```
76```
76−tools/golden # 447 cases under urbit eval
77+tools/golden # 459 cases under urbit eval
77tools/importer-test # the Hoon importer fixture projection
78tools/importer-test # the Hoon importer fixture projection
78tools/type-import-test # the importer/checker bridge fixture
79tools/type-import-test # the importer/checker bridge fixture
79tools/type-mark-test # the mark/checker bridge fixture
80tools/type-mark-test # the mark/checker bridge fixture
@@ -83,7 +84,7 @@ tools/testdata/selftest # the tools themselves
83tools/doc-blocks docs/spec # the doc's examples are golden cases
84tools/doc-blocks docs/spec # the doc's examples are golden cases
84tools/ship start
85tools/ship start
85tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
86tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
86−tools/ship test # the same 447 cases as -test arms on the ship
87+tools/ship test # the same 459 cases as -test arms on the ship
87tools/testdata/ship-selftest
88tools/testdata/ship-selftest
88tools/ship check-commit # |commit stores .jibb files
89tools/ship check-commit # |commit stores .jibb files
89tools/clay-fixtures # example /sur files and marks build through Clay
90tools/clay-fixtures # example /sur files and marks build through Clay
jibb-dev/lib/jibb.hoon+121−18
@@ -4933,16 +4933,17 @@
4933::
4933::
4934+$ ischeme [typ=itype vars=(list @ud)]
4934+$ ischeme [typ=itype vars=(list @ud)]
4935+$ ienv (list [name=term scheme=ischeme])
4935+$ ienv (list [name=term scheme=ischeme])
4936−+$ imold-types (list [name=term typ=itype])
4936++$ imold-types (list [name=term template=ischeme])
4937+$ ifile [values=ienv molds=imold-types]
4937+$ ifile [values=ienv molds=imold-types]
4938+$ ijimports (list [face=term interface=ifile])
4938+$ ijimports (list [face=term interface=ifile])
4939+$ icaps (list [name=@t id=@ud])
4939+$ icaps (list [name=@t id=@ud])
4940++$ iparams (list [name=@t typ=itype])
4940+$ imolds (list [name=term body=shape])
4941+$ imolds (list [name=term body=shape])
4941:: A caller supplies the exact noun returned by +read-mold:jibb-import.
4942:: A caller supplies the exact noun returned by +read-mold:jibb-import.
4942:: This core has no Ford dependencies; unrecognized payloads fail closed.
4943:: This core has no Ford dependencies; unrecognized payloads fail closed.
4943+$ iexternals (list [module=term name=term result=*])
4944+$ iexternals (list [module=term name=term result=*])
4944+$ imark-externals (list [mark=term result=*])
4945+$ imark-externals (list [mark=term result=*])
4945−+$ istate [next=@ud sub=isub caps=icaps binders=(list @ud) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) active=(list term) in-mold=?]
4946++$ istate [next=@ud sub=isub caps=icaps binders=(list @ud) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) params=iparams active=(list term) in-mold=?]
4946+$ idiag [msg=tape sites=(list [at=span note=tape])]
4947+$ idiag [msg=tape sites=(list [at=span note=tape])]
4947+$ iresult (each [typ=itype state=istate] idiag)
4948+$ iresult (each [typ=itype state=istate] idiag)
4948+$ isample-result (each [typ=itype env=ienv state=istate] tape)
4949+$ isample-result (each [typ=itype env=ienv state=istate] tape)
@@ -5212,13 +5213,86 @@
5212::
5213::
5213++ find-jibb-mold
5214++ find-jibb-mold
5214 |= [name=term iface=ifile]
5215 |= [name=term iface=ifile]
5215− ^- (unit itype)
5216+ ^- (unit ischeme)
5216 =/ ms=imold-types molds.iface
5217 =/ ms=imold-types molds.iface
5217 |-
5218 |-
5218 ?~ ms ~
5219 ?~ ms ~
5219− ?: =(name name.i.ms) `typ.i.ms
5220+ ?: =(name name.i.ms) `template.i.ms
5220 $(ms t.ms)
5221 $(ms t.ms)
5221::
5222::
5223+:: Generic mold parameters are lexical and distinct from the enclosing
5224+:: value's capital variables. Arguments are substituted only once, so
5225+:: an argument's variable ID cannot be captured by a template ID.
5226+::
5227+++ iparam-lookup
5228+ |= [name=@t params=iparams]
5229+ ^- (unit itype)
5230+ ?~ params ~
5231+ ?: =(name name.i.params) `typ.i.params
5232+ $(params t.params)
5233+::
5234+++ distinct-params
5235+ |= names=(list @t)
5236+ ^- ?
5237+ ?~ names &
5238+ ?: (lien t.names |=(n=@t =(n i.names))) |
5239+ $(names t.names)
5240+::
5241+++ bind-params
5242+ |= [names=(list @t) args=(list itype)]
5243+ ^- (unit iparams)
5244+ ?~ names ?~(args `~ ~)
5245+ ?~ args ~
5246+ =/ rest=(unit iparams) $(names t.names, args t.args)
5247+ ?~ rest ~
5248+ `[[i.names i.args] u.rest]
5249+::
5250+++ template-apply
5251+ |= [template=ischeme args=(list itype)]
5252+ ^- (unit itype)
5253+ =/ vars=(list @ud) vars.template
5254+ =/ ren=isub ~
5255+ |-
5256+ ?~ vars ?~(args `(itype-rename typ.template ren) ~)
5257+ ?~ args ~
5258+ $(vars t.vars, args t.args, ren [[i.vars i.args] ren])
5259+::
5260+++ infer-shape-args
5261+ |= [args=(list shape) state=istate]
5262+ ^- (unit [types=(list itype) state=istate])
5263+ ?~ args `[~ state]
5264+ =/ head=(unit [typ=itype state=istate]) (infer-simple-shape i.args state)
5265+ ?~ head ~
5266+ =/ tail=(unit [types=(list itype) state=istate]) $(args t.args, state state.u.head)
5267+ ?~ tail ~
5268+ `[[typ.u.head types.u.tail] state.u.tail]
5269+::
5270+++ fresh-mold-params
5271+ |= [names=(list @t) next=@ud]
5272+ ^- [params=iparams vars=(list @ud) next=@ud]
5273+ ?~ names [~ ~ next]
5274+ =/ rest=[params=iparams vars=(list @ud) next=@ud] $(names t.names, next +(next))
5275+ [[[i.names [%var next]] params.rest] [next vars.rest] next.rest]
5276+::
5277+++ infer-mold-template
5278+ |= [sh=shape state=istate]
5279+ ^- (unit [template=ischeme state=istate])
5280+ ?: ?=(%generic -.sh)
5281+ ?~ vars.sh ~
5282+ ?. (distinct-params vars.sh) ~
5283+ =/ fresh=[params=iparams vars=(list @ud) next=@ud] (fresh-mold-params vars.sh next.state)
5284+ =/ out=(unit [typ=itype state=istate])
5285+ (infer-simple-shape body.sh state(next next.fresh, params params.fresh, in-mold &))
5286+ ?~ out ~
5287+ =/ used=(list @ud) (itype-vars typ.u.out)
5288+ ?. (levy used |=(n=@ud (lien vars.fresh |=(p=@ud =(p n))))) ~
5289+ `[[typ.u.out vars.fresh] state.u.out(params params.state, in-mold in-mold.state)]
5290+ =/ out=(unit [typ=itype state=istate])
5291+ (infer-simple-shape sh state(params ~, in-mold &))
5292+ ?~ out ~
5293+ ?: ?=(^ (itype-vars typ.u.out)) ~
5294+ `[[typ.u.out ~] state.u.out(params params.state, in-mold in-mold.state)]
5295+::
5222++ infer-simple-shape
5296++ infer-simple-shape
5223 |= [sh=shape state=istate]
5297 |= [sh=shape state=istate]
5224 ^- (unit [typ=itype state=istate])
5298 ^- (unit [typ=itype state=istate])
@@ -5241,9 +5315,10 @@
5241 ?^ t.t.names.sh ~
5315 ?^ t.t.names.sh ~
5242 =/ iface=(unit ifile) (find-jibb-interface i.t.names.sh jimports.state)
5316 =/ iface=(unit ifile) (find-jibb-interface i.t.names.sh jimports.state)
5243 ?^ iface
5317 ?^ iface
5244− =/ found=(unit itype) (find-jibb-mold n u.iface)
5318+ =/ found=(unit ischeme) (find-jibb-mold n u.iface)
5245 ?~ found ~
5319 ?~ found ~
5320+ ?^ vars.u.found ~
5246− `[u.found state]
5321+ `[typ.u.found state]
5247 =/ found=(unit itype)
5322 =/ found=(unit itype)
5248 (find-imported-mold i.t.names.sh n externals.state surs.state)
5323 (find-imported-mold i.t.names.sh n externals.state surs.state)
5249 ?~ found ~
5324 ?~ found ~
@@ -5257,10 +5332,38 @@
5257 =/ found=(unit shape) (find-simple-mold n molds.state)
5332 =/ found=(unit shape) (find-simple-mold n molds.state)
5258 ?~ found ~
5333 ?~ found ~
5259 =/ out=(unit [typ=itype state=istate])
5334 =/ out=(unit [typ=itype state=istate])
5260− $(sh u.found, state state(active [n active.state], in-mold &))
5335+ $(sh u.found, state state(active [n active.state], in-mold &, params ~))
5336+ ?~ out ~
5337+ `[typ.u.out state.u.out(active active.state, in-mold in-mold.state, params params.state)]
5338+ %apply
5339+ ?~ ref.sh ~
5340+ =/ args=(unit [types=(list itype) state=istate]) (infer-shape-args args.sh state)
5341+ ?~ args ~
5342+ =/ n=term i.ref.sh
5343+ ?^ t.ref.sh
5344+ ?^ t.t.ref.sh ~
5345+ =/ iface=(unit ifile) (find-jibb-interface i.t.ref.sh jimports.state.u.args)
5346+ ?~ iface ~
5347+ =/ template=(unit ischeme) (find-jibb-mold n u.iface)
5348+ ?~ template ~
5349+ ?~ vars.u.template ~
5350+ =/ applied=(unit itype) (template-apply u.template types.u.args)
5351+ ?~ applied ~
5352+ `[u.applied state.u.args]
5353+ ?: (lien active.state.u.args |=(x=term =(x n))) ~
5354+ =/ found=(unit shape) (find-simple-mold n molds.state.u.args)
5355+ ?~ found ~
5356+ ?. ?=(%generic -.u.found) ~
5357+ ?. (distinct-params vars.u.found) ~
5358+ =/ params=(unit iparams) (bind-params vars.u.found types.u.args)
5359+ ?~ params ~
5360+ =/ out=(unit [typ=itype state=istate])
5361+ $(sh body.u.found, state state.u.args(active [n active.state.u.args], in-mold &, params u.params))
5261 ?~ out ~
5362 ?~ out ~
5262− `[typ.u.out state.u.out(active active.state, in-mold in-mold.state)]
5363+ `[typ.u.out state.u.out(active active.state.u.args, in-mold in-mold.state.u.args, params params.state.u.args)]
5263 %tvar
5364 %tvar
5365+ =/ param=(unit itype) (iparam-lookup name.sh params.state)
5366+ ?^ param `[u.param state]
5264 ?: in-mold.state ~
5367 ?: in-mold.state ~
5265 =/ n=(unit @ud) (icap-lookup name.sh caps.state)
5368 =/ n=(unit @ud) (icap-lookup name.sh caps.state)
5266 ?^ n `[[%var u.n] state]
5369 ?^ n `[[%var u.n] state]
@@ -5405,8 +5508,8 @@
5405 ^- ?
5508 ^- ?
5406 ?~ locals &
5509 ?~ locals &
5407 =/ m=[name=term body=shape] i.locals
5510 =/ m=[name=term body=shape] i.locals
5408− =/ inferred=(unit [typ=itype state=istate])
5511+ =/ inferred=(unit [template=ischeme state=istate])
5409− (infer-simple-shape body.m state(active [name.m active.state], in-mold &))
5512+ (infer-mold-template body.m state(active [name.m active.state], in-mold &))
5410 ?~ inferred |
5513 ?~ inferred |
5411 $(locals t.locals)
5514 $(locals t.locals)
5412::
5515::
@@ -5434,7 +5537,8 @@
5434 $(ds t.ds, env [[name.d [typ vars]] env], state state.p.inferred, progressed &)
5537 $(ds t.ds, env [[name.d [typ vars]] env], state state.p.inferred, progressed &)
5435::
5538::
5436:: Read only fields of a known record. Unresolved field constraints and
5539:: Read only fields of a known record. Unresolved field constraints and
5437−:: ambiguous repeated faces are outside this fragment.
5540+:: ambiguous repeated faces are outside this fragment (doc question:
5541+:: whether duplicate imported Hoon faces are valid or select a field).
5438::
5542::
5439++ record-fields-named
5543++ record-fields-named
5440 |= [name=term t=itype sub=isub]
5544 |= [name=term t=itype sub=isub]
@@ -5820,7 +5924,7 @@
5820 ?: ?=(%mold -.d) $(ds t.ds)
5924 ?: ?=(%mold -.d) $(ds t.ds)
5821 ?. (unique-value-name name.d globals) $(ds t.ds)
5925 ?. (unique-value-name name.d globals) $(ds t.ds)
5822 ?^ (ienv-lookup name.d env) $(ds t.ds)
5926 ?^ (ienv-lookup name.d env) $(ds t.ds)
5823− =/ result=iresult (infer-fragment val.d env [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ |])
5927+ =/ result=iresult (infer-fragment val.d env [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ |])
5824 ?: ?=(%| -.result) $(ds t.ds)
5928 ?: ?=(%| -.result) $(ds t.ds)
5825 ?: (constrained-capitals caps.state.p.result sub.state.p.result) $(ds t.ds)
5929 ?: (constrained-capitals caps.state.p.result sub.state.p.result) $(ds t.ds)
5826 =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
5930 =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
@@ -6064,13 +6168,12 @@
6064 ^- (each imold-types @t)
6168 ^- (each imold-types @t)
6065 ?~ molds [%& ~]
6169 ?~ molds [%& ~]
6066 =/ m=[name=term body=shape] i.molds
6170 =/ m=[name=term body=shape] i.molds
6067− =/ t=(unit [typ=itype state=istate])
6171+ =/ t=(unit [template=ischeme state=istate])
6068− (infer-simple-shape body.m state(active [name.m active.state], in-mold &))
6172+ (infer-mold-template body.m state(active [name.m active.state], in-mold &))
6069 ?~ t [%| 'module mold needs unsupported inference']
6173 ?~ t [%| 'module mold needs unsupported inference']
6070− ?: ?=(^ (itype-vars typ.u.t)) [%| 'module mold has unsupported variables']
6071 =/ rest=(each imold-types @t) $(molds t.molds)
6174 =/ rest=(each imold-types @t) $(molds t.molds)
6072 ?: ?=(%| -.rest) rest
6175 ?: ?=(%| -.rest) rest
6073− [%& [[name.m typ.u.t] p.rest]]
6176+ [%& [[name.m template.u.t] p.rest]]
6074::
6177::
6075++ module-values-complete
6178++ module-values-complete
6076 |= [ds=(list def) env=ienv]
6179 |= [ds=(list def) env=ienv]
@@ -6130,7 +6233,7 @@
6130 =/ surs=(list term) (collect-sur-imports imports.mod)
6233 =/ surs=(list term) (collect-sur-imports imports.mod)
6131 =/ marks=(list term) (collect-mark-imports imports.mod)
6234 =/ marks=(list term) (collect-mark-imports imports.mod)
6132 =/ reserved=(list term) (weld prelude-molds (turn resolved.p.js |=(j=[face=term interface=ifile] face.j)))
6235 =/ reserved=(list term) (weld prelude-molds (turn resolved.p.js |=(j=[face=term interface=ifile] face.j)))
6133− =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks resolved.p.js reserved ~ |]
6236+ =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks resolved.p.js reserved ~ ~ |]
6134 =/ mts=(each imold-types @t) (module-mold-types molds state)
6237 =/ mts=(each imold-types @t) (module-mold-types molds state)
6135 ?: ?=(%| -.mts) [%| (crip "{(trip p.mts)}: {(spud at)}")]
6238 ?: ?=(%| -.mts) [%| (crip "{(trip p.mts)}: {(spud at)}")]
6136 =/ env=ienv (resolve-supported-defs defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved)
6239 =/ env=ienv (resolve-supported-defs defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved)
@@ -6203,7 +6306,7 @@
6203 $(ds t.ds, lines [(show-partial-mold file src d molds) lines])
6306 $(ds t.ds, lines [(show-partial-mold file src d molds) lines])
6204 ?. (unique-value-name name.d globals)
6307 ?. (unique-value-name name.d globals)
6205 $(ds t.ds, lines [(crip "++ {(trip name.d)}: name already in scope") lines])
6308 $(ds t.ds, lines [(crip "++ {(trip name.d)}: name already in scope") lines])
6206− =/ result=iresult (infer-fragment val.d env [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ |])
6309+ =/ result=iresult (infer-fragment val.d env [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ |])
6207 ?: ?=(%| -.result)
6310 ?: ?=(%| -.result)
6208 $(ds t.ds, lines [(show-inference-diagnostic file src name.d p.result) lines])
6311 $(ds t.ds, lines [(show-inference-diagnostic file src name.d p.result) lines])
6209 ?: (constrained-capitals caps.state.p.result sub.state.p.result)
6312 ?: (constrained-capitals caps.state.p.result sub.state.p.result)
tests/golden/types-generic-arity/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds: "Generic molds" are defined with `|$` after a `+$` name; type variables are capitals.
2+tests: Generic applications with too many or too few arguments fail closed.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-generic-arity/source.jibbnew file+4
@@ -0,0 +1,4 @@
1++$ carrier |$ [A] [payload=A count=@ud]
2++$ duo |$ [A B] [left=A right=B]
3+++ too-many ^- (carrier @t @p) [payload="hi" count=1]
4+++ too-few ^- (duo @t) [left="hi" right=~zod]
tests/golden/types-generic-arity/tokens.txtnew file+64
@@ -0,0 +1,64 @@
1+1:1 glyph +$
2+1:4 name carrier
3+1:12 glyph |$
4+1:15 glyph [
5+1:16 tight tvar A
6+1:17 tight glyph ]
7+1:19 glyph [
8+1:20 tight name payload
9+1:27 tight glyph =
10+1:28 tight tvar A
11+1:30 name count
12+1:35 tight glyph =
13+1:36 tight aura @ud
14+1:39 tight glyph ]
15+2:1 NEWLINE
16+2:1 glyph +$
17+2:4 name duo
18+2:8 glyph |$
19+2:11 glyph [
20+2:12 tight tvar A
21+2:14 tvar B
22+2:15 tight glyph ]
23+2:17 glyph [
24+2:18 tight name left
25+2:22 tight glyph =
26+2:23 tight tvar A
27+2:25 name right
28+2:30 tight glyph =
29+2:31 tight tvar B
30+2:32 tight glyph ]
31+3:1 NEWLINE
32+3:1 glyph ++
33+3:4 name too-many
34+3:13 glyph ^-
35+3:16 glyph (
36+3:17 tight name carrier
37+3:25 aura @t
38+3:28 aura @p
39+3:30 tight glyph )
40+3:32 glyph [
41+3:33 tight name payload
42+3:40 tight glyph =
43+3:41 tight str "hi"
44+3:46 name count
45+3:51 tight glyph =
46+3:52 tight lit 1
47+3:53 tight glyph ]
48+4:1 NEWLINE
49+4:1 glyph ++
50+4:4 name too-few
51+4:12 glyph ^-
52+4:15 glyph (
53+4:16 tight name duo
54+4:20 aura @t
55+4:22 tight glyph )
56+4:24 glyph [
57+4:25 tight name left
58+4:29 tight glyph =
59+4:30 tight str "hi"
60+4:35 name right
61+4:40 tight glyph =
62+4:41 tight lit ~zod
63+4:45 tight glyph ]
64+4:46 NEWLINE
tests/golden/types-generic-arity/tree.txtnew file+23
@@ -0,0 +1,23 @@
1+(module
2+ (mold 1:1 carrier
3+ (generic 1:12 A
4+ (cell 1:19
5+ (face 1:20 payload (tvar 1:28 A))
6+ (face 1:30 count (aura 1:36 @ud)))))
7+ (mold 2:1 duo
8+ (generic 2:8 A B
9+ (cell 2:17
10+ (face 2:18 left (tvar 2:23 A))
11+ (face 2:25 right (tvar 2:31 B)))))
12+ (value 3:1 too-many
13+ (cast 3:13
14+ (apply 3:16 carrier (aura 3:25 @t) (aura 3:28 @p))
15+ (tuple 3:32
16+ (face 3:33 payload (str 3:41 "hi"))
17+ (face 3:46 count (lit 3:52 1)))))
18+ (value 4:1 too-few
19+ (cast 4:12
20+ (apply 4:15 duo (aura 4:20 @t))
21+ (tuple 4:24
22+ (face 4:25 left (str 4:30 "hi"))
23+ (face 4:35 right (lit 4:41 ~zod))))))
tests/golden/types-generic-arity/types.txtnew file+5
@@ -0,0 +1,5 @@
1+partial inference; module not checked
2++$ carrier: not checked
3++$ duo: not checked
4+++ too-many: cast mold is not supported by partial inference
5+++ too-few: cast mold is not supported by partial inference
tests/golden/types-generic-gates/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds: "Generic molds" are defined with `|$` after a `+$` name; type variables are capitals.
2+tests: Nonrecursive generic gate and two-parameter record molds retain independent parameter types.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-generic-gates/source.jibbnew file+4
@@ -0,0 +1,4 @@
1++$ mapper |$ [A B] $-(A B)
2++$ duo |$ [A B] [left=A right=B]
3+++ gate ^- (mapper @t @t) |= x=@t x
4+++ pair ^- (duo @t @p) [left="hi" right=~zod]
tests/golden/types-generic-gates/tokens.txtnew file+59
@@ -0,0 +1,59 @@
1+1:1 glyph +$
2+1:4 name mapper
3+1:11 glyph |$
4+1:14 glyph [
5+1:15 tight tvar A
6+1:17 tvar B
7+1:18 tight glyph ]
8+1:20 glyph $-(
9+1:23 tight tvar A
10+1:25 tvar B
11+1:26 tight glyph )
12+2:1 NEWLINE
13+2:1 glyph +$
14+2:4 name duo
15+2:8 glyph |$
16+2:11 glyph [
17+2:12 tight tvar A
18+2:14 tvar B
19+2:15 tight glyph ]
20+2:17 glyph [
21+2:18 tight name left
22+2:22 tight glyph =
23+2:23 tight tvar A
24+2:25 name right
25+2:30 tight glyph =
26+2:31 tight tvar B
27+2:32 tight glyph ]
28+3:1 NEWLINE
29+3:1 glyph ++
30+3:4 name gate
31+3:9 glyph ^-
32+3:12 glyph (
33+3:13 tight name mapper
34+3:20 aura @t
35+3:23 aura @t
36+3:25 tight glyph )
37+3:27 glyph |=
38+3:30 name x
39+3:31 tight glyph =
40+3:32 tight aura @t
41+3:35 name x
42+4:1 NEWLINE
43+4:1 glyph ++
44+4:4 name pair
45+4:9 glyph ^-
46+4:12 glyph (
47+4:13 tight name duo
48+4:17 aura @t
49+4:20 aura @p
50+4:22 tight glyph )
51+4:24 glyph [
52+4:25 tight name left
53+4:29 tight glyph =
54+4:30 tight str "hi"
55+4:35 name right
56+4:40 tight glyph =
57+4:41 tight lit ~zod
58+4:45 tight glyph ]
59+4:46 NEWLINE
tests/golden/types-generic-gates/tree.txtnew file+21
@@ -0,0 +1,21 @@
1+(module
2+ (mold 1:1 mapper
3+ (generic 1:11 A B
4+ (fn 1:20 (tvar 1:23 A) (tvar 1:25 B))))
5+ (mold 2:1 duo
6+ (generic 2:8 A B
7+ (cell 2:17
8+ (face 2:18 left (tvar 2:23 A))
9+ (face 2:25 right (tvar 2:31 B)))))
10+ (value 3:1 gate
11+ (cast 3:9
12+ (apply 3:12 mapper (aura 3:20 @t) (aura 3:23 @t))
13+ (gate 3:27
14+ (face 3:30 x (aura 3:32 @t))
15+ (wing 3:35 x))))
16+ (value 4:1 pair
17+ (cast 4:9
18+ (apply 4:12 duo (aura 4:17 @t) (aura 4:20 @p))
19+ (tuple 4:24
20+ (face 4:25 left (str 4:30 "hi"))
21+ (face 4:35 right (lit 4:41 ~zod))))))
tests/golden/types-generic-gates/types.txtnew file+5
@@ -0,0 +1,5 @@
1+partial inference; module not checked
2++$ mapper: not checked
3++$ duo: not checked
4+++ gate: $-(@t @t)
5+++ pair: [left=@t right=@p]
tests/golden/types-generic-import-reverse/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "Everything is exported and read through the import's face"; Molds: generic molds.
2+tests: An imported two-parameter generic reverses its parameters for caller capitals and for concrete @t/@p arguments, without capturing either variable.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-generic-import-reverse/module-trees.txtnew file+7
@@ -0,0 +1,7 @@
1+/ui/lib.jibb
2+(module
3+ (mold 1:1 reverse
4+ (generic 1:12 A B
5+ (cell 1:21
6+ (face 1:22 left (tvar 1:27 B))
7+ (face 1:29 right (tvar 1:35 A))))))
tests/golden/types-generic-import-reverse/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/types-generic-import-reverse/modules/ui/lib.jibbnew file+1
@@ -0,0 +1 @@
1++$ reverse |$ [A B] [left=B right=A]
tests/golden/types-generic-import-reverse/source.jibbnew file+3
@@ -0,0 +1,3 @@
1+/= lib /ui/lib
2+++ make |= [x=A y=B] ^- (reverse.lib A B) [left=y right=x]
3+++ concrete ^- (reverse.lib @t @p) [left=~zod right="hi"]
tests/golden/types-generic-import-reverse/tokens.txtnew file+50
@@ -0,0 +1,50 @@
1+1:1 glyph /=
2+1:5 name lib
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name make
10+2:9 glyph |=
11+2:12 glyph [
12+2:13 tight name x
13+2:14 tight glyph =
14+2:15 tight tvar A
15+2:17 name y
16+2:18 tight glyph =
17+2:19 tight tvar B
18+2:20 tight glyph ]
19+2:22 glyph ^-
20+2:25 glyph (
21+2:26 tight wing reverse.lib
22+2:38 tvar A
23+2:40 tvar B
24+2:41 tight glyph )
25+2:43 glyph [
26+2:44 tight name left
27+2:48 tight glyph =
28+2:49 tight name y
29+2:51 name right
30+2:56 tight glyph =
31+2:57 tight name x
32+2:58 tight glyph ]
33+3:1 NEWLINE
34+3:1 glyph ++
35+3:4 name concrete
36+3:13 glyph ^-
37+3:16 glyph (
38+3:17 tight wing reverse.lib
39+3:29 aura @t
40+3:32 aura @p
41+3:34 tight glyph )
42+3:36 glyph [
43+3:37 tight name left
44+3:41 tight glyph =
45+3:42 tight lit ~zod
46+3:47 name right
47+3:52 tight glyph =
48+3:53 tight str "hi"
49+3:57 tight glyph ]
50+3:58 NEWLINE
tests/golden/types-generic-import-reverse/tree.txtnew file+18
@@ -0,0 +1,18 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 make
4+ (gate 2:9
5+ (cell 2:12
6+ (face 2:13 x (tvar 2:15 A))
7+ (face 2:17 y (tvar 2:19 B)))
8+ (cast 2:22
9+ (apply 2:25 reverse.lib (tvar 2:38 A) (tvar 2:40 B))
10+ (tuple 2:43
11+ (face 2:44 left (wing 2:49 y))
12+ (face 2:51 right (wing 2:57 x))))))
13+ (value 3:1 concrete
14+ (cast 3:13
15+ (apply 3:16 reverse.lib (aura 3:29 @t) (aura 3:32 @p))
16+ (tuple 3:36
17+ (face 3:37 left (lit 3:42 ~zod))
18+ (face 3:47 right (str 3:53 "hi"))))))
tests/golden/types-generic-import-reverse/types.txtnew file+3
@@ -0,0 +1,3 @@
1+partial inference; module not checked
2+++ make: $-([x=A y=B] [left=B right=A])
3+++ concrete: [left=@p right=@t]
tests/golden/types-generic-lexical-alias/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds: generic molds declare parameters after `|$`.
2+tests: A non-generic alias cannot silently capture a generic caller's parameter with the same spelling; this partial checker leaves the use unsupported.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-generic-lexical-alias/source.jibbnew file+3
@@ -0,0 +1,3 @@
1++$ stray [field=A count=@ud]
2++$ box |$ [A] stray
3+++ example ^- (box @t) [field="hi" count=1]
tests/golden/types-generic-lexical-alias/tokens.txtnew file+35
@@ -0,0 +1,35 @@
1+1:1 glyph +$
2+1:4 name stray
3+1:10 glyph [
4+1:11 tight name field
5+1:16 tight glyph =
6+1:17 tight tvar A
7+1:19 name count
8+1:24 tight glyph =
9+1:25 tight aura @ud
10+1:28 tight glyph ]
11+2:1 NEWLINE
12+2:1 glyph +$
13+2:4 name box
14+2:8 glyph |$
15+2:11 glyph [
16+2:12 tight tvar A
17+2:13 tight glyph ]
18+2:15 name stray
19+3:1 NEWLINE
20+3:1 glyph ++
21+3:4 name example
22+3:12 glyph ^-
23+3:15 glyph (
24+3:16 tight name box
25+3:20 aura @t
26+3:22 tight glyph )
27+3:24 glyph [
28+3:25 tight name field
29+3:30 tight glyph =
30+3:31 tight str "hi"
31+3:36 name count
32+3:41 tight glyph =
33+3:42 tight lit 1
34+3:43 tight glyph ]
35+3:44 NEWLINE
tests/golden/types-generic-lexical-alias/tree.txtnew file+13
@@ -0,0 +1,13 @@
1+(module
2+ (mold 1:1 stray
3+ (cell 1:10
4+ (face 1:11 field (tvar 1:17 A))
5+ (face 1:19 count (aura 1:25 @ud))))
6+ (mold 2:1 box
7+ (generic 2:8 A (ref 2:15 stray)))
8+ (value 3:1 example
9+ (cast 3:12
10+ (apply 3:15 box (aura 3:20 @t))
11+ (tuple 3:24
12+ (face 3:25 field (str 3:31 "hi"))
13+ (face 3:36 count (lit 3:42 1))))))
tests/golden/types-generic-lexical-alias/types.txtnew file+4
@@ -0,0 +1,4 @@
1+partial inference; module not checked
2++$ stray: not checked
3++$ box: not checked
4+++ example: cast mold is not supported by partial inference
tests/golden/types-generic-local-parameter/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds: generic molds name their own parameters after `|$`; gates generalize capitals per `++`.
2+tests: A body-local generic parameter spelled A stays distinct from the enclosing gate's A when the generic is instantiated at @t.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-generic-local-parameter/source.jibbnew file+3
@@ -0,0 +1,3 @@
1+++ make |= x=A
2+ +$ box |$ [A] [value=A count=@ud]
3+ ^- (box @t) [value="hi" count=1]
tests/golden/types-generic-local-parameter/tokens.txtnew file+37
@@ -0,0 +1,37 @@
1+1:1 glyph ++
2+1:4 name make
3+1:9 glyph |=
4+1:12 name x
5+1:13 tight glyph =
6+1:14 tight tvar A
7+2:3 INDENT
8+2:3 glyph +$
9+2:6 name box
10+2:10 glyph |$
11+2:13 glyph [
12+2:14 tight tvar A
13+2:15 tight glyph ]
14+2:17 glyph [
15+2:18 tight name value
16+2:23 tight glyph =
17+2:24 tight tvar A
18+2:26 name count
19+2:31 tight glyph =
20+2:32 tight aura @ud
21+2:35 tight glyph ]
22+3:3 NEWLINE
23+3:3 glyph ^-
24+3:6 glyph (
25+3:7 tight name box
26+3:11 aura @t
27+3:13 tight glyph )
28+3:15 glyph [
29+3:16 tight name value
30+3:21 tight glyph =
31+3:22 tight str "hi"
32+3:27 name count
33+3:32 tight glyph =
34+3:33 tight lit 1
35+3:34 tight glyph ]
36+3:35 DEDENT
37+3:35 NEWLINE
tests/golden/types-generic-local-parameter/tree.txtnew file+15
@@ -0,0 +1,15 @@
1+(module
2+ (value 1:1 make
3+ (gate 1:9
4+ (face 1:12 x (tvar 1:14 A))
5+ (body 2:3
6+ (mold 2:3 box
7+ (generic 2:10 A
8+ (cell 2:17
9+ (face 2:18 value (tvar 2:24 A))
10+ (face 2:26 count (aura 2:32 @ud)))))
11+ (cast 3:3
12+ (apply 3:6 box (aura 3:11 @t))
13+ (tuple 3:15
14+ (face 3:16 value (str 3:22 "hi"))
15+ (face 3:27 count (lit 3:33 1))))))))
tests/golden/types-generic-local-parameter/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+++ make: $-(A [value=@t count=@ud])
tests/golden/types-generic-local-scope/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds: "Generic molds" are defined with `|$` after a `+$` name; type variables are capitals.
2+tests: A local generic mold body mentioning an enclosing capital is not silently captured or conflated with its own parameter.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-generic-local-scope/source.jibbnew file+3
@@ -0,0 +1,3 @@
1+++ make |= x=A
2+ +$ box |$ [B] [outer=A inner=B]
3+ ^- (box @t) [outer=x inner="hi"]
tests/golden/types-generic-local-scope/tokens.txtnew file+37
@@ -0,0 +1,37 @@
1+1:1 glyph ++
2+1:4 name make
3+1:9 glyph |=
4+1:12 name x
5+1:13 tight glyph =
6+1:14 tight tvar A
7+2:3 INDENT
8+2:3 glyph +$
9+2:6 name box
10+2:10 glyph |$
11+2:13 glyph [
12+2:14 tight tvar B
13+2:15 tight glyph ]
14+2:17 glyph [
15+2:18 tight name outer
16+2:23 tight glyph =
17+2:24 tight tvar A
18+2:26 name inner
19+2:31 tight glyph =
20+2:32 tight tvar B
21+2:33 tight glyph ]
22+3:3 NEWLINE
23+3:3 glyph ^-
24+3:6 glyph (
25+3:7 tight name box
26+3:11 aura @t
27+3:13 tight glyph )
28+3:15 glyph [
29+3:16 tight name outer
30+3:21 tight glyph =
31+3:22 tight name x
32+3:24 name inner
33+3:29 tight glyph =
34+3:30 tight str "hi"
35+3:34 tight glyph ]
36+3:35 DEDENT
37+3:35 NEWLINE
tests/golden/types-generic-local-scope/tree.txtnew file+15
@@ -0,0 +1,15 @@
1+(module
2+ (value 1:1 make
3+ (gate 1:9
4+ (face 1:12 x (tvar 1:14 A))
5+ (body 2:3
6+ (mold 2:3 box
7+ (generic 2:10 B
8+ (cell 2:17
9+ (face 2:18 outer (tvar 2:24 A))
10+ (face 2:26 inner (tvar 2:32 B)))))
11+ (cast 3:3
12+ (apply 3:6 box (aura 3:11 @t))
13+ (tuple 3:15
14+ (face 3:16 outer (wing 3:22 x))
15+ (face 3:24 inner (str 3:30 "hi"))))))))
tests/golden/types-generic-local-scope/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+++ make: local molds need unsupported inference
tests/golden/types-generic-module/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "Everything is exported and read through the import's face"; Molds: generic molds.
2+tests: A generic record mold exported by a Jibb library is independently instantiated in its caller.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-generic-module/module-trees.txtnew file+7
@@ -0,0 +1,7 @@
1+/ui/lib.jibb
2+(module
3+ (mold 1:1 carrier
4+ (generic 1:12 A
5+ (cell 1:19
6+ (face 1:20 payload (tvar 1:28 A))
7+ (face 1:30 count (aura 1:36 @ud))))))
tests/golden/types-generic-module/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/types-generic-module/modules/ui/lib.jibbnew file+1
@@ -0,0 +1 @@
1++$ carrier |$ [A] [payload=A count=@ud]
tests/golden/types-generic-module/source.jibbnew file+3
@@ -0,0 +1,3 @@
1+/= lib /ui/lib
2+++ cord ^- (carrier.lib @t) [payload="hi" count=1]
3+++ ship ^- (carrier.lib @p) [payload=~zod count=2]
tests/golden/types-generic-module/tokens.txtnew file+39
@@ -0,0 +1,39 @@
1+1:1 glyph /=
2+1:5 name lib
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name cord
10+2:9 glyph ^-
11+2:12 glyph (
12+2:13 tight wing carrier.lib
13+2:25 aura @t
14+2:27 tight glyph )
15+2:29 glyph [
16+2:30 tight name payload
17+2:37 tight glyph =
18+2:38 tight str "hi"
19+2:43 name count
20+2:48 tight glyph =
21+2:49 tight lit 1
22+2:50 tight glyph ]
23+3:1 NEWLINE
24+3:1 glyph ++
25+3:4 name ship
26+3:9 glyph ^-
27+3:12 glyph (
28+3:13 tight wing carrier.lib
29+3:25 aura @p
30+3:27 tight glyph )
31+3:29 glyph [
32+3:30 tight name payload
33+3:37 tight glyph =
34+3:38 tight lit ~zod
35+3:43 name count
36+3:48 tight glyph =
37+3:49 tight lit 2
38+3:50 tight glyph ]
39+3:51 NEWLINE
tests/golden/types-generic-module/tree.txtnew file+14
@@ -0,0 +1,14 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 cord
4+ (cast 2:9
5+ (apply 2:12 carrier.lib (aura 2:25 @t))
6+ (tuple 2:29
7+ (face 2:30 payload (str 2:38 "hi"))
8+ (face 2:43 count (lit 2:49 1)))))
9+ (value 3:1 ship
10+ (cast 3:9
11+ (apply 3:12 carrier.lib (aura 3:25 @p))
12+ (tuple 3:29
13+ (face 3:30 payload (lit 3:38 ~zod))
14+ (face 3:43 count (lit 3:49 2))))))
tests/golden/types-generic-module/types.txtnew file+3
@@ -0,0 +1,3 @@
1+partial inference; module not checked
2+++ cord: [payload=@t count=@ud]
3+++ ship: [payload=@p count=@ud]
tests/golden/types-generic-nested-scope/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds: generic mold parameters are declared by `|$`.
2+tests: A nested generic's parameter named A is local to it and does not capture the caller's A; the fixed inner type stays @t while the outer type is @p.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-generic-nested-scope/source.jibbnew file+3
@@ -0,0 +1,3 @@
1++$ inner |$ [A] [payload=A count=@ud]
2++$ outer |$ [A] [fixed=(inner @t) bound=A]
3+++ ship ^- (outer @p) [fixed=[payload="hi" count=1] bound=~zod]
tests/golden/types-generic-nested-scope/tokens.txtnew file+56
@@ -0,0 +1,56 @@
1+1:1 glyph +$
2+1:4 name inner
3+1:10 glyph |$
4+1:13 glyph [
5+1:14 tight tvar A
6+1:15 tight glyph ]
7+1:17 glyph [
8+1:18 tight name payload
9+1:25 tight glyph =
10+1:26 tight tvar A
11+1:28 name count
12+1:33 tight glyph =
13+1:34 tight aura @ud
14+1:37 tight glyph ]
15+2:1 NEWLINE
16+2:1 glyph +$
17+2:4 name outer
18+2:10 glyph |$
19+2:13 glyph [
20+2:14 tight tvar A
21+2:15 tight glyph ]
22+2:17 glyph [
23+2:18 tight name fixed
24+2:23 tight glyph =
25+2:24 tight glyph (
26+2:25 tight name inner
27+2:31 aura @t
28+2:33 tight glyph )
29+2:35 name bound
30+2:40 tight glyph =
31+2:41 tight tvar A
32+2:42 tight glyph ]
33+3:1 NEWLINE
34+3:1 glyph ++
35+3:4 name ship
36+3:9 glyph ^-
37+3:12 glyph (
38+3:13 tight name outer
39+3:19 aura @p
40+3:21 tight glyph )
41+3:23 glyph [
42+3:24 tight name fixed
43+3:29 tight glyph =
44+3:30 tight glyph [
45+3:31 tight name payload
46+3:38 tight glyph =
47+3:39 tight str "hi"
48+3:44 name count
49+3:49 tight glyph =
50+3:50 tight lit 1
51+3:51 tight glyph ]
52+3:53 name bound
53+3:58 tight glyph =
54+3:59 tight lit ~zod
55+3:63 tight glyph ]
56+3:64 NEWLINE
tests/golden/types-generic-nested-scope/tree.txtnew file+21
@@ -0,0 +1,21 @@
1+(module
2+ (mold 1:1 inner
3+ (generic 1:10 A
4+ (cell 1:17
5+ (face 1:18 payload (tvar 1:26 A))
6+ (face 1:28 count (aura 1:34 @ud)))))
7+ (mold 2:1 outer
8+ (generic 2:10 A
9+ (cell 2:17
10+ (face 2:18 fixed
11+ (apply 2:24 inner (aura 2:31 @t)))
12+ (face 2:35 bound (tvar 2:41 A)))))
13+ (value 3:1 ship
14+ (cast 3:9
15+ (apply 3:12 outer (aura 3:19 @p))
16+ (tuple 3:23
17+ (face 3:24 fixed
18+ (tuple 3:30
19+ (face 3:31 payload (str 3:39 "hi"))
20+ (face 3:44 count (lit 3:50 1))))
21+ (face 3:53 bound (lit 3:59 ~zod))))))
tests/golden/types-generic-nested-scope/types.txtnew file+4
@@ -0,0 +1,4 @@
1+partial inference; module not checked
2++$ inner: not checked
3++$ outer: not checked
4+++ ship: [fixed=[payload=@t count=@ud] bound=@p]
tests/golden/types-generic-parameters/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds: "Generic molds" are defined with `|$` after a `+$` name; type variables are capitals.
2+tests: Duplicate declared parameters and an undeclared capital do not produce a valid generic type.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-generic-parameters/source.jibbnew file+4
@@ -0,0 +1,4 @@
1++$ duplicate |$ [A A] [left=A right=A]
2++$ undeclared |$ [A] [left=A right=B]
3+++ a ^- (duplicate @t @p) [left="hi" right=~zod]
4+++ b ^- (undeclared @t) [left="hi" right=~zod]
tests/golden/types-generic-parameters/tokens.txtnew file+64
@@ -0,0 +1,64 @@
1+1:1 glyph +$
2+1:4 name duplicate
3+1:14 glyph |$
4+1:17 glyph [
5+1:18 tight tvar A
6+1:20 tvar A
7+1:21 tight glyph ]
8+1:23 glyph [
9+1:24 tight name left
10+1:28 tight glyph =
11+1:29 tight tvar A
12+1:31 name right
13+1:36 tight glyph =
14+1:37 tight tvar A
15+1:38 tight glyph ]
16+2:1 NEWLINE
17+2:1 glyph +$
18+2:4 name undeclared
19+2:15 glyph |$
20+2:18 glyph [
21+2:19 tight tvar A
22+2:20 tight glyph ]
23+2:22 glyph [
24+2:23 tight name left
25+2:27 tight glyph =
26+2:28 tight tvar A
27+2:30 name right
28+2:35 tight glyph =
29+2:36 tight tvar B
30+2:37 tight glyph ]
31+3:1 NEWLINE
32+3:1 glyph ++
33+3:4 name a
34+3:6 glyph ^-
35+3:9 glyph (
36+3:10 tight name duplicate
37+3:20 aura @t
38+3:23 aura @p
39+3:25 tight glyph )
40+3:27 glyph [
41+3:28 tight name left
42+3:32 tight glyph =
43+3:33 tight str "hi"
44+3:38 name right
45+3:43 tight glyph =
46+3:44 tight lit ~zod
47+3:48 tight glyph ]
48+4:1 NEWLINE
49+4:1 glyph ++
50+4:4 name b
51+4:6 glyph ^-
52+4:9 glyph (
53+4:10 tight name undeclared
54+4:21 aura @t
55+4:23 tight glyph )
56+4:25 glyph [
57+4:26 tight name left
58+4:30 tight glyph =
59+4:31 tight str "hi"
60+4:36 name right
61+4:41 tight glyph =
62+4:42 tight lit ~zod
63+4:46 tight glyph ]
64+4:47 NEWLINE
tests/golden/types-generic-parameters/tree.txtnew file+23
@@ -0,0 +1,23 @@
1+(module
2+ (mold 1:1 duplicate
3+ (generic 1:14 A A
4+ (cell 1:23
5+ (face 1:24 left (tvar 1:29 A))
6+ (face 1:31 right (tvar 1:37 A)))))
7+ (mold 2:1 undeclared
8+ (generic 2:15 A
9+ (cell 2:22
10+ (face 2:23 left (tvar 2:28 A))
11+ (face 2:30 right (tvar 2:36 B)))))
12+ (value 3:1 a
13+ (cast 3:6
14+ (apply 3:9 duplicate (aura 3:20 @t) (aura 3:23 @p))
15+ (tuple 3:27
16+ (face 3:28 left (str 3:33 "hi"))
17+ (face 3:38 right (lit 3:44 ~zod)))))
18+ (value 4:1 b
19+ (cast 4:6
20+ (apply 4:9 undeclared (aura 4:21 @t))
21+ (tuple 4:25
22+ (face 4:26 left (str 4:31 "hi"))
23+ (face 4:36 right (lit 4:42 ~zod))))))
tests/golden/types-generic-parameters/types.txtnew file+5
@@ -0,0 +1,5 @@
1+partial inference; module not checked
2++$ duplicate: not checked
3++$ undeclared: not checked
4+++ a: cast mold is not supported by partial inference
5+++ b: cast mold is not supported by partial inference
tests/golden/types-generic-record/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds: "Generic molds" are defined with `|$` after a `+$` name; type variables are capitals.
2+tests: A named generic record is independently instantiated at cord and ship types.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-generic-record/source.jibbnew file+3
@@ -0,0 +1,3 @@
1++$ carrier |$ [A] [payload=A count=@ud]
2+++ cord ^- (carrier @t) [payload="hi" count=1]
3+++ ship ^- (carrier @p) [payload=~zod count=2]
tests/golden/types-generic-record/tokens.txtnew file+47
@@ -0,0 +1,47 @@
1+1:1 glyph +$
2+1:4 name carrier
3+1:12 glyph |$
4+1:15 glyph [
5+1:16 tight tvar A
6+1:17 tight glyph ]
7+1:19 glyph [
8+1:20 tight name payload
9+1:27 tight glyph =
10+1:28 tight tvar A
11+1:30 name count
12+1:35 tight glyph =
13+1:36 tight aura @ud
14+1:39 tight glyph ]
15+2:1 NEWLINE
16+2:1 glyph ++
17+2:4 name cord
18+2:9 glyph ^-
19+2:12 glyph (
20+2:13 tight name carrier
21+2:21 aura @t
22+2:23 tight glyph )
23+2:25 glyph [
24+2:26 tight name payload
25+2:33 tight glyph =
26+2:34 tight str "hi"
27+2:39 name count
28+2:44 tight glyph =
29+2:45 tight lit 1
30+2:46 tight glyph ]
31+3:1 NEWLINE
32+3:1 glyph ++
33+3:4 name ship
34+3:9 glyph ^-
35+3:12 glyph (
36+3:13 tight name carrier
37+3:21 aura @p
38+3:23 tight glyph )
39+3:25 glyph [
40+3:26 tight name payload
41+3:33 tight glyph =
42+3:34 tight lit ~zod
43+3:39 name count
44+3:44 tight glyph =
45+3:45 tight lit 2
46+3:46 tight glyph ]
47+3:47 NEWLINE
tests/golden/types-generic-record/tree.txtnew file+18
@@ -0,0 +1,18 @@
1+(module
2+ (mold 1:1 carrier
3+ (generic 1:12 A
4+ (cell 1:19
5+ (face 1:20 payload (tvar 1:28 A))
6+ (face 1:30 count (aura 1:36 @ud)))))
7+ (value 2:1 cord
8+ (cast 2:9
9+ (apply 2:12 carrier (aura 2:21 @t))
10+ (tuple 2:25
11+ (face 2:26 payload (str 2:34 "hi"))
12+ (face 2:39 count (lit 2:45 1)))))
13+ (value 3:1 ship
14+ (cast 3:9
15+ (apply 3:12 carrier (aura 3:21 @p))
16+ (tuple 3:25
17+ (face 3:26 payload (lit 3:34 ~zod))
18+ (face 3:39 count (lit 3:45 2))))))
tests/golden/types-generic-record/types.txtnew file+4
@@ -0,0 +1,4 @@
1+partial inference; module not checked
2++$ carrier: not checked
3+++ cord: [payload=@t count=@ud]
4+++ ship: [payload=@p count=@ud]
tests/golden/types-generic-recursive-union/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds: "Generic molds" are defined with `|$` after a `+$` name; type variables are capitals.
2+tests: Recursive generic and union bodies are explicitly unsupported by this bounded inference slice.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-generic-recursive-union/source.jibbnew file+6
@@ -0,0 +1,6 @@
1++$ chain |$ [A]
2+ ~
3+ [A (chain A)]
4++$ loop |$ [A] [value=A rest=(loop A)]
5+++ a |= x=(chain @t) x
6+++ b |= x=(loop @t) x
tests/golden/types-generic-recursive-union/tokens.txtnew file+58
@@ -0,0 +1,58 @@
1+1:1 glyph +$
2+1:4 name chain
3+1:10 glyph |$
4+1:13 glyph [
5+1:14 tight tvar A
6+1:15 tight glyph ]
7+2:3 INDENT
8+2:3 lit ~
9+3:3 NEWLINE
10+3:3 glyph [
11+3:4 tight tvar A
12+3:6 glyph (
13+3:7 tight name chain
14+3:13 tvar A
15+3:14 tight glyph )
16+3:15 tight glyph ]
17+4:1 DEDENT
18+4:1 NEWLINE
19+4:1 glyph +$
20+4:4 name loop
21+4:9 glyph |$
22+4:12 glyph [
23+4:13 tight tvar A
24+4:14 tight glyph ]
25+4:16 glyph [
26+4:17 tight name value
27+4:22 tight glyph =
28+4:23 tight tvar A
29+4:25 name rest
30+4:29 tight glyph =
31+4:30 tight glyph (
32+4:31 tight name loop
33+4:36 tvar A
34+4:37 tight glyph )
35+4:38 tight glyph ]
36+5:1 NEWLINE
37+5:1 glyph ++
38+5:4 name a
39+5:6 glyph |=
40+5:9 name x
41+5:10 tight glyph =
42+5:11 tight glyph (
43+5:12 tight name chain
44+5:18 aura @t
45+5:20 tight glyph )
46+5:22 name x
47+6:1 NEWLINE
48+6:1 glyph ++
49+6:4 name b
50+6:6 glyph |=
51+6:9 name x
52+6:10 tight glyph =
53+6:11 tight glyph (
54+6:12 tight name loop
55+6:17 aura @t
56+6:19 tight glyph )
57+6:21 name x
58+6:22 NEWLINE
tests/golden/types-generic-recursive-union/tree.txtnew file+24
@@ -0,0 +1,24 @@
1+(module
2+ (mold 1:1 chain
3+ (generic 1:10 A
4+ (union 2:3
5+ (const 2:3 ~)
6+ (cell 3:3
7+ (tvar 3:4 A)
8+ (apply 3:6 chain (tvar 3:13 A))))))
9+ (mold 4:1 loop
10+ (generic 4:9 A
11+ (cell 4:16
12+ (face 4:17 value (tvar 4:23 A))
13+ (face 4:25 rest
14+ (apply 4:30 loop (tvar 4:36 A))))))
15+ (value 5:1 a
16+ (gate 5:6
17+ (face 5:9 x
18+ (apply 5:11 chain (aura 5:18 @t)))
19+ (wing 5:22 x)))
20+ (value 6:1 b
21+ (gate 6:6
22+ (face 6:9 x
23+ (apply 6:11 loop (aura 6:17 @t)))
24+ (wing 6:21 x))))
tests/golden/types-generic-recursive-union/types.txtnew file+5
@@ -0,0 +1,5 @@
1+partial inference; module not checked
2++$ chain: cases proven disjoint; mold not checked
3++$ loop: not checked
4+++ a: sample mold is not supported by partial inference
5+++ b: sample mold is not supported by partial inference
tests/golden/types-generic-repeated/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds: type variables are capitals; a generic mold names its parameters after `|$`.
2+tests: Repeated occurrences of one generic parameter retain the same type, accepting two cords and rejecting a cord paired with a ship.
3+expect: parses
4+expect-types: a partial inference report with the conflicting sites
tests/golden/types-generic-repeated/source.jibbnew file+3
@@ -0,0 +1,3 @@
1++$ twin |$ [A] [left=A right=A]
2+++ good ^- (twin @t) [left="hi" right="bye"]
3+++ bad ^- (twin @t) [left="hi" right=~zod]
tests/golden/types-generic-repeated/tokens.txtnew file+47
@@ -0,0 +1,47 @@
1+1:1 glyph +$
2+1:4 name twin
3+1:9 glyph |$
4+1:12 glyph [
5+1:13 tight tvar A
6+1:14 tight glyph ]
7+1:16 glyph [
8+1:17 tight name left
9+1:21 tight glyph =
10+1:22 tight tvar A
11+1:24 name right
12+1:29 tight glyph =
13+1:30 tight tvar A
14+1:31 tight glyph ]
15+2:1 NEWLINE
16+2:1 glyph ++
17+2:4 name good
18+2:9 glyph ^-
19+2:12 glyph (
20+2:13 tight name twin
21+2:18 aura @t
22+2:20 tight glyph )
23+2:22 glyph [
24+2:23 tight name left
25+2:27 tight glyph =
26+2:28 tight str "hi"
27+2:33 name right
28+2:38 tight glyph =
29+2:39 tight str "bye"
30+2:44 tight glyph ]
31+3:1 NEWLINE
32+3:1 glyph ++
33+3:4 name bad
34+3:8 glyph ^-
35+3:11 glyph (
36+3:12 tight name twin
37+3:17 aura @t
38+3:19 tight glyph )
39+3:21 glyph [
40+3:22 tight name left
41+3:26 tight glyph =
42+3:27 tight str "hi"
43+3:32 name right
44+3:37 tight glyph =
45+3:38 tight lit ~zod
46+3:42 tight glyph ]
47+3:43 NEWLINE
tests/golden/types-generic-repeated/tree.txtnew file+18
@@ -0,0 +1,18 @@
1+(module
2+ (mold 1:1 twin
3+ (generic 1:9 A
4+ (cell 1:16
5+ (face 1:17 left (tvar 1:22 A))
6+ (face 1:24 right (tvar 1:30 A)))))
7+ (value 2:1 good
8+ (cast 2:9
9+ (apply 2:12 twin (aura 2:18 @t))
10+ (tuple 2:22
11+ (face 2:23 left (str 2:28 "hi"))
12+ (face 2:33 right (str 2:39 "bye")))))
13+ (value 3:1 bad
14+ (cast 3:8
15+ (apply 3:11 twin (aura 3:17 @t))
16+ (tuple 3:21
17+ (face 3:22 left (str 3:27 "hi"))
18+ (face 3:32 right (lit 3:38 ~zod))))))
tests/golden/types-generic-repeated/types.txtnew file+10
@@ -0,0 +1,10 @@
1+partial inference; module not checked
2++$ twin: not checked
3+++ good: [left=@t right=@t]
4+++ bad: cast mold and expression type do not unify
5+/tests/golden/types-generic-repeated/source.jibb:3:11: cast mold has type [left=@t right=@t]
6+++ bad ^- (twin @t) [left="hi" right=~zod]
7+ ^
8+/tests/golden/types-generic-repeated/source.jibb:3:21: expression has type [left=@t right=@p]
9+++ bad ^- (twin @t) [left="hi" right=~zod]
10+ ^
tests/lib/jibb.hoon+315−239
@@ -1315,201 +1315,253 @@
1315/* tok-403 %txt /tests/golden/prelude-unit-list-transforms/tokens/txt
1315/* tok-403 %txt /tests/golden/prelude-unit-list-transforms/tokens/txt
1316/* tre-403 %txt /tests/golden/prelude-unit-list-transforms/tree/txt
1316/* tre-403 %txt /tests/golden/prelude-unit-list-transforms/tree/txt
1317/* typ-403 %txt /tests/golden/prelude-unit-list-transforms/types/txt
1317/* typ-403 %txt /tests/golden/prelude-unit-list-transforms/types/txt
1318−/* src-404 %jibb /tests/golden/types-import-mark/source/jibb
1318+/* src-404 %jibb /tests/golden/types-generic-arity/source/jibb
1319−/* tok-404 %txt /tests/golden/types-import-mark/tokens/txt
1319+/* tok-404 %txt /tests/golden/types-generic-arity/tokens/txt
1320−/* tre-404 %txt /tests/golden/types-import-mark/tree/txt
1320+/* tre-404 %txt /tests/golden/types-generic-arity/tree/txt
1321−/* typ-404 %txt /tests/golden/types-import-mark/types/txt
1321+/* typ-404 %txt /tests/golden/types-generic-arity/types/txt
1322−/* imp-404-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1322+/* src-405 %jibb /tests/golden/types-generic-gates/source/jibb
1323−/* mark-404-1 %txt /tests/golden/types-import-mark/mar/label/txt
1323+/* tok-405 %txt /tests/golden/types-generic-gates/tokens/txt
1324−/* src-405 %jibb /tests/golden/types-import-mark-record/source/jibb
1324+/* tre-405 %txt /tests/golden/types-generic-gates/tree/txt
1325−/* tok-405 %txt /tests/golden/types-import-mark-record/tokens/txt
1325+/* typ-405 %txt /tests/golden/types-generic-gates/types/txt
1326−/* tre-405 %txt /tests/golden/types-import-mark-record/tree/txt
1326+/* src-406 %jibb /tests/golden/types-generic-import-reverse/source/jibb
1327−/* typ-405 %txt /tests/golden/types-import-mark-record/types/txt
1327+/* tok-406 %txt /tests/golden/types-generic-import-reverse/tokens/txt
1328−/* mark-405-1 %txt /tests/golden/types-import-mark-record/mar/note/txt
1328+/* tre-406 %txt /tests/golden/types-generic-import-reverse/tree/txt
1329−/* mark-405-2 %txt /tests/golden/types-import-mark-record/mar/choice/txt
1329+/* mod-406-1 %jibb /tests/golden/types-generic-import-reverse/modules/ui/lib/jibb
1330−/* src-406 %jibb /tests/golden/types-import-missing-mold/source/jibb
1330+/* typ-406 %txt /tests/golden/types-generic-import-reverse/types/txt
1331−/* tok-406 %txt /tests/golden/types-import-missing-mold/tokens/txt
1331+/* mtre-406 %txt /tests/golden/types-generic-import-reverse/module-trees/txt
1332−/* tre-406 %txt /tests/golden/types-import-missing-mold/tree/txt
1332+/* src-407 %jibb /tests/golden/types-generic-lexical-alias/source/jibb
1333−/* typ-406 %txt /tests/golden/types-import-missing-mold/types/txt
1333+/* tok-407 %txt /tests/golden/types-generic-lexical-alias/tokens/txt
1334−/* imp-406-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1334+/* tre-407 %txt /tests/golden/types-generic-lexical-alias/tree/txt
1335−/* src-407 %jibb /tests/golden/types-import-sur/source/jibb
1335+/* typ-407 %txt /tests/golden/types-generic-lexical-alias/types/txt
1336−/* tok-407 %txt /tests/golden/types-import-sur/tokens/txt
1336+/* src-408 %jibb /tests/golden/types-generic-local-parameter/source/jibb
1337−/* tre-407 %txt /tests/golden/types-import-sur/tree/txt
1337+/* tok-408 %txt /tests/golden/types-generic-local-parameter/tokens/txt
1338−/* typ-407 %txt /tests/golden/types-import-sur/types/txt
1338+/* tre-408 %txt /tests/golden/types-generic-local-parameter/tree/txt
1339−/* imp-407-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1339+/* typ-408 %txt /tests/golden/types-generic-local-parameter/types/txt
1340−/* imp-407-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1340+/* src-409 %jibb /tests/golden/types-generic-local-scope/source/jibb
1341−/* src-408 %jibb /tests/golden/types-import-sur-record-graph/source/jibb
1341+/* tok-409 %txt /tests/golden/types-generic-local-scope/tokens/txt
1342−/* tok-408 %txt /tests/golden/types-import-sur-record-graph/tokens/txt
1342+/* tre-409 %txt /tests/golden/types-generic-local-scope/tree/txt
1343−/* tre-408 %txt /tests/golden/types-import-sur-record-graph/tree/txt
1343+/* typ-409 %txt /tests/golden/types-generic-local-scope/types/txt
1344−/* mod-408-1 %jibb /tests/golden/types-import-sur-record-graph/modules/ui/lib/jibb
1344+/* src-410 %jibb /tests/golden/types-generic-module/source/jibb
1345−/* typ-408 %txt /tests/golden/types-import-sur-record-graph/types/txt
1345+/* tok-410 %txt /tests/golden/types-generic-module/tokens/txt
1346−/* imp-408-1 %txt /tests/golden/types-import-sur-record-graph/sur/fixture/txt
1346+/* tre-410 %txt /tests/golden/types-generic-module/tree/txt
1347−/* mtre-408 %txt /tests/golden/types-import-sur-record-graph/module-trees/txt
1347+/* mod-410-1 %jibb /tests/golden/types-generic-module/modules/ui/lib/jibb
1348−/* src-409 %jibb /tests/golden/types-module-fixtures/source/jibb
1348+/* typ-410 %txt /tests/golden/types-generic-module/types/txt
1349−/* tok-409 %txt /tests/golden/types-module-fixtures/tokens/txt
1349+/* mtre-410 %txt /tests/golden/types-generic-module/module-trees/txt
1350−/* tre-409 %txt /tests/golden/types-module-fixtures/tree/txt
1350+/* src-411 %jibb /tests/golden/types-generic-nested-scope/source/jibb
1351−/* mod-409-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1351+/* tok-411 %txt /tests/golden/types-generic-nested-scope/tokens/txt
1352−/* mod-409-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1352+/* tre-411 %txt /tests/golden/types-generic-nested-scope/tree/txt
1353−/* typ-409 %txt /tests/golden/types-module-fixtures/types/txt
1353+/* typ-411 %txt /tests/golden/types-generic-nested-scope/types/txt
1354−/* mtre-409 %txt /tests/golden/types-module-fixtures/module-trees/txt
1354+/* src-412 %jibb /tests/golden/types-generic-parameters/source/jibb
1355−/* src-410 %jibb /tests/golden/types-module-mixed/source/jibb
1355+/* tok-412 %txt /tests/golden/types-generic-parameters/tokens/txt
1356−/* tok-410 %txt /tests/golden/types-module-mixed/tokens/txt
1356+/* tre-412 %txt /tests/golden/types-generic-parameters/tree/txt
1357−/* tre-410 %txt /tests/golden/types-module-mixed/tree/txt
1357+/* typ-412 %txt /tests/golden/types-generic-parameters/types/txt
1358−/* mod-410-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1358+/* src-413 %jibb /tests/golden/types-generic-record/source/jibb
1359−/* typ-410 %txt /tests/golden/types-module-mixed/types/txt
1359+/* tok-413 %txt /tests/golden/types-generic-record/tokens/txt
1360−/* imp-410-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1360+/* tre-413 %txt /tests/golden/types-generic-record/tree/txt
1361−/* mark-410-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1361+/* typ-413 %txt /tests/golden/types-generic-record/types/txt
1362−/* mtre-410 %txt /tests/golden/types-module-mixed/module-trees/txt
1362+/* src-414 %jibb /tests/golden/types-generic-recursive-union/source/jibb
1363−/* src-411 %jibb /tests/golden/types-partial-apply/source/jibb
1363+/* tok-414 %txt /tests/golden/types-generic-recursive-union/tokens/txt
1364−/* tok-411 %txt /tests/golden/types-partial-apply/tokens/txt
1364+/* tre-414 %txt /tests/golden/types-generic-recursive-union/tree/txt
1365−/* tre-411 %txt /tests/golden/types-partial-apply/tree/txt
1365+/* typ-414 %txt /tests/golden/types-generic-recursive-union/types/txt
1366−/* typ-411 %txt /tests/golden/types-partial-apply/types/txt
1366+/* src-415 %jibb /tests/golden/types-generic-repeated/source/jibb
1367−/* src-412 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1367+/* tok-415 %txt /tests/golden/types-generic-repeated/tokens/txt
1368−/* tok-412 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1368+/* tre-415 %txt /tests/golden/types-generic-repeated/tree/txt
1369−/* tre-412 %txt /tests/golden/types-partial-atom-alias/tree/txt
1369+/* typ-415 %txt /tests/golden/types-generic-repeated/types/txt
1370−/* typ-412 %txt /tests/golden/types-partial-atom-alias/types/txt
1370+/* src-416 %jibb /tests/golden/types-import-mark/source/jibb
1371−/* src-413 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1371+/* tok-416 %txt /tests/golden/types-import-mark/tokens/txt
1372−/* tok-413 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1372+/* tre-416 %txt /tests/golden/types-import-mark/tree/txt
1373−/* tre-413 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1373+/* typ-416 %txt /tests/golden/types-import-mark/types/txt
1374−/* typ-413 %txt /tests/golden/types-partial-atom-constraint/types/txt
1374+/* imp-416-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1375−/* src-414 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1375+/* mark-416-1 %txt /tests/golden/types-import-mark/mar/label/txt
1376−/* tok-414 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1376+/* src-417 %jibb /tests/golden/types-import-mark-record/source/jibb
1377−/* tre-414 %txt /tests/golden/types-partial-atom-widening/tree/txt
1377+/* tok-417 %txt /tests/golden/types-import-mark-record/tokens/txt
1378−/* typ-414 %txt /tests/golden/types-partial-atom-widening/types/txt
1378+/* tre-417 %txt /tests/golden/types-import-mark-record/tree/txt
1379−/* src-415 %jibb /tests/golden/types-partial-aura/source/jibb
1379+/* typ-417 %txt /tests/golden/types-import-mark-record/types/txt
1380−/* tok-415 %txt /tests/golden/types-partial-aura/tokens/txt
1380+/* mark-417-1 %txt /tests/golden/types-import-mark-record/mar/note/txt
1381−/* tre-415 %txt /tests/golden/types-partial-aura/tree/txt
1381+/* mark-417-2 %txt /tests/golden/types-import-mark-record/mar/choice/txt
1382−/* typ-415 %txt /tests/golden/types-partial-aura/types/txt
1382+/* src-418 %jibb /tests/golden/types-import-missing-mold/source/jibb
1383−/* src-416 %jibb /tests/golden/types-partial-aura-family/source/jibb
1383+/* tok-418 %txt /tests/golden/types-import-missing-mold/tokens/txt
1384−/* tok-416 %txt /tests/golden/types-partial-aura-family/tokens/txt
1384+/* tre-418 %txt /tests/golden/types-import-missing-mold/tree/txt
1385−/* tre-416 %txt /tests/golden/types-partial-aura-family/tree/txt
1385+/* typ-418 %txt /tests/golden/types-import-missing-mold/types/txt
1386−/* typ-416 %txt /tests/golden/types-partial-aura-family/types/txt
1386+/* imp-418-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1387−/* src-417 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1387+/* src-419 %jibb /tests/golden/types-import-sur/source/jibb
1388−/* tok-417 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1388+/* tok-419 %txt /tests/golden/types-import-sur/tokens/txt
1389−/* tre-417 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1389+/* tre-419 %txt /tests/golden/types-import-sur/tree/txt
1390−/* typ-417 %txt /tests/golden/types-partial-aura-generalization/types/txt
1390+/* typ-419 %txt /tests/golden/types-import-sur/types/txt
1391−/* src-418 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1391+/* imp-419-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1392−/* tok-418 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1392+/* imp-419-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1393−/* tre-418 %txt /tests/golden/types-partial-bare-atom/tree/txt
1393+/* src-420 %jibb /tests/golden/types-import-sur-record-graph/source/jibb
1394−/* typ-418 %txt /tests/golden/types-partial-bare-atom/types/txt
1394+/* tok-420 %txt /tests/golden/types-import-sur-record-graph/tokens/txt
1395−/* src-419 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1395+/* tre-420 %txt /tests/golden/types-import-sur-record-graph/tree/txt
1396−/* tok-419 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1396+/* mod-420-1 %jibb /tests/golden/types-import-sur-record-graph/modules/ui/lib/jibb
1397−/* tre-419 %txt /tests/golden/types-partial-branch-widening/tree/txt
1397+/* typ-420 %txt /tests/golden/types-import-sur-record-graph/types/txt
1398−/* typ-419 %txt /tests/golden/types-partial-branch-widening/types/txt
1398+/* imp-420-1 %txt /tests/golden/types-import-sur-record-graph/sur/fixture/txt
1399−/* src-420 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1399+/* mtre-420 %txt /tests/golden/types-import-sur-record-graph/module-trees/txt
1400−/* tok-420 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1400+/* src-421 %jibb /tests/golden/types-module-fixtures/source/jibb
1401−/* tre-420 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1401+/* tok-421 %txt /tests/golden/types-module-fixtures/tokens/txt
1402−/* typ-420 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1402+/* tre-421 %txt /tests/golden/types-module-fixtures/tree/txt
1403−/* src-421 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1403+/* mod-421-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1404−/* tok-421 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1404+/* mod-421-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1405−/* tre-421 %txt /tests/golden/types-partial-decimal-default/tree/txt
1405+/* typ-421 %txt /tests/golden/types-module-fixtures/types/txt
1406−/* typ-421 %txt /tests/golden/types-partial-decimal-default/types/txt
1406+/* mtre-421 %txt /tests/golden/types-module-fixtures/module-trees/txt
1407−/* src-422 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1407+/* src-422 %jibb /tests/golden/types-module-mixed/source/jibb
1408−/* tok-422 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1408+/* tok-422 %txt /tests/golden/types-module-mixed/tokens/txt
1409−/* tre-422 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1409+/* tre-422 %txt /tests/golden/types-module-mixed/tree/txt
1410−/* typ-422 %txt /tests/golden/types-partial-dependency-chain/types/txt
1410+/* mod-422-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1411−/* src-423 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1411+/* typ-422 %txt /tests/golden/types-module-mixed/types/txt
1412−/* tok-423 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1412+/* imp-422-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1413−/* tre-423 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1413+/* mark-422-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1414−/* typ-423 %txt /tests/golden/types-partial-explicit-capital/types/txt
1414+/* mtre-422 %txt /tests/golden/types-module-mixed/module-trees/txt
1415−/* src-424 %jibb /tests/golden/types-partial-forward/source/jibb
1415+/* src-423 %jibb /tests/golden/types-partial-apply/source/jibb
1416−/* tok-424 %txt /tests/golden/types-partial-forward/tokens/txt
1416+/* tok-423 %txt /tests/golden/types-partial-apply/tokens/txt
1417−/* tre-424 %txt /tests/golden/types-partial-forward/tree/txt
1417+/* tre-423 %txt /tests/golden/types-partial-apply/tree/txt
1418−/* typ-424 %txt /tests/golden/types-partial-forward/types/txt
1418+/* typ-423 %txt /tests/golden/types-partial-apply/types/txt
1419−/* src-425 %jibb /tests/golden/types-partial-generalization/source/jibb
1419+/* src-424 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1420−/* tok-425 %txt /tests/golden/types-partial-generalization/tokens/txt
1420+/* tok-424 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1421−/* tre-425 %txt /tests/golden/types-partial-generalization/tree/txt
1421+/* tre-424 %txt /tests/golden/types-partial-atom-alias/tree/txt
1422−/* typ-425 %txt /tests/golden/types-partial-generalization/types/txt
1422+/* typ-424 %txt /tests/golden/types-partial-atom-alias/types/txt
1423−/* src-426 %jibb /tests/golden/types-partial-identity/source/jibb
1423+/* src-425 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1424−/* tok-426 %txt /tests/golden/types-partial-identity/tokens/txt
1424+/* tok-425 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1425−/* tre-426 %txt /tests/golden/types-partial-identity/tree/txt
1425+/* tre-425 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1426−/* typ-426 %txt /tests/golden/types-partial-identity/types/txt
1426+/* typ-425 %txt /tests/golden/types-partial-atom-constraint/types/txt
1427−/* src-427 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1427+/* src-426 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1428−/* tok-427 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1428+/* tok-426 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1429−/* tre-427 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1429+/* tre-426 %txt /tests/golden/types-partial-atom-widening/tree/txt
1430−/* typ-427 %txt /tests/golden/types-partial-independent-atoms/types/txt
1430+/* typ-426 %txt /tests/golden/types-partial-atom-widening/types/txt
1431−/* src-428 %jibb /tests/golden/types-partial-local-molds/source/jibb
1431+/* src-427 %jibb /tests/golden/types-partial-aura/source/jibb
1432−/* tok-428 %txt /tests/golden/types-partial-local-molds/tokens/txt
1432+/* tok-427 %txt /tests/golden/types-partial-aura/tokens/txt
1433−/* tre-428 %txt /tests/golden/types-partial-local-molds/tree/txt
1433+/* tre-427 %txt /tests/golden/types-partial-aura/tree/txt
1434−/* typ-428 %txt /tests/golden/types-partial-local-molds/types/txt
1434+/* typ-427 %txt /tests/golden/types-partial-aura/types/txt
1435−/* src-429 %jibb /tests/golden/types-partial-locals/source/jibb
1435+/* src-428 %jibb /tests/golden/types-partial-aura-family/source/jibb
1436−/* tok-429 %txt /tests/golden/types-partial-locals/tokens/txt
1436+/* tok-428 %txt /tests/golden/types-partial-aura-family/tokens/txt
1437−/* tre-429 %txt /tests/golden/types-partial-locals/tree/txt
1437+/* tre-428 %txt /tests/golden/types-partial-aura-family/tree/txt
1438−/* typ-429 %txt /tests/golden/types-partial-locals/types/txt
1438+/* typ-428 %txt /tests/golden/types-partial-aura-family/types/txt
1439−/* src-430 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1439+/* src-429 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1440−/* tok-430 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1440+/* tok-429 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1441−/* tre-430 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1441+/* tre-429 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1442−/* typ-430 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1442+/* typ-429 %txt /tests/golden/types-partial-aura-generalization/types/txt
1443−/* src-431 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1443+/* src-430 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1444−/* tok-431 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1444+/* tok-430 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1445−/* tre-431 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1445+/* tre-430 %txt /tests/golden/types-partial-bare-atom/tree/txt
1446−/* typ-431 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1446+/* typ-430 %txt /tests/golden/types-partial-bare-atom/types/txt
1447−/* src-432 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1447+/* src-431 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1448−/* tok-432 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1448+/* tok-431 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1449−/* tre-432 %txt /tests/golden/types-partial-mold-composite/tree/txt
1449+/* tre-431 %txt /tests/golden/types-partial-branch-widening/tree/txt
1450−/* typ-432 %txt /tests/golden/types-partial-mold-composite/types/txt
1450+/* typ-431 %txt /tests/golden/types-partial-branch-widening/types/txt
1451−/* src-433 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1451+/* src-432 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1452−/* tok-433 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1452+/* tok-432 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1453−/* tre-433 %txt /tests/golden/types-partial-mold-forward/tree/txt
1453+/* tre-432 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1454−/* typ-433 %txt /tests/golden/types-partial-mold-forward/types/txt
1454+/* typ-432 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1455−/* src-434 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1455+/* src-433 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1456−/* tok-434 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1456+/* tok-433 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1457−/* tre-434 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1457+/* tre-433 %txt /tests/golden/types-partial-decimal-default/tree/txt
1458−/* typ-434 %txt /tests/golden/types-partial-mold-recursive/types/txt
1458+/* typ-433 %txt /tests/golden/types-partial-decimal-default/types/txt
1459−/* src-435 %jibb /tests/golden/types-partial-occurs/source/jibb
1459+/* src-434 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1460−/* tok-435 %txt /tests/golden/types-partial-occurs/tokens/txt
1460+/* tok-434 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1461−/* tre-435 %txt /tests/golden/types-partial-occurs/tree/txt
1461+/* tre-434 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1462−/* typ-435 %txt /tests/golden/types-partial-occurs/types/txt
1462+/* typ-434 %txt /tests/golden/types-partial-dependency-chain/types/txt
1463−/* src-436 %jibb /tests/golden/types-partial-projection/source/jibb
1463+/* src-435 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1464−/* tok-436 %txt /tests/golden/types-partial-projection/tokens/txt
1464+/* tok-435 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1465−/* tre-436 %txt /tests/golden/types-partial-projection/tree/txt
1465+/* tre-435 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1466−/* typ-436 %txt /tests/golden/types-partial-projection/types/txt
1466+/* typ-435 %txt /tests/golden/types-partial-explicit-capital/types/txt
1467−/* src-437 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1467+/* src-436 %jibb /tests/golden/types-partial-forward/source/jibb
1468−/* tok-437 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1468+/* tok-436 %txt /tests/golden/types-partial-forward/tokens/txt
1469−/* tre-437 %txt /tests/golden/types-partial-shadow-global/tree/txt
1469+/* tre-436 %txt /tests/golden/types-partial-forward/tree/txt
1470−/* typ-437 %txt /tests/golden/types-partial-shadow-global/types/txt
1470+/* typ-436 %txt /tests/golden/types-partial-forward/types/txt
1471−/* src-438 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1471+/* src-437 %jibb /tests/golden/types-partial-generalization/source/jibb
1472−/* tok-438 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1472+/* tok-437 %txt /tests/golden/types-partial-generalization/tokens/txt
1473−/* tre-438 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1473+/* tre-437 %txt /tests/golden/types-partial-generalization/tree/txt
1474−/* typ-438 %txt /tests/golden/types-partial-shared-tvar/types/txt
1474+/* typ-437 %txt /tests/golden/types-partial-generalization/types/txt
1475−/* src-439 %jibb /tests/golden/types-partial-union-cases/source/jibb
1475+/* src-438 %jibb /tests/golden/types-partial-identity/source/jibb
1476−/* tok-439 %txt /tests/golden/types-partial-union-cases/tokens/txt
1476+/* tok-438 %txt /tests/golden/types-partial-identity/tokens/txt
1477−/* tre-439 %txt /tests/golden/types-partial-union-cases/tree/txt
1477+/* tre-438 %txt /tests/golden/types-partial-identity/tree/txt
1478−/* typ-439 %txt /tests/golden/types-partial-union-cases/types/txt
1478+/* typ-438 %txt /tests/golden/types-partial-identity/types/txt
1479−/* src-440 %jibb /tests/golden/types-partial-union-edges/source/jibb
1479+/* src-439 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1480−/* tok-440 %txt /tests/golden/types-partial-union-edges/tokens/txt
1480+/* tok-439 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1481−/* tre-440 %txt /tests/golden/types-partial-union-edges/tree/txt
1481+/* tre-439 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1482−/* typ-440 %txt /tests/golden/types-partial-union-edges/types/txt
1482+/* typ-439 %txt /tests/golden/types-partial-independent-atoms/types/txt
1483−/* src-441 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1483+/* src-440 %jibb /tests/golden/types-partial-local-molds/source/jibb
1484−/* tok-441 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1484+/* tok-440 %txt /tests/golden/types-partial-local-molds/tokens/txt
1485−/* tre-441 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1485+/* tre-440 %txt /tests/golden/types-partial-local-molds/tree/txt
1486−/* typ-441 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1486+/* typ-440 %txt /tests/golden/types-partial-local-molds/types/txt
1487−/* src-442 %jibb /tests/golden/types-record-bound-variable/source/jibb
1487+/* src-441 %jibb /tests/golden/types-partial-locals/source/jibb
1488−/* tok-442 %txt /tests/golden/types-record-bound-variable/tokens/txt
1488+/* tok-441 %txt /tests/golden/types-partial-locals/tokens/txt
1489−/* tre-442 %txt /tests/golden/types-record-bound-variable/tree/txt
1489+/* tre-441 %txt /tests/golden/types-partial-locals/tree/txt
1490−/* typ-442 %txt /tests/golden/types-record-bound-variable/types/txt
1490+/* typ-441 %txt /tests/golden/types-partial-locals/types/txt
1491−/* src-443 %jibb /tests/golden/types-record-faces/source/jibb
1491+/* src-442 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1492−/* tok-443 %txt /tests/golden/types-record-faces/tokens/txt
1492+/* tok-442 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1493−/* tre-443 %txt /tests/golden/types-record-faces/tree/txt
1493+/* tre-442 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1494−/* typ-443 %txt /tests/golden/types-record-faces/types/txt
1494+/* typ-442 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1495−/* src-444 %jibb /tests/golden/types-record-import/source/jibb
1495+/* src-443 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1496−/* tok-444 %txt /tests/golden/types-record-import/tokens/txt
1496+/* tok-443 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1497−/* tre-444 %txt /tests/golden/types-record-import/tree/txt
1497+/* tre-443 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1498−/* mod-444-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1498+/* typ-443 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1499−/* typ-444 %txt /tests/golden/types-record-import/types/txt
1499+/* src-444 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1500−/* mtre-444 %txt /tests/golden/types-record-import/module-trees/txt
1500+/* tok-444 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1501−/* src-445 %jibb /tests/golden/types-record-local-scheme/source/jibb
1501+/* tre-444 %txt /tests/golden/types-partial-mold-composite/tree/txt
1502−/* tok-445 %txt /tests/golden/types-record-local-scheme/tokens/txt
1502+/* typ-444 %txt /tests/golden/types-partial-mold-composite/types/txt
1503−/* tre-445 %txt /tests/golden/types-record-local-scheme/tree/txt
1503+/* src-445 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1504−/* typ-445 %txt /tests/golden/types-record-local-scheme/types/txt
1504+/* tok-445 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1505−/* src-446 %jibb /tests/golden/types-record-nested/source/jibb
1505+/* tre-445 %txt /tests/golden/types-partial-mold-forward/tree/txt
1506−/* tok-446 %txt /tests/golden/types-record-nested/tokens/txt
1506+/* typ-445 %txt /tests/golden/types-partial-mold-forward/types/txt
1507−/* tre-446 %txt /tests/golden/types-record-nested/tree/txt
1507+/* src-446 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1508−/* typ-446 %txt /tests/golden/types-record-nested/types/txt
1508+/* tok-446 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1509−/* src-447 %jibb /tests/golden/types-record-to-tuple/source/jibb
1509+/* tre-446 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1510−/* tok-447 %txt /tests/golden/types-record-to-tuple/tokens/txt
1510+/* typ-446 %txt /tests/golden/types-partial-mold-recursive/types/txt
1511−/* tre-447 %txt /tests/golden/types-record-to-tuple/tree/txt
1511+/* src-447 %jibb /tests/golden/types-partial-occurs/source/jibb
1512−/* typ-447 %txt /tests/golden/types-record-to-tuple/types/txt
1512+/* tok-447 %txt /tests/golden/types-partial-occurs/tokens/txt
1513+/* tre-447 %txt /tests/golden/types-partial-occurs/tree/txt
1514+/* typ-447 %txt /tests/golden/types-partial-occurs/types/txt
1515+/* src-448 %jibb /tests/golden/types-partial-projection/source/jibb
1516+/* tok-448 %txt /tests/golden/types-partial-projection/tokens/txt
1517+/* tre-448 %txt /tests/golden/types-partial-projection/tree/txt
1518+/* typ-448 %txt /tests/golden/types-partial-projection/types/txt
1519+/* src-449 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1520+/* tok-449 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1521+/* tre-449 %txt /tests/golden/types-partial-shadow-global/tree/txt
1522+/* typ-449 %txt /tests/golden/types-partial-shadow-global/types/txt
1523+/* src-450 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1524+/* tok-450 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1525+/* tre-450 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1526+/* typ-450 %txt /tests/golden/types-partial-shared-tvar/types/txt
1527+/* src-451 %jibb /tests/golden/types-partial-union-cases/source/jibb
1528+/* tok-451 %txt /tests/golden/types-partial-union-cases/tokens/txt
1529+/* tre-451 %txt /tests/golden/types-partial-union-cases/tree/txt
1530+/* typ-451 %txt /tests/golden/types-partial-union-cases/types/txt
1531+/* src-452 %jibb /tests/golden/types-partial-union-edges/source/jibb
1532+/* tok-452 %txt /tests/golden/types-partial-union-edges/tokens/txt
1533+/* tre-452 %txt /tests/golden/types-partial-union-edges/tree/txt
1534+/* typ-452 %txt /tests/golden/types-partial-union-edges/types/txt
1535+/* src-453 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1536+/* tok-453 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1537+/* tre-453 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1538+/* typ-453 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1539+/* src-454 %jibb /tests/golden/types-record-bound-variable/source/jibb
1540+/* tok-454 %txt /tests/golden/types-record-bound-variable/tokens/txt
1541+/* tre-454 %txt /tests/golden/types-record-bound-variable/tree/txt
1542+/* typ-454 %txt /tests/golden/types-record-bound-variable/types/txt
1543+/* src-455 %jibb /tests/golden/types-record-faces/source/jibb
1544+/* tok-455 %txt /tests/golden/types-record-faces/tokens/txt
1545+/* tre-455 %txt /tests/golden/types-record-faces/tree/txt
1546+/* typ-455 %txt /tests/golden/types-record-faces/types/txt
1547+/* src-456 %jibb /tests/golden/types-record-import/source/jibb
1548+/* tok-456 %txt /tests/golden/types-record-import/tokens/txt
1549+/* tre-456 %txt /tests/golden/types-record-import/tree/txt
1550+/* mod-456-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1551+/* typ-456 %txt /tests/golden/types-record-import/types/txt
1552+/* mtre-456 %txt /tests/golden/types-record-import/module-trees/txt
1553+/* src-457 %jibb /tests/golden/types-record-local-scheme/source/jibb
1554+/* tok-457 %txt /tests/golden/types-record-local-scheme/tokens/txt
1555+/* tre-457 %txt /tests/golden/types-record-local-scheme/tree/txt
1556+/* typ-457 %txt /tests/golden/types-record-local-scheme/types/txt
1557+/* src-458 %jibb /tests/golden/types-record-nested/source/jibb
1558+/* tok-458 %txt /tests/golden/types-record-nested/tokens/txt
1559+/* tre-458 %txt /tests/golden/types-record-nested/tree/txt
1560+/* typ-458 %txt /tests/golden/types-record-nested/types/txt
1561+/* src-459 %jibb /tests/golden/types-record-to-tuple/source/jibb
1562+/* tok-459 %txt /tests/golden/types-record-to-tuple/tokens/txt
1563+/* tre-459 %txt /tests/golden/types-record-to-tuple/tree/txt
1564+/* typ-459 %txt /tests/golden/types-record-to-tuple/types/txt
1513|%
1565|%
1514:: one arm per case
1566:: one arm per case
1515::
1567::
@@ -2319,94 +2371,118 @@
2319 (weld (check ~.prelude-list-unit src-402 `tok-402 `tre-402) (check-types ~.prelude-list-unit ~[%tests %golden ~.prelude-list-unit %source %jibb] src-402 `typ-402))
2371 (weld (check ~.prelude-list-unit src-402 `tok-402 `tre-402) (check-types ~.prelude-list-unit ~[%tests %golden ~.prelude-list-unit %source %jibb] src-402 `typ-402))
2320++ test-prelude-unit-list-transforms
2372++ test-prelude-unit-list-transforms
2321 (weld (check ~.prelude-unit-list-transforms src-403 `tok-403 `tre-403) (check-types ~.prelude-unit-list-transforms ~[%tests %golden ~.prelude-unit-list-transforms %source %jibb] src-403 `typ-403))
2373 (weld (check ~.prelude-unit-list-transforms src-403 `tok-403 `tre-403) (check-types ~.prelude-unit-list-transforms ~[%tests %golden ~.prelude-unit-list-transforms %source %jibb] src-403 `typ-403))
2374+++ test-types-generic-arity
2375+ (weld (check ~.types-generic-arity src-404 `tok-404 `tre-404) (check-types ~.types-generic-arity ~[%tests %golden ~.types-generic-arity %source %jibb] src-404 `typ-404))
2376+++ test-types-generic-gates
2377+ (weld (check ~.types-generic-gates src-405 `tok-405 `tre-405) (check-types ~.types-generic-gates ~[%tests %golden ~.types-generic-gates %source %jibb] src-405 `typ-405))
2378+++ test-types-generic-import-reverse
2379+ (weld (weld (check ~.types-generic-import-reverse src-406 `tok-406 `tre-406) (check-module-types ~.types-generic-import-reverse ~[%tests %golden ~.types-generic-import-reverse %source %jibb] src-406 `typ-406 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-406-1]])) (check-module-trees ~.types-generic-import-reverse `mtre-406 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-406-1]]))
2380+++ test-types-generic-lexical-alias
2381+ (weld (check ~.types-generic-lexical-alias src-407 `tok-407 `tre-407) (check-types ~.types-generic-lexical-alias ~[%tests %golden ~.types-generic-lexical-alias %source %jibb] src-407 `typ-407))
2382+++ test-types-generic-local-parameter
2383+ (weld (check ~.types-generic-local-parameter src-408 `tok-408 `tre-408) (check-types ~.types-generic-local-parameter ~[%tests %golden ~.types-generic-local-parameter %source %jibb] src-408 `typ-408))
2384+++ test-types-generic-local-scope
2385+ (weld (check ~.types-generic-local-scope src-409 `tok-409 `tre-409) (check-types ~.types-generic-local-scope ~[%tests %golden ~.types-generic-local-scope %source %jibb] src-409 `typ-409))
2386+++ test-types-generic-module
2387+ (weld (weld (check ~.types-generic-module src-410 `tok-410 `tre-410) (check-module-types ~.types-generic-module ~[%tests %golden ~.types-generic-module %source %jibb] src-410 `typ-410 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-410-1]])) (check-module-trees ~.types-generic-module `mtre-410 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-410-1]]))
2388+++ test-types-generic-nested-scope
2389+ (weld (check ~.types-generic-nested-scope src-411 `tok-411 `tre-411) (check-types ~.types-generic-nested-scope ~[%tests %golden ~.types-generic-nested-scope %source %jibb] src-411 `typ-411))
2390+++ test-types-generic-parameters
2391+ (weld (check ~.types-generic-parameters src-412 `tok-412 `tre-412) (check-types ~.types-generic-parameters ~[%tests %golden ~.types-generic-parameters %source %jibb] src-412 `typ-412))
2392+++ test-types-generic-record
2393+ (weld (check ~.types-generic-record src-413 `tok-413 `tre-413) (check-types ~.types-generic-record ~[%tests %golden ~.types-generic-record %source %jibb] src-413 `typ-413))
2394+++ test-types-generic-recursive-union
2395+ (weld (check ~.types-generic-recursive-union src-414 `tok-414 `tre-414) (check-types ~.types-generic-recursive-union ~[%tests %golden ~.types-generic-recursive-union %source %jibb] src-414 `typ-414))
2396+++ test-types-generic-repeated
2397+ (weld (check ~.types-generic-repeated src-415 `tok-415 `tre-415) (check-types ~.types-generic-repeated ~[%tests %golden ~.types-generic-repeated %source %jibb] src-415 `typ-415))
2322++ test-types-import-mark
2398++ test-types-import-mark
2323− (weld (check ~.types-import-mark src-404 `tok-404 `tre-404) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-404 `typ-404 ~[[%fixture %title imp-404-1]] ~[[%label mark-404-1]]))
2399+ (weld (check ~.types-import-mark src-416 `tok-416 `tre-416) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-416 `typ-416 ~[[%fixture %title imp-416-1]] ~[[%label mark-416-1]]))
2324++ test-types-import-mark-record
2400++ test-types-import-mark-record
2325− (weld (check ~.types-import-mark-record src-405 `tok-405 `tre-405) (check-mark-types ~.types-import-mark-record ~[%tests %golden ~.types-import-mark-record %source %jibb] src-405 `typ-405 ~ ~[[%note mark-405-1] [%choice mark-405-2]]))
2401+ (weld (check ~.types-import-mark-record src-417 `tok-417 `tre-417) (check-mark-types ~.types-import-mark-record ~[%tests %golden ~.types-import-mark-record %source %jibb] src-417 `typ-417 ~ ~[[%note mark-417-1] [%choice mark-417-2]]))
2326++ test-types-import-missing-mold
2402++ test-types-import-missing-mold
2327− (weld (check ~.types-import-missing-mold src-406 `tok-406 `tre-406) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-406 `typ-406 ~[[%fixture %missing imp-406-1]]))
2403+ (weld (check ~.types-import-missing-mold src-418 `tok-418 `tre-418) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-418 `typ-418 ~[[%fixture %missing imp-418-1]]))
2328++ test-types-import-sur
2404++ test-types-import-sur
2329− (weld (check ~.types-import-sur src-407 `tok-407 `tre-407) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-407 `typ-407 ~[[%fixture %title imp-407-1] [%fixture %pair imp-407-2]]))
2405+ (weld (check ~.types-import-sur src-419 `tok-419 `tre-419) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-419 `typ-419 ~[[%fixture %title imp-419-1] [%fixture %pair imp-419-2]]))
2330++ test-types-import-sur-record-graph
2406++ test-types-import-sur-record-graph
2331− (weld (weld (check ~.types-import-sur-record-graph src-408 `tok-408 `tre-408) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-408 `typ-408 ~[[%fixture %entry imp-408-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-408-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-408 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-408-1]]))
2407+ (weld (weld (check ~.types-import-sur-record-graph src-420 `tok-420 `tre-420) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-420 `typ-420 ~[[%fixture %entry imp-420-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-420-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-420 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-420-1]]))
2332++ test-types-module-fixtures
2408++ test-types-module-fixtures
2333− (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-409 `tok-409 `tre-409) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-409 `typ-409 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-409-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-409-2]])) (check-module-trees ~.types-module-fixtures `mtre-409 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-409-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-409-2]]))
2409+ (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-421 `tok-421 `tre-421) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-421 `typ-421 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-421-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-421-2]])) (check-module-trees ~.types-module-fixtures `mtre-421 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-421-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-421-2]]))
2334++ test-types-module-mixed
2410++ test-types-module-mixed
2335− (weld (weld (check ~.types-module-mixed src-410 `tok-410 `tre-410) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-410 `typ-410 ~[[%fixture %title imp-410-1]] ~[[%label mark-410-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-410-1]])) (check-module-trees ~.types-module-mixed `mtre-410 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-410-1]]))
2411+ (weld (weld (check ~.types-module-mixed src-422 `tok-422 `tre-422) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-422 `typ-422 ~[[%fixture %title imp-422-1]] ~[[%label mark-422-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-422-1]])) (check-module-trees ~.types-module-mixed `mtre-422 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-422-1]]))
2336++ test-types-partial-apply
2412++ test-types-partial-apply
2337− (weld (check ~.types-partial-apply src-411 `tok-411 `tre-411) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-411 `typ-411))
2413+ (weld (check ~.types-partial-apply src-423 `tok-423 `tre-423) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-423 `typ-423))
2338++ test-types-partial-atom-alias
2414++ test-types-partial-atom-alias
2339− (weld (check ~.types-partial-atom-alias src-412 `tok-412 `tre-412) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-412 `typ-412))
2415+ (weld (check ~.types-partial-atom-alias src-424 `tok-424 `tre-424) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-424 `typ-424))
2340++ test-types-partial-atom-constraint
2416++ test-types-partial-atom-constraint
2341− (weld (check ~.types-partial-atom-constraint src-413 `tok-413 `tre-413) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-413 `typ-413))
2417+ (weld (check ~.types-partial-atom-constraint src-425 `tok-425 `tre-425) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-425 `typ-425))
2342++ test-types-partial-atom-widening
2418++ test-types-partial-atom-widening
2343− (weld (check ~.types-partial-atom-widening src-414 `tok-414 `tre-414) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-414 `typ-414))
2419+ (weld (check ~.types-partial-atom-widening src-426 `tok-426 `tre-426) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-426 `typ-426))
2344++ test-types-partial-aura
2420++ test-types-partial-aura
2345− (weld (check ~.types-partial-aura src-415 `tok-415 `tre-415) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-415 `typ-415))
2421+ (weld (check ~.types-partial-aura src-427 `tok-427 `tre-427) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-427 `typ-427))
2346++ test-types-partial-aura-family
2422++ test-types-partial-aura-family
2347− (weld (check ~.types-partial-aura-family src-416 `tok-416 `tre-416) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-416 `typ-416))
2423+ (weld (check ~.types-partial-aura-family src-428 `tok-428 `tre-428) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-428 `typ-428))
2348++ test-types-partial-aura-generalization
2424++ test-types-partial-aura-generalization
2349− (weld (check ~.types-partial-aura-generalization src-417 `tok-417 `tre-417) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-417 `typ-417))
2425+ (weld (check ~.types-partial-aura-generalization src-429 `tok-429 `tre-429) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-429 `typ-429))
2350++ test-types-partial-bare-atom
2426++ test-types-partial-bare-atom
2351− (weld (check ~.types-partial-bare-atom src-418 `tok-418 `tre-418) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-418 `typ-418))
2427+ (weld (check ~.types-partial-bare-atom src-430 `tok-430 `tre-430) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-430 `typ-430))
2352++ test-types-partial-branch-widening
2428++ test-types-partial-branch-widening
2353− (weld (check ~.types-partial-branch-widening src-419 `tok-419 `tre-419) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-419 `typ-419))
2429+ (weld (check ~.types-partial-branch-widening src-431 `tok-431 `tre-431) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-431 `typ-431))
2354++ test-types-partial-conflicting-sites
2430++ test-types-partial-conflicting-sites
2355− (weld (check ~.types-partial-conflicting-sites src-420 `tok-420 `tre-420) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-420 `typ-420))
2431+ (weld (check ~.types-partial-conflicting-sites src-432 `tok-432 `tre-432) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-432 `typ-432))
2356++ test-types-partial-decimal-default
2432++ test-types-partial-decimal-default
2357− (weld (check ~.types-partial-decimal-default src-421 `tok-421 `tre-421) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-421 `typ-421))
2433+ (weld (check ~.types-partial-decimal-default src-433 `tok-433 `tre-433) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-433 `typ-433))
2358++ test-types-partial-dependency-chain
2434++ test-types-partial-dependency-chain
2359− (weld (check ~.types-partial-dependency-chain src-422 `tok-422 `tre-422) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-422 `typ-422))
2435+ (weld (check ~.types-partial-dependency-chain src-434 `tok-434 `tre-434) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-434 `typ-434))
2360++ test-types-partial-explicit-capital
2436++ test-types-partial-explicit-capital
2361− (weld (check ~.types-partial-explicit-capital src-423 `tok-423 `tre-423) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-423 `typ-423))
2437+ (weld (check ~.types-partial-explicit-capital src-435 `tok-435 `tre-435) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-435 `typ-435))
2362++ test-types-partial-forward
2438++ test-types-partial-forward
2363− (weld (check ~.types-partial-forward src-424 `tok-424 `tre-424) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-424 `typ-424))
2439+ (weld (check ~.types-partial-forward src-436 `tok-436 `tre-436) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-436 `typ-436))
2364++ test-types-partial-generalization
2440++ test-types-partial-generalization
2365− (weld (check ~.types-partial-generalization src-425 `tok-425 `tre-425) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-425 `typ-425))
2441+ (weld (check ~.types-partial-generalization src-437 `tok-437 `tre-437) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-437 `typ-437))
2366++ test-types-partial-identity
2442++ test-types-partial-identity
2367− (weld (check ~.types-partial-identity src-426 `tok-426 `tre-426) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-426 `typ-426))
2443+ (weld (check ~.types-partial-identity src-438 `tok-438 `tre-438) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-438 `typ-438))
2368++ test-types-partial-independent-atoms
2444++ test-types-partial-independent-atoms
2369− (weld (check ~.types-partial-independent-atoms src-427 `tok-427 `tre-427) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-427 `typ-427))
2445+ (weld (check ~.types-partial-independent-atoms src-439 `tok-439 `tre-439) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-439 `typ-439))
2370++ test-types-partial-local-molds
2446++ test-types-partial-local-molds
2371− (weld (check ~.types-partial-local-molds src-428 `tok-428 `tre-428) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-428 `typ-428))
2447+ (weld (check ~.types-partial-local-molds src-440 `tok-440 `tre-440) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-440 `typ-440))
2372++ test-types-partial-locals
2448++ test-types-partial-locals
2373− (weld (check ~.types-partial-locals src-429 `tok-429 `tre-429) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-429 `typ-429))
2449+ (weld (check ~.types-partial-locals src-441 `tok-441 `tre-441) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-441 `typ-441))
2374++ test-types-partial-many-atom-constraints
2450++ test-types-partial-many-atom-constraints
2375− (weld (check ~.types-partial-many-atom-constraints src-430 `tok-430 `tre-430) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-430 `typ-430))
2451+ (weld (check ~.types-partial-many-atom-constraints src-442 `tok-442 `tre-442) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-442 `typ-442))
2376++ test-types-partial-mold-bare-aura
2452++ test-types-partial-mold-bare-aura
2377− (weld (check ~.types-partial-mold-bare-aura src-431 `tok-431 `tre-431) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-431 `typ-431))
2453+ (weld (check ~.types-partial-mold-bare-aura src-443 `tok-443 `tre-443) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-443 `typ-443))
2378++ test-types-partial-mold-composite
2454++ test-types-partial-mold-composite
2379− (weld (check ~.types-partial-mold-composite src-432 `tok-432 `tre-432) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-432 `typ-432))
2455+ (weld (check ~.types-partial-mold-composite src-444 `tok-444 `tre-444) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-444 `typ-444))
2380++ test-types-partial-mold-forward
2456++ test-types-partial-mold-forward
2381− (weld (check ~.types-partial-mold-forward src-433 `tok-433 `tre-433) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-433 `typ-433))
2457+ (weld (check ~.types-partial-mold-forward src-445 `tok-445 `tre-445) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-445 `typ-445))
2382++ test-types-partial-mold-recursive
2458++ test-types-partial-mold-recursive
2383− (weld (check ~.types-partial-mold-recursive src-434 `tok-434 `tre-434) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-434 `typ-434))
2459+ (weld (check ~.types-partial-mold-recursive src-446 `tok-446 `tre-446) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-446 `typ-446))
2384++ test-types-partial-occurs
2460++ test-types-partial-occurs
2385− (weld (check ~.types-partial-occurs src-435 `tok-435 `tre-435) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-435 `typ-435))
2461+ (weld (check ~.types-partial-occurs src-447 `tok-447 `tre-447) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-447 `typ-447))
2386++ test-types-partial-projection
2462++ test-types-partial-projection
2387− (weld (check ~.types-partial-projection src-436 `tok-436 `tre-436) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-436 `typ-436))
2463+ (weld (check ~.types-partial-projection src-448 `tok-448 `tre-448) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-448 `typ-448))
2388++ test-types-partial-shadow-global
2464++ test-types-partial-shadow-global
2389− (weld (check ~.types-partial-shadow-global src-437 `tok-437 `tre-437) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-437 `typ-437))
2465+ (weld (check ~.types-partial-shadow-global src-449 `tok-449 `tre-449) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-449 `typ-449))
2390++ test-types-partial-shared-tvar
2466++ test-types-partial-shared-tvar
2391− (weld (check ~.types-partial-shared-tvar src-438 `tok-438 `tre-438) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-438 `typ-438))
2467+ (weld (check ~.types-partial-shared-tvar src-450 `tok-450 `tre-450) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-450 `typ-450))
2392++ test-types-partial-union-cases
2468++ test-types-partial-union-cases
2393− (weld (check ~.types-partial-union-cases src-439 `tok-439 `tre-439) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-439 `typ-439))
2469+ (weld (check ~.types-partial-union-cases src-451 `tok-451 `tre-451) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-451 `typ-451))
2394++ test-types-partial-union-edges
2470++ test-types-partial-union-edges
2395− (weld (check ~.types-partial-union-edges src-440 `tok-440 `tre-440) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-440 `typ-440))
2471+ (weld (check ~.types-partial-union-edges src-452 `tok-452 `tre-452) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-452 `typ-452))
2396++ test-types-partial-unresolved-tag
2472++ test-types-partial-unresolved-tag
2397− (weld (check ~.types-partial-unresolved-tag src-441 `tok-441 `tre-441) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-441 `typ-441))
2473+ (weld (check ~.types-partial-unresolved-tag src-453 `tok-453 `tre-453) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-453 `typ-453))
2398++ test-types-record-bound-variable
2474++ test-types-record-bound-variable
2399− (weld (check ~.types-record-bound-variable src-442 `tok-442 `tre-442) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-442 `typ-442))
2475+ (weld (check ~.types-record-bound-variable src-454 `tok-454 `tre-454) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-454 `typ-454))
2400++ test-types-record-faces
2476++ test-types-record-faces
2401− (weld (check ~.types-record-faces src-443 `tok-443 `tre-443) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-443 `typ-443))
2477+ (weld (check ~.types-record-faces src-455 `tok-455 `tre-455) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-455 `typ-455))
2402++ test-types-record-import
2478++ test-types-record-import
2403− (weld (weld (check ~.types-record-import src-444 `tok-444 `tre-444) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-444 `typ-444 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-444-1]])) (check-module-trees ~.types-record-import `mtre-444 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-444-1]]))
2479+ (weld (weld (check ~.types-record-import src-456 `tok-456 `tre-456) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-456 `typ-456 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-456-1]])) (check-module-trees ~.types-record-import `mtre-456 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-456-1]]))
2404++ test-types-record-local-scheme
2480++ test-types-record-local-scheme
2405− (weld (check ~.types-record-local-scheme src-445 `tok-445 `tre-445) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-445 `typ-445))
2481+ (weld (check ~.types-record-local-scheme src-457 `tok-457 `tre-457) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-457 `typ-457))
2406++ test-types-record-nested
2482++ test-types-record-nested
2407− (weld (check ~.types-record-nested src-446 `tok-446 `tre-446) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-446 `typ-446))
2483+ (weld (check ~.types-record-nested src-458 `tok-458 `tre-458) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-458 `typ-458))
2408++ test-types-record-to-tuple
2484++ test-types-record-to-tuple
2409− (weld (check ~.types-record-to-tuple src-447 `tok-447 `tre-447) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-447 `typ-447))
2485+ (weld (check ~.types-record-to-tuple src-459 `tok-459 `tre-459) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-459 `typ-459))
2410::
2486::
2411:: +check: run golden:jibb on a case and compare both outputs
2487:: +check: run golden:jibb on a case and compare both outputs
2412::
2488::