Fix compiler bug with rank 2 types in mapAccuml #2342
Draft
+216
−117
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.
This PR fixes a compiler bug that occurs when using
mapAccuml
with explicit type annotations. The bug manifested as a compiler crash with the message "x [rank = 2]" followed by "thread blocked indefinitely in an MVar operation".The issue was that the compiler was incorrectly treating rank 2 type variables as invalid during generalization. These rank 2 variables are actually valid and necessary for higher-order functions like
mapAccuml
.The fix modifies the
isGeneric
function to specifically allow rank 2 variables, which enables proper type inference formapAccuml
and similar functions.Test case that previously crashed but now works properly:
Unfortunately, it (hot)fixes the problem but there surely are some side-effects