Improve type inference for record projection #2172
Merged
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.
When encountering a record projection
r.x
, we have to make sure thatr
has a record type. Previously, if the type ofr
was not manifestly a record type, we simply emitted an error message like "Can't infer the type of a record projection: r.x". This PR improves the situation in three related ways:r
, if it turns out to be a type alias or recursive type. This was simply a bug: something liketydef R = [x:Int] end; def f : R -> Int = \r. r.x
now works, as it should, but previously it was a type error.r
is provably not a record type, we generate an appropriate type mismatch error rather than an unhelpful "Can't infer" error.In the record projection r.x, can't infer whether the LHS has a record type. Try adding a type annotation.
.