Scala 2.8 CanBuildA partir de

Depois de outra pergunta, perguntei:Scala 2.8 breakout, Eu queria entender um pouco mais sobre o método ScalaTraversableLike[A].map cuja assinatura é a seguinte:

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

Observe algumas coisas sobre esse método:

Leva uma função girando cadaA no traversable em umB.DevolveThat e leva um argumento implícito do tipoCanBuildFrom[Repr, B, That].

Eu posso chamar isso da seguinte maneira:

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

o queEu não consigo entender é como o fato de queThat élimite paraB (isto é, é uma coleção de B's) está sendo aplicada pelo compilador. Os parâmetros de tipo parecem ser independentes da assinatura acima e da assinatura do traçoCanBuildFrom em si:

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

Como é o compilador Scala garantindo queThat não pode serforçado em algo que não faz sentido?

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

Como o compilador decide o que implícitoCanBuildFrom objetos estão no escopo da chamada?

questionAnswers(2)

yourAnswerToTheQuestion