Store lambda set variables as flex inference variables

This is actually correct - the rigid approach is not. Lambda set
variables should be inferred in-scope.
This commit is contained in:
Ayaz Hafiz 2025-01-01 23:12:35 -06:00
parent 54cc5e4c29
commit 561f3d9711
No known key found for this signature in database
GPG key ID: 4EBD1C71C734E4D4
3 changed files with 9 additions and 12 deletions

View file

@ -3808,9 +3808,9 @@ fn instantiate_rigids(
// wildcards are always freshly introduced in this annotation
new_rigid_variables.extend(introduced_vars.wildcards.iter().copied());
// lambda set vars are always freshly introduced in this annotation
new_rigid_variables.extend(introduced_vars.lambda_sets.iter().map(|&v| Loc::at_zero(v)));
let has_explicit_inference_variables = !introduced_vars.inferred.is_empty();
new_infer_variables.extend(introduced_vars.inferred.iter().copied());
// ext-infer vars are always freshly introduced in this annotation
new_infer_variables.extend(
introduced_vars
@ -3818,9 +3818,8 @@ fn instantiate_rigids(
.iter()
.map(|&v| Loc::at_zero(v)),
);
let has_explicit_inference_variables = !introduced_vars.inferred.is_empty();
new_infer_variables.extend(introduced_vars.inferred.iter().copied());
// lambda set vars are always freshly introduced in this annotation
new_infer_variables.extend(introduced_vars.lambda_sets.iter().map(|&v| Loc::at_zero(v)));
// Instantiate rigid variables
if !rigid_substitution.is_empty() {
@ -3900,12 +3899,8 @@ fn instantiate_rigids_simple(
// wildcards are always freshly introduced in this annotation
new_rigid_variables.extend(introduced_vars.wildcards.iter().copied());
// lambda set vars are always freshly introduced in this annotation
new_rigid_variables.extend(introduced_vars.lambda_sets.iter().map(|&v| Loc::at_zero(v)));
let has_explicit_inference_variables = !introduced_vars.inferred.is_empty();
let mut new_infer_variables: Vec<Loc<Variable>> = introduced_vars.inferred.clone();
// ext-infer vars are always freshly introduced in this annotation
new_infer_variables.extend(
introduced_vars
@ -3913,6 +3908,8 @@ fn instantiate_rigids_simple(
.iter()
.map(|&v| Loc::at_zero(v)),
);
// lambda set vars are always freshly introduced in this annotation
new_infer_variables.extend(introduced_vars.lambda_sets.iter().map(|&v| Loc::at_zero(v)));
// Instantiate rigid variables
if !rigid_substitution.is_empty() {