Даниэль Собрал показал, как мы можем создать метод, который возвращает тот же тип коллекции, на который он был вызван, в своем ответе на этот вопрос: Возвращение исходного типа коллекции в универсальном методе
Можно ли сделать то же самое для метода, который использует сопоставление для возврата версии с разными параметрами одного и того же типа коллекции?
Например
def foo[A](xs: GenTraversable[A]) = xs map (_.toString)
foo( List(1, 2, 3) )
возвращает res: GenTraversable[String] = List(1, 2, 3)
Можно ли это адаптировать так, чтобы
foo( Set(1, 2, 3) )
возвращает Set[String]
foo( List(1, 2, 3) )
возвращает List[String]
foo( Vector(1, 2, 3) )
возвращает Vector[String]