Возвращает один и тот же тип коллекции, по-разному параметризованный

Даниэль Собрал показал, как мы можем создать метод, который возвращает тот же тип коллекции, на который он был вызван, в своем ответе на этот вопрос:Возвращение исходного типа коллекции в универсальном методе

Можно ли сделать то же самое для метода, который использует сопоставление для возврата версии с разными параметрами одного и того же типа коллекции?

Например

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]

Ответы на вопрос(1)

Ваш ответ на вопрос