为什么斯凯拉兹半群不是协变的?
问题描述:
答
这怎么可能?类型参数出现无论是在协变和在半群,append
的主操作逆变位置(结果和参数),因此它可以是既不协变也不逆变
只给一个简单的计数器例子,考虑Seq[Int]
(Int
只是修复类型,可以是任何东西)。您可以很容易地在那里定义一个半群,append
为++
。 现在Option没有扩展Seq,但是可以很容易地安排一个可以扩展Seq(或者甚至只是一个类型case class Single[A](a: A) extends Seq[A]
)的选项类型。但是Seq[Int]
的半群绝不可能是Option [Int]的半群,或Single [Int],追加两个选项不会提供选项,也不会追加两个单曲。