Improve error messages for polymorphic tail parametricity violations #1320
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.
Previously, if we had a type whose return value contained a polymorphic tail and we tried to return a value which was not statically known to be in the return type, we would see a type mismatch error with an "invented" type name (e.g.
a
) to represent "an arbitrary type in the tail".This made it unclear where the problem was, and didn't give any real direction on how to fix the problem.
This commit raises a specific error in this case, which informs users that the type they've tried to return is not guaranteed to exist in the polymorphic tail. We also now pass around a var kind with type errors related to constant mismatches, so we can print a representation of the tail type (e.g.
[| ; x |]
) instead of inventing phantom type names for errors.Fixes #1316.