Рассмотрим этот код:
val foo = if(true)
new java.lang.Double(4)
else
new java.lang.Integer(4)
Выведенный тип для foo
- :
Number with Comparable[_ >: Double with Integer <: Number with
Comparable[_ >: Double with Integer <: Number]]
Итак, в основном компилятор зацикливается на границах и прекращает работу после третьей рекурсии.
Почему следующего недостаточно?
Number with Comparable[_ >: Double with Integer <: Number]