0
型パラメータを含むクラスに対して継承を使用しようとしていますが、scalaコンパイラが型を正しく継承できませんでした。より上位の種類の継承を使用するにはどうすればよいですか?
trait Printer[X] {
def pretty(src : X) : String
}
final case class Higher[P[_] <: Printer[_], X](printer : P[X]) {
def pass(arg : X) : String = {
val pr : Printer[X] = printer
pr.pretty(arg)
}
}
コンパイラの出力:正常にコンパイル型パラメータなしのクラスへ
InheritanceFailed.scala:23: error: type mismatch;
found : P[X]
required: test.failedinheritance.Inner.Printer[X]
val pr : Printer[X] = printer
^
one error found
反し:
trait Printer {
def pretty(src : Int) : String
}
final case class Higher[P <: Printer](printer : P) {
def pass(arg : Int) : String = {
val pr : Printer = printer
pr.pretty(arg)
}
}
は、コンパイラのapprehensible方法で、より高kinded例を宣言することは可能ですか?
なぜP [_]が必要ですか?あなたは必要なものに対して 'Printer [X]'で十分ではありませんか?意味: 'final case class Higher [X](プリンタ:Printer [X]) –
私はもっと複雑なユースケースを持っています。私はここに最小再現可能な例 – ayvango