Якщо виводити типи, компілятору часто потрібно обчислити найменший верхній кордон (LUB) списку типів. Наприклад, тип if (cond) e1 else e1
- це LUB типів e1
і e1
.
Ці типи можуть бути досить великими, наприклад спробуйте це у відповіді:
:type Map(1 -> (1 to 10), 2 -> (1 to 10).toList)
scala.collection.immutable.Map[Int,scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int] with Serializable{def reverse: scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]{def reverse: scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def dropRight(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def takeRight(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def drop(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def take(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]}; def dropRight(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]{def reverse: scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def dropRight(n: Int): scala.collection.immutable.Seq[Int]...
Цей комітет запровадив деякі перевірки обґрунтованості для обмеження глибини таких висновків.
Нещодавно була проведена робота над підключенням до процесу компіляції для виявлення виведених типів, для обчислення яких потрібен тривалий час, та запропонування місць, де явна анотація типу може бути доцільною.