特性の型パラメータの制約を緩和し、それらをエビデンスパラメータの形式でメソッドに追加したいとします。いくつかの骨格セットアップを考える:エビデンスパラメータの型パラメータの上限を交換する
trait StateX[Repr <: StateX[Repr]] extends State[Repr] {
protected def reader: Reader[Repr]
def observe: Observer[Repr] = Observer(reader)
}
をそして、これはそうではない:
trait State[Repr]
object Observer {
def apply[Repr <: State[Repr]](reader: Reader[Repr]): Observer[Repr] =
new Observer[Repr] {}
}
trait Observer[A]
trait Reader [A]
これは動作します
trait StateY[Repr] extends State[Repr] {
protected def reader: Reader[Repr]
def observe(implicit ev: Repr <:< State[Repr]): Observer[Repr] = Observer(reader)
}
メッセージ"inferred type arguments [Repr] do not conform to method apply's type parameter bounds [Repr <: State[Repr]]"
で。証拠ev
はこのコンホメーションを示唆しているので、どのようにしてStateY
を修正できるのだろうと思います。