Fix cycle detection for type aliases with wildcard arguments #15508
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.
#15507 escaped the cycle detector since when the right hand side was typechecked,
the type constructor _NestedSet2's type was
[X] <: Any
and the constructor was marked Provisional.When faced with the application
NestedSet2[?]
, the type checker tried to reduce the application, sinceabstract types like
NestedSet2
are not allowed to take wildcards (this would be equivalent in power to existential types, which are not supported in Scala 3). Reduction in a covariant context would giveAny
, which means that the recursive constructor disappears.There was a bug in
safeDealias
that caused this behavior also for non-variant variables. This got fixed in the 2nd commit.Fixes #15507