在scalaz中使用Monoid运算符:| + |不是某些[Double]

时间:2015-10-26 17:17:57

标签: scala scalaz

让这项工作缺少什么?

import scalaz._
import Scalaz._

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

我得到以下内容:

  

错误:(4,25)值| + |不是某些[Double] lazy val r =的成员   一些(1.0)| + |无

                   ^

1 个答案:

答案 0 :(得分:4)

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

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