このコードがリストとベクターでは正常に機能するのに、WrappedString では失敗するのはなぜですか?
implicit class TraversableExt[A, CC[A] <: TraversableLike[A, CC[A]]](lst: CC[A]) {
def filterPairs(f: (A, A) => Boolean)(implicit bf: CanBuildFrom[CC[A], A, CC[A]]): CC[A] = {
def filterPairs(lst: TraversableLike[A, CC[A]], result: Builder[A, CC[A]]): CC[A] = {
if(lst.isEmpty) result.result
else if(lst.tail.isEmpty) (result += lst.head).result
else if(!f(lst.head, lst.tail.head)) filterPairs(lst.tail, result)
else filterPairs(lst.tail, result += lst.head)
}
filterPairs(lst, bf())
}
}
println(List(1,2,2,3).filterPairs(_ != _))
メソッドを明示的に呼び出すと
println(TraversableExt(new WrappedString("hi thhere")).filterPairs(_ != _))
このエラーが発生します
error: inferred type arguments [Char,scala.collection.AbstractSeq] do not conform to method TraversableExt's type parameter bounds [A,CC[A] <: scala.collection.TraversableLike[A,CC[A]]]
println(TraversableExt(new WrappedString("hi thhere")).filterPairs(_ != _))