Skip to content

Alternative fix for #1044: Properly constrain polymorphic implicit views #1056

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from

Conversation

smarter
Copy link
Member

@smarter smarter commented Feb 5, 2016

Review by @odersky, this is an alternative to #1054


When wildApprox encounters a PolyParam it approximates it by its
bounds 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 of
another use of this PolyType. This is exactly what happened in
i1044.scala: to compile, the implicit view refArrayOps needs to be
used 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.

When `wildApprox` encounters a PolyParam it approximates it by its
bounds 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 of
another use of this `PolyType`. This is exactly what happened in
i1044.scala: to compile, the implicit view `refArrayOps` needs to be
used 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 scala#1054.
@smarter smarter mentioned this pull request Feb 5, 2016
@smarter
Copy link
Member Author

smarter commented Feb 6, 2016

I now think that we don't need to call constrained on PolyTypes in discardForView because TypevarsMissContext is set anyway, closed in favor of #1064.

@smarter smarter closed this Feb 6, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants