Мне трудно объяснить разницу в поведении между дополнительные неявные значения, которые ищут либо первичное неявное значение, либо неявное преобразование. В частности, это работает:
trait Foo[A]
implicit def fooString: Foo[String] = null
implicit def value[A](implicit foo: Foo[A]) = 5
> implicitly[Int]
5
Но это не так:
implicit def conversion[A](x: Int)(implicit foo: Foo[A]) = new {
def aMethod = 5
}
> 1.aMethod
could not find implicit value for parameter foo: test.Foo[A]
Варьируется:
неявно
или неявным преобразованием Я получаю следующие результаты:
Conversion/value Searching for Supplied | Works?
---------------- ------------- -------- | ------
conversion poly poly | yes
conversion poly mono | **no**
conversion mono poly | yes
conversion mono mono | yes
value poly poly | yes
value poly mono | yes
value mono poly | yes
value mono mono | yes
Как видите, единственный случай, который не работает, - это когда начинается поиск при неявном преобразовании искомое значение полиморфно, но значение поставляемый является мономорфным.
Есть ли теоретическая причина, почему это должно быть так, или это ошибка / ограничение Scala?