Skip to content

Existential type does not conform to itself #2071

Open
@scabug

Description

@scabug
trait Iterable[+S]
trait Box[U]

trait A {
 type T <: Iterable[S] forSome { type S <: Box[U]; type U }
}

trait B extends A {
 type T <: Iterable[S] forSome { type S <: Box[U]; type U }
}

Compilation with 2.8.0.r18050-b20090618020144 gives:

a.scala:9: error: overriding type T in trait A with bounds >: Nothing <: Iterable[_ <: Box[U]];
 type T has incompatible type
 type T <: Iterable[S] forSome { type S <: Box[U]; type U }

But according to SLS, 3.5.1 Type Equivalence:
Two existential types (�3.2.10) are equivalent if they have the same number of quantifiers, and, after renaming one list of type quantifiers by another, the quantified types as well as lower and upper bounds of corresponding quantifiers are equivalent.

So, every existential type must be equivalent to (and conform to) itself.

Metadata

Metadata

Assignees

No one assigned

    Labels

    existentialfixed in Scala 3This issue does not exist in the Scala 3 compiler (https://github.com/lampepfl/dotty/)

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions