以下是我试图解决的类型不匹配错误的简化版本:
trait Foo[A] {
type B
val b: B
}
trait Bar[T, R[_]] {
val r: R[T]
}
object TypeMismatch extends App {
def baz[T, U](bar: Bar[T, Foo { type B = U }]): Foo[T] { type B = U } = {
bar.r
}
}
上面的代码产生以下错误:
Foo.scala:12: error: type mismatch;
found : Foo[T]{type B = U}
required: Foo[T]{type B = U}
bar.r
^
关于 Scala 如何确定类型不匹配的任何见解?
Foo { type B = U }
不正确。您正在尝试向类型构造函数添加类型细化,同时您的意思是向适当的类型添加类型细化并考虑相应的类型 lambda。
尝试
({type λ[a] = Foo[a] { type B = U }})#λ
def baz[T, U](bar: Bar[T, ({type λ[a] = Foo[a] { type B = U }})#λ]): Foo[T] { type B = U } = {
bar.r
}