他们是一个简单的存在,为什么Scalaz SemiGroup不协变:
https://github.com/scalaz/scalaz/blob/series/7.1.x/core/src/main/scala/scalaz/Semigroup.scala
感谢。
答案 0 :(得分:1)
怎么可能?类型参数出现在半群的主要操作append
中的协变和逆变位置(结果和参数)中,因此它既不是协变也不是逆变
仅举一个简单的反例,考虑Seq[Int]
(Int
只是为了修复类型,可以是任何东西)。您可以在那里轻松定义半群,append
为++
。
现在Option没有扩展Seq,但是很容易安排一个类似于选项的类型来扩展Seq(甚至只是一个类型case class Single[A](a: A) extends Seq[A]
)。但是Seq[Int]
的半群绝不是Option [Int]或Single [Int]的半群,附加两个选项不给出选项,也不附加两个单选。