比較可能な要素を含む赤黒ツリーを定義したいのですが、型を正しく取得できないようです。このコードの最後の行 "x < データ" はコンパイルに失敗します: "値 < は型パラメーター T のメンバーではありません"。これを行う標準的な方法はありますか?T から Ordered[T] への変換を行うために暗黙的なパラメーターが渡される例もいくつか見ましたが、このコードでコンパイルすることもできません。
object Color extends Enumeration {
val Red, Black = Value
}
abstract class RedblackTree[+T <: Ordered[T]] {
def isEmpty: Boolean
def member[T](x: T): Boolean
}
case object Empty extends RedblackTree[Nothing] {
override def isEmpty = true
override def member[T](x: T) = false
}
final case class Tree[T <: Ordered[T]](
color: Color.Value,
leftSubTree: RedblackTree[T],
data: T,
rightSubTree: RedblackTree[T]
) extends RedblackTree[T] {
override def isEmpty = false
override def member[T](x: T) = x < data