Instantiate generics in mutually recursive functions before unification#5071
Open
abs0luty wants to merge 4 commits into
Open
Instantiate generics in mutually recursive functions before unification#5071abs0luty wants to merge 4 commits into
abs0luty wants to merge 4 commits into
Conversation
abs0luty
force-pushed
the
fix-type-inference
branch
from
October 24, 2025 17:31
9af0a58 to
7dde5f7
Compare
abs0luty
force-pushed
the
fix-type-inference
branch
2 times, most recently
from
October 24, 2025 17:37
96d4132 to
980e01e
Compare
abs0luty
force-pushed
the
fix-type-inference
branch
from
October 26, 2025 14:09
821799f to
1049608
Compare
abs0luty
force-pushed
the
fix-type-inference
branch
3 times, most recently
from
October 31, 2025 06:19
0761e59 to
d1a7ec5
Compare
abs0luty
force-pushed
the
fix-type-inference
branch
from
November 10, 2025 20:58
d1a7ec5 to
7356784
Compare
abs0luty
force-pushed
the
fix-type-inference
branch
from
November 24, 2025 15:23
7356784 to
8c375f3
Compare
abs0luty
force-pushed
the
fix-type-inference
branch
2 times, most recently
from
December 3, 2025 20:18
1e806ed to
62de43d
Compare
abs0luty
force-pushed
the
fix-type-inference
branch
from
December 3, 2025 20:32
62de43d to
c05b965
Compare
Member
|
Hello! Would you mind rebasing on main to fix the conflicts? |
Contributor
Author
|
@giacomocavalieri Only now noticed your message, sure! |
abs0luty
force-pushed
the
fix-type-inference
branch
2 times, most recently
from
February 1, 2026 11:20
dcd08c8 to
b4a9c9b
Compare
abs0luty
force-pushed
the
fix-type-inference
branch
from
February 26, 2026 15:52
b4a9c9b to
f60a365
Compare
Member
|
Hello! It looks like tests are failing, would you mind having a look at those? |
Contributor
|
They all fail with this compile error: |
abs0luty
force-pushed
the
fix-type-inference
branch
3 times, most recently
from
March 17, 2026 13:52
fc936f1 to
e2a49ae
Compare
ankddev
reviewed
Mar 19, 2026
ankddev
left a comment
Contributor
There was a problem hiding this comment.
Some notes about changelog entry
abs0luty
force-pushed
the
fix-type-inference
branch
from
March 29, 2026 09:22
e2a49ae to
c1a4864
Compare
giacomocavalieri
left a comment
Member
There was a problem hiding this comment.
Hello! I left a little comment
abs0luty
force-pushed
the
fix-type-inference
branch
4 times, most recently
from
April 5, 2026 08:16
3084716 to
b5bf662
Compare
…ns before unification
```gleam
pub type Test(a) { Test(a) }
pub fn it(value: Test(a)) { it2(value) }
pub fn it2(value: Test(a)) -> Test(a) { it(value) }
pub fn main() { it(Test(1)) }
```
Before this change the compiler compared generic "sketches" directly to inferred types
in mutually recursive calls, causing false mismatches when generics behaved rigidly.
After the patch the compiler instantiates generics (based on annotations or inferred
concrete types) and updates the environment so mutually recursive functions unify correctly.
This resolves spurious type-errors in recursive scenarios.
```
fn wibble(a, b, c) {
↑
let x: a = todo
fn(a: b, b: c) -> d {
todo
}
}
```
After action:
```diff
- fn wibble(a: e, b: f, c: g) -> fn(b, c) -> h
+ fn wibble(a: e, b: f, c: g) -> fn(b, c) -> d
^ original name is preserved
```
When the "add annotations" code-action is used, the compiler now retains the
original type-variable names from the user's annotation instead of replacing them
with fresh or default names.
This ensures that added annotations reflect the user's naming exactly and prevents
confusing or misleading variable renaming.
abs0luty
force-pushed
the
fix-type-inference
branch
from
May 15, 2026 13:14
b5bf662 to
d6bd688
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.