Alternative fix for #1044: Properly constrain polymorphic implicit views #1056
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.
Review by @odersky, this is an alternative to #1054
When
wildApprox
encounters a PolyParam it approximates it by itsbounds in the current constraint set, this only makes sense if we have
added the PolyType corresponding to this PolyParam to the constrain set
using
ProtoTypes#constrained
, otherwise, we might get the bounds ofanother use of this
PolyType
. This is exactly what happened ini1044.scala: to compile, the implicit view
refArrayOps
needs to beused twice with two different type parameters.
The fix is to always constrain polymorphic implicit views before
calling
wildApprox
on their result type.This fix was inspired by the approach of #1054.