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.
isParamDependent
to considerCaptureDependency
as well, so that when applying a capture dependent function the capture sets in the types of the remaining parameters will be correctly substituted. For example:After rechecking
a
in the argument list, the expected type of the second argument,useA
, should become() -> {a} Unit
. This example previously does not work.C
in a type argument is ill-formed if it containsTermParamRef
bound by other lambdas. For example:l
will be propagated to?1
as a result of capture checking, which makes?1
ill-formed and we should widenl
tofile
. The problem is that we heal the capture sets one-after-another but the healing of a later capture set may propagate moreTermParamRef
s to a healed one. For example:After capture checking both
?1
and?2
will be{l}
. When traversing the tree we first heal?2
, wherein we widenl
tofile
, butfile
is aTermRef
here and we do nothing. Then, only later when we heal?1
, we also widenl
tofile
but this will end up propagating aTermParamRef
offile
to?2
, which we should have widened as well. But?2
is already healed and is not inspected again.This PR solves this issue by installing a handler when healing the capture sets which will try to heal the new elements propagated later in the healing process.