Scala で Value クラスを次のように宣言しました。
sealed abstract class Value extends Expression with Ordered[Value] {
type T <: Ordered[T]
def value: T
override def compare(that: Value): Int = { ... }
}
compare
型制約 T <: Ordered[T] の理由は、 Valueのメソッドを にデリゲートしたいからvalue: T
です。
次に、具体的な IntValue を次のように指定します。
case class IntValue(value: Int) extends Value {
type T = Int
// ...
}
ただし、このコードをコンパイルしようとすると、次のようになります: ''
... incompatible type in overriding
[error] type T <: Ordered[IntValue.this.T] (defined in class Value);
[error] found : Int
[error] required: <: Ordered[IntValue.this.T]
[error] (which expands to) <: Ordered[Int]
[error] type T = Int
ここで暗黙の変換を使用する必要があると思いますが、どのように進めればよいかわかりません。