scala> class A
defined class A
scala> class B
defined class B
scala> val a: A = new A
a: A = A@551510e8
scala> a match {
| case _: B => println("unlikely")
| case _ => println("no match")
| }
no match
В приведенном выше примере не должен ли компилятор сказать мне, что один из случаев никогда не может совпадать? Несколько более сложный пример недавно обнаружил меня, что привело к тому, что компилятор обнаружил ненужную ошибку, которая должна была быть обнаружена.
Edit:
Просто чтобы прояснить вопрос. Разве это невозможно в Scala по какой-то причине, которую я не вижу? (Я могу понять, если типы использовали универсальные шаблоны, а удаление типов вызывало проблемы, но это выглядит довольно просто.) И если это не невозможно, есть ли законные причины, которых нет в Scala? Если нет, то когда он будет добавлен? ;)