为什么scalaz Semigroup不协变?

时间:2014-09-21 08:58:11

标签: scala scalaz scalaz7 semigroup

1 个答案:

答案 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]的半群,附加两个选项不给出选项,也不附加两个单选。