涉及泛型和精炼类型的 Scala 类型不匹配错误

问题描述 投票:0回答:1

以下是我试图解决的类型不匹配错误的简化版本:

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 如何确定类型不匹配的任何见解?

scala generics types scala-2.13
1个回答
0
投票

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
}
© www.soinside.com 2019 - 2024. All rights reserved.