Saat menyimpulkan tipe, compiler sering kali perlu menghitung Least Upper Bound (LUB) dari daftar tipe. Misalnya, tipe if (cond) e1 else e1
adalah LUB dari tipe e1
dan e1
.
Jenis ini bisa menjadi cukup besar, misalnya coba ini di REPL:
: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]...
Komitmen ini memperkenalkan beberapa pemeriksaan kewarasan untuk membatasi kedalaman tipe yang disimpulkan tersebut.
Ada beberapa pekerjaan baru-baru ini untuk dimasukkan ke dalam proses kompilasi untuk mendeteksi tipe yang disimpulkan yang membutuhkan waktu lama untuk dihitung, dan menyarankan tempat di mana anotasi tipe eksplisit mungkin lebih bijaksana.