Cómo crear un contenedor de Lista con un tipo específico

Estoy intentando crear un contenedor deList con un tipo específico (por ejemplo,List[Int]) tal que los métodos que toman una @ implíciCanBuildFroml parámetro @ devuelve una instancia de mi contenedor en lugar deList.

Una posible solución, que parece bastante pesada, es:

import scala.collection._
import generic.{CanBuildFrom, SeqForwarder}
import mutable.{Builder, ListBuffer}

class MyList(list: List[Int]) extends immutable.LinearSeq[Int]
                                 with LinearSeqLike[Int, MyList]
                                 with SeqForwarder[Int] {
  override def newBuilder: Builder[Int, MyList] = MyList.newBuilder
  protected override def underlying = list
}

object MyList {
  def newBuilder: Builder[Int, MyList] =
    new ListBuffer[Int] mapResult(new MyList(_))

  implicit def canBuildFrom: CanBuildFrom[MyList, Int, MyList] = {
    new CanBuildFrom[MyList, Int, MyList] {
      def apply(from: MyList) = from.newBuilder
      def apply() = newBuilder
    }
  }
}

val l1 = new MyList(List(1,2,3))

println(l1.isInstanceOf[MyList])
println(l1.map(_ + 1).isInstanceOf[MyList])
println(l1.filter(_ == 2).isInstanceOf[MyList])

¿Existe una manera mejor / más fácil de crear un contenedor de este tipo o me perdí algo importante en la implementación deMyList?

Editar Una pregunta de seguimiento es: ¿Se puede poner toda esta lógica de contenedor enListWrapper clases o rasgos para que lo anteriorMyList puede implementarse así:

class MyList extends ListWrapper[Int, MyList]

object MyList extends ListWrapperFactory[Int, MyList]

Respuestas a la pregunta(2)

Su respuesta a la pregunta