Warum schlägt die Scala-Typinferenz hier fehl?

Ich habediese Klass in Scala:

object Util {
  class Tapper[A](tapMe: A) {
    def tap(f: A => Unit): A = {
      f(tapMe)
      tapMe
    }

    def tap(fs: (A => Unit)*): A = {
      fs.foreach(_(tapMe))
      tapMe
    }
  }

  implicit def tapper[A](toTap: A): Tapper[A] = new Tapper(toTap)
}

Jetzt

"aaa".tap(_.trim)

kompiliert nicht und gibt den Fehler @ a

error: fehlender Parametertyp für erweiterte Funktion ((x $ 1) => x $ 1.trim)

Warum wird der Typ nicht als @ abgeleiteString? Aus dem Fehler geht hervor, dass die implizite Konvertierung ausgelöst wird (andernfalls würde der Fehler im Sinne von "tap ist kein Mitglied der KlasseString "). Und es scheint, dass die Konvertierung in @ sein muTapper[String], was bedeutet, dass der Typ des Arguments @ iString => Unit (oder(String => Unit)*).

Das Interessante ist, dass, wenn ich auskommentiereentwede vontap definitions, dann kompiliert es.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage