Извини, мой плохой, тогда.

аюсь создать обёрткуList с конкретным типом (например,List[Int]) такие, что методы, которые принимают неявноеCanBuildFrom параметр возвращает экземпляр моей обертки вместоList.

Одним из возможных решений, которое кажется довольно тяжелым, является:

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])

Есть ли лучший / более простой способ создать такую ​​обертку, или я упустил что-то важное в реализацииMyList?

Редактировать: Последующий вопрос: можно ли поместить всю эту логику обертки вListWrapper классы или черты, так что вышеMyList может быть реализовано так:

class MyList extends ListWrapper[Int, MyList]

object MyList extends ListWrapperFactory[Int, MyList]

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

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