在 scalaz 中使用 Monoid 运算符:|+|不是 Some[Double] 的成员

Using Monoid operators in scalaz: |+| not a member of Some[Double]

让这个工作缺少什么?

import scalaz._
import Scalaz._

val r = Some(1.0) |+| None
val r1 = None[Double] |+| Some(1.0)

我得到以下信息:

Error:(4, 25) value |+| is not a member of Some[Double] lazy val r = Some(1.0) |+| None

                   ^

问题是 Monoid 超过 Double 是不合法的,因为在某些情况下,浮点算术近似可能会使结合性规则无效。出于这个原因,scalaz 将该实例排除在主项目之外,并将其包含在 scalaz-outlaws 项目中。

如果您需要 Double 的实例,请包括该库,但请记住这是有原因的并考虑您的用例(例如,如果您正在使用浮点运算处理货币交易,您可能做错事了)。