¿Por qué esta llamada explícita de un método Scala permite que se resuelva implícitamente?

¿Por qué este código no se compila, pero se compila correctamente cuando descomento la línea indicada? (Estoy usando Scala 2.8 todas las noches). Parece que llamando explícitamentestring2Wrapper permite que se use implícitamente a partir de ese momento.

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: gracias por las respuestas hasta ahora, que incluyen un puntero al comentario de Martin Odersky,

"Una conversión implícita sin tipo de resultado explícito es visible solo en el texto siguiendo su propia definición. De esa forma, evitamos los errores de referencia cíclicos".

Todavía estaría interesado en averiguar 1) ¿cuál es el peligro de los "errores de referencia cíclicos" ?, y 2) ¿Por qué una llamada explícita hace alguna diferencia?

Respuestas a la pregunta(3)

Su respuesta a la pregunta