Scala 2.8 CanBuildFrom

Siguiendo con otra pregunta que hice,Scala 2.8 ruptura, Quería entender un poco más sobre el método ScalaTraversableLike[A].map cuya firma es la siguiente:

def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That

Note algunas cosas sobre este método:

Se necesita una función girando cadaA en lo transitable en unaB.VuelveThat y toma un argumento implícito de tipoCanBuildFrom[Repr, B, That].

Puedo llamar a esto de la siguiente manera:

> val s: Set[Int] = List("Paris", "London").map(_.length)
s: Set[Int] Set(5,6)

QuéNo puedo entender es como el hecho de queThat esUnido aB (es decir, es una colección de B) que está siendo aplicada por el compilador. Los parámetros de tipo parecen ser independientes tanto de la firma anterior como de la firma del rasgoCanBuildFrom sí mismo:

trait CanBuildFrom[-From, -Elem, +To]

¿Cómo se asegura el compilador de Scala queThat no puede serforzado en algo que no tiene sentido?

> val s: Set[String] = List("Paris", "London").map(_.length) //will not compile

¿Cómo decide el compilador lo implícito?CanBuildFrom ¿Los objetos están en el alcance de la convocatoria?

Respuestas a la pregunta(2)

Su respuesta a la pregunta