В чем разница между следующими объявлениями экзистенциальных типов:
trait A[T <: A[T]]
1. def existentialErr(arg: A[T forSome{type T <: A[T]}]): Unit =()
2. def existentialOk(arg: A[T] forSome{type T <: A[T]}): Unit =()
Точка 1 генерирует следующую ошибку времени компиляции:
аргументы типа
[T forSome { type T <: packagename.A[T] }]
не соответствуют признаку. Параметр параметра типа[T <: packagename.A[T]]
Точка 2 компилируется без проблем.
Как правило, этот вопрос очень похож на следующий неотвеченный: Путаница с экзистенциальными типами в Scala
Воспроизводится на Scala 2.11.6
UPD: Трэвис Браун предоставил ответ здесь