>>18
implicit parameterに適合するobjectを見つけるために、implicit parameterに関連付けられた(associated)クラスの
companion objectを探索しに行くというルールがある。関連付けられたクラスというのは、詳細はScala言語仕様の
7.2 implicit parametersを参照して欲しいんだけど、たとえば、

implicit bf :BuilderFactory[(String, Int), That, Map](Thatは不明な型)

の場合(これは、(String, Int)を返す無名関数が渡された場合になる)、BuilderFactory、Tuple2、Map、それらのスーパークラス、が関連付けられた
クラスになる。で、Mapのcompanion objectを見てみると、

implicit def builderFactory[A, B] : BuilderFactory[(A, B), Map[A, B], Map]

となっており、A = String, B = Intとすると、bfに適合する型になるため、これが選択される。その結果、
That = Map[A, B] = Map[String, Int]となり、これが返り値の型になる。一方、

implicit bf :BuilderFactory[Int, That, Map](Thatは不明な型)

の場合(Intを返す無名関数の場合)、Mapのcompanion object内のimplicit defにはマッチせず、そのスーパークラスであるIterableの
companion object内のimplicit def

implicit def builderFactory [A] : BuilderFactory[A, Iterable[A], Iterable]

にマッチして(A = Int)、返り値の型That = Iterable[A] = Iterable[Int]になる。まあ、これでわかると思うけど、なかなかにややこしい。
APIドキュメントにThatがどういう風に選ばれるのかちゃんと書かれてないと、APIドキュメントだけから読み解くのは結構きついもの
があると思う。