この例では、暗黙的な順序付けの証拠を追加するまで、型推論は正常に機能します。型推論規則 (左から右へ & パラメーター リスト全体) は満たされているように見えますが、それを破る暗黙的なものがあります。
case class Insert[I, O : Ordering](arg: I)
def execute[I,O](req: Insert[I,O]): O = null.asInstanceOf[O]
val result: Int = execute(Insert("test"))
Error:(5, 39) diverging implicit expansion for type Ordering[O]
starting with method Tuple9 in object Ordering
lazy val result: Int = execute(Insert("test"));}
^
これはコンパイルされ、正常に動作します:
case class Insert[I, O](arg: I)
def execute[I,O](req: Insert[I,O]): O = null.asInstanceOf[O]
val result: Int = execute(Insert("test"))
したがって、型推論は暗黙的な解決には不十分であるか、暗黙的な解決が型推論を破ります。
型は推測されていると思いますが、暗黙の解決が行われている場合、それは Nothing と見なされます。つまり、 で指定しO
なかったかのように見なされます。バグですか?Int
val result: Int