В магистрали Scala 2.9 вы можете сделать это:
scala> class A
defined class A
scala> def f(implicit a: A) = 0
f: (implicit a: A)Int
scala>
scala> class Vendor[T](val v: T)
defined class Vendor
scala> implicit def value[T: Vendor] = implicitly[Vendor[T]].v
value: [T](implicit evidence$1: Vendor[T])T
scala> implicit val vendor = new Vendor(new A)
vendor: Vendor[A] = Vendor@bbb2d0
scala> f
res0: Int = 0
Вызов f
найдет значение типа A
и найдет неявное value[A]
, для которого требуется параметр доказательстватипа Vendor[A]
.Он разрешает этот параметр доказательства до vendor
.
Я не думаю, что последствия были настолько сильными в 2.8.1.