You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sharpen range approximation for applied types with capture set ranges
This is a stopgap to avoid approximating the core type to Nothing. It can probably be
dropped once we capture set ranges that we can keep as inference results.
See pos-customargs/captures/16226.scala for a test case where this matters.
The problem is what should be the approximation of the range
C[{cs1} A .. {cs2} A]
where the type constructor `C` is non-variant? If the variance of the enclosing map
is positive, this is `C[? >: {cs1} A <: {cs2} A]`, which is a supertype of both range end
points `C[{cs1} A]` and `C[{cs2} A]`. But if the variance is negative, we would normally
fall back to `Nothing`, since that is the only known subtype of both range end points.
This reasoning seems too strict for capture checking. In a sense, we have already
inferred `C[A]` before; now we just need to find out what the set should be. What we are
after is a notion of a _capture set range_. I.e. something like
C[{cs1}..{cs2} A]
with the meaning that the capture set of `C` is an unknown set between `cs1` and `cs2`.
We don't have that abstraction yet, so for now we approximate by the bounds, which
avoids the failures, even though its soundness status is currently unclear.
0 commit comments