Por que essa chamada explícita de um método Scala permite que ele seja implicitamente resolvido?

Por que esse código falha na compilação, mas é compilado com êxito quando descomente a linha indicada? (Estou usando o Scala 2.8 todas as noites). Parece que chamar explicitamentestring2Wrapper permite que seja usado implicitamente a partir desse ponto.

class A {
  import Implicits.string2Wrapper
  def foo() {
     //string2Wrapper("A") ==> "B" // <-- uncomment
  } 
  def bar() {
    "A" ==> "B"
    "B" ==> "C"
    "C" ==> "D"
  }
  object Implicits {
    implicit def string2Wrapper(s: String) = new Wrapper(s)
    class Wrapper(s: String) {
      def ==>(s2: String) {}
    }
  }
}

Editar: obrigado pelas respostas até agora, que incluem um ponteiro para o comentário de Martin Odersky,

"Uma conversão implícita sem tipo de resultado explícito é visível apenas no texto que segue sua própria definição. Dessa forma, evitamos os erros de referência cíclica".

Eu ainda estaria interessado em descobrir 1) qual é o perigo de "erros de referência cíclica"? E 2) Por que uma chamada explícita faz alguma diferença?

questionAnswers(3)

yourAnswerToTheQuestion