I have simple type hierarchy in Scala:
trait A {
trait A1
}
object B extends A {
case object B1 extends A1
}
object C extends A {
case object C1 extends A1
}
And, I'm gonna use these types like that:
def get(): Any = C.C1
get() match {
case _: B.A1 => println("B")
case _: C.A1 => println("C")
case _: A#A1 => println("Any")
}
Surprisingly, I'm getting B
printed (I've expected C
).
Why compiler treats C.C1
as instance of B.A1
?