Ваш код компилируется и работает просто отлично (Примечание: я использую Scala 2.9.0.1. Вы можете указать, какую версию Scala вы используете.)
Однако ваша функция map
при применении к Map
s всегда возвращает List
, даже если имеет смысл возвращать Map
. Вы можете избежать этого, изменив CC[_]
на CC
. (Связанное сообщение в блоге: Универсальная быстрая сортировка в Scala .)
def map[A, B, CC <: Traversable[A], That]
(xs: CC)(f: A => B)
(implicit cbf: CanBuildFrom[CC, B, That]): That = {
val b = cbf(xs)
for (a <- xs)
b += f(a)
b.result
}
Но вам нужно явно вводить аннотации для этой функции при ее вызове, что немного печально.
val xs = Map(45 -> 32, 11 -> 9)
map[(Int, Int), (Int, Int), Map[Int, Int], Map[Int, Int]](Map(45 -> 32, 11 -> 9))(identity)
// gives Map(45 -> 32, 11 -> 9)
Должен быть какой-то способ избежать этой уродливой аннотации типа, но я не знаю об этом.