เมื่ออนุมานประเภทคอมไพลเลอร์มักจะต้องคำนวณ Least Upper Bound (LUB) ของรายการประเภท ยกตัวอย่างเช่นประเภทของการif (cond) e1 else e1
เป็น LUB ประเภทของและe1
e1
ประเภทเหล่านี้อาจมีขนาดค่อนข้างใหญ่ตัวอย่างเช่นลองใช้ใน 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]...
การกระทำนี้นำมาซึ่งการตรวจสอบความมีสติเพื่อจำกัดความลึกของประเภทที่อนุมานดังกล่าว
มีงานล่าสุดบางอย่างในการใช้ปลั๊กอินไปยังกระบวนการคอมไพล์เพื่อตรวจหาประเภทที่อนุมานซึ่งใช้เวลาคำนวณนานและแนะนำสถานที่ที่อาจต้องใช้คำอธิบายประกอบประเภทที่ชัดเจน