次のScalaコードで暗黙の解決(またはおそらく型推論)が失敗する理由を理解しようとしています。このコードでは、コンパイルは最後から2行目で失敗しますが、型が明示的に指定されている行の変更バージョンでは成功します。
object O {
trait Wrapper[-A, +B] {
def func: A => B
}
object Identity
implicit class Identity2Wrapper[A](self: Identity.type) extends Wrapper[A, A] {
override def func: A => A = identity
}
// Compilation fails on the next line with error:
// found String("hello")
// required: A
Identity.func("hello")
// This line compiles.
implicitly[Identity.type => Wrapper[String, String]].apply(Identity).func("hello")
}