考虑以下代码片段:
case class Foo[A](a:A)
case class Bar[A](a:A)
def f[B](foo:Foo[Seq[B]], bar:Bar[Seq[B]]) = foo.a ++ bar.a
val s : Seq[T] forSome {type T} = Seq(1, 2, 3)
f(Foo(s), Bar(s))
最后一行类型检查失败,因为Foo(s)
has typeFoo[Seq[T]] forSome {type T}
和Bar(s)
has type Bar[Seq[T]] forSome {type T}
,即每个都有自己的存在量词。
有没有办法解决?实际上,我s
在编译时所知道的只是它具有这样的存在类型。我怎样才能强迫Foo(s)
并Bar(s)
落入单个存在量词的范围内?
这有意义吗?我对 Scala 和一般的花哨类型很陌生。