Семантика неявных преобразований - это именно то, что вы наблюдали. Если вы определяете неявное преобразование с помощью неявного метода,
trait A
trait B
implicit def aToB(a : A) : B = new B {}
вы увидите, что теперь у вас есть неявное значение функции A => B
,
scala> implicitly[A => B]
res1: A => B = <function1>
А где у вас есть метод с привязкой к представлению,
def foo[T <% B](t : T) : B = t
это эквивалентно,
def foo[T](t : T)(implicit conv : T => B) : B = conv(t)
т. неявный аргумент, соответствующий границе представления, имеет точно такую же форму, что и значение неявной функции, созданное неявным определением метода.