onstrutor específico para o tipo parametriza

Estou tentando escrever uma classe no scala que agrupe uma coleção (parametrizada) e substitua seu método foreach. O que ele faz com o método foreach não é importante para o objetivo desta pergunta, então digamos que apenas imprima cada elemento à medida que é visitado. Idealmente, poderíamos usar o wrapper da seguinte maneira:

scala> val a = List(1,2,3,4,5)
scala> val b = MyWrapper(a)
scala> b.foreach{ x => x }
1
2
3
4
5

A chave é que eu quero que isso funcione com qualquer iterável; não apenas uma lista. Então, minha primeira tentativa foi algo como o que se segue

class MyWrapper[A, S[A] <: Iterable[A]]( val s: S[A] with IterableLike[A, S[A]]) 
      extends IterableLike[A, S[A]] {

        override def foreach[U](f: A => U): Unit = {
          iterator.foreach{ x => println(x); f(x) }
        }  
 }

No entanto, para que essa classe seja concreta, precisamos de um método iterador e um método newBuilder. O método iterador não é problema, podemos apenas "roubar" o iterador da seguinte maneira:

override def iterator = s.iterator

O problema é quando tento definir o newBuilder. Eu preciso que o construtor retorne um S [A]. No entanto, S [A] é uma coleção parametrizada que é delimitada por Iterable [A]. Portanto, todas as minhas tentativas de usar o genericBuilder ou obter o construtor do objeto complementar resultam em um Iterável [A] em vez de um S [A], com as mensagens de erro correspondentes

[error] method newBuilder in trait TraversableLike of type => scala.collection.mutable.Builder[A,S[A]] is not defined
[error] method seq in trait Parallelizable of type => scala.collection.TraversableOnce[A] is not defined 

Como posso obter um construtor que construa o tipo específico, S [A], em vez do tipo delimitado genérico Iterável [A]? Isso é possível? Qualquer ajuda para entender a maneira idiomática do Scala de fazer isso (ou de qualquer maneira que realmente funcione) seria muito apreciada!

questionAnswers(2)

yourAnswerToTheQuestion