【发布时间】:2014-02-11 09:32:29
【问题描述】:
当尝试在 Scala 中使用更高种类的存在时,我遇到了以下问题:
trait A[H[_]]
trait Test {
val l: A[List]
// [error] type mismatch;
// [error] found : A[List]
// [error] required: A[_[_] <: Any]
// [error] Note: List <: Any, but trait A is invariant in type H.
// [error] You may wish to define H as +H instead. (SLS 4.5)
val x: A[B] forSome { type B[_] } = l
}
按照编译器的建议向 H 添加协变注释是可行的。如果我不希望 H 是协变的,有没有办法解决这个问题?
【问题讨论】:
-
我刚刚意识到错误在于对 x 的赋值,所以现在我明白为什么您的示例有意义了。
标签: scala covariance existential-type higher-kinded-types