【发布时间】:2014-09-21 19:45:05
【问题描述】:
Scalaz SemiGroup 不是协变的原因很简单:
https://github.com/scalaz/scalaz/blob/series/7.1.x/core/src/main/scala/scalaz/Semigroup.scala
谢谢。
【问题讨论】:
标签: scala scalaz scalaz7 semigroup
Scalaz SemiGroup 不是协变的原因很简单:
https://github.com/scalaz/scalaz/blob/series/7.1.x/core/src/main/scala/scalaz/Semigroup.scala
谢谢。
【问题讨论】:
标签: scala scalaz scalaz7 semigroup
怎么可能?类型参数在半群的主运算append中同时出现在协变和逆变位置(结果和参数),因此它既不能是协变的也不能是逆变的
举一个简单的反例,考虑Seq[Int](Int 只是为了修复类型,可以是任何东西)。您可以在那里轻松地定义一个半群,append 是 ++。
现在 Option 没有扩展 Seq,但是很容易安排一个类似选项的类型来扩展 Seq(甚至只是一个类型 case class Single[A](a: A) extends Seq[A])。但是 Seq[Int] 的半群绝不可能是 Option 的半群[Int] 或 Single[Int],附加两个选项不给出选项,也不附加两个单项。
【讨论】: