Почему неявное разрешение Scala не выполняется для перегруженного метода с параметром типа?

Первый пример успешно находит неявное преобразование в методfoo(String)Однако, как только я добавлю параметр типа (см.fails) компиляция больше не разрешает это:

object works {
  class A {
    def foo(): String = ???
  }
  implicit class PimpedA(a: A) {
    def foo(i: String): String = ???
  }
  val a = new A()
  a.foo("test") //compiles
}

object fails { //same as `works`, but adds type parameter
  class A {
    def foo[T](): String = ???
  }
  implicit class PimpedA(a: A) {
    def foo[T](i: String): String = ???
  }
  val a = new A()
  PimpedA(a).foo("test") // compiles
  a.foo("test") // error: too many arguments for method foo: ()String
}

Это поведение одинаково для Scala 2.11.7 и 2.12.0-M3.

Документация по последствиям, кажется, не покрывает это, и я не нашел этого точного случая в stackoverflow.

Обратите внимание, что моя цель - перегрузить методfoo - если я переименую его, компилятор найдет его.

http://docs.scala-lang.org/tutorials/FAQ/finding-implicits.html

Ответы на вопрос(1)

Ваш ответ на вопрос