1
スーパークラスまたは特性を与え、開いた階層を前提として、すべての拡張クラスが特定の型クラスを実装するように強制する方法を教えてください。すべてのサブクラスが特定の型クラスを実装するようにします
trait Super { }
私は(単独で)以下が許可されていないことを強制したい:
を型クラスDefault
trait Default[T] { def default: T }
、いくつかの形質Super
を想定例えば
、
class A(val i: Int) extends Super
...以下は、
です。class B(val i: Int) extends Super
implicit val bHasDef = new Default[B] { def default = B(42) }
と仮定すると、Super
のメソッドからサブタイプの型クラスの証拠にアクセスできますか?すなわち、のようなもの:
trait Super {
def magic: Default[this.type] = ???
}