Scalaz === 一些

Scalaz === on Some

难以理解 scalaz 中 === 的行为

1. scala> 1.some === Some(1)
   res33: Boolean = true

2. scala> Some(1) === 1.some
   <console>:14: error: value === is not a member of Some[Int]
              Some(1) === 1.some
                      ^

3. scala> (Some(1):Option[Int]) === 1.some
   res35: Boolean = true

我能理解 (1),我希望 (2) 能给出相同的结果。

在 (3) 中,我必须将 Some 转换为 Option 才能得到结果。

我看了scalaz的源码,没搞定

请说明。

Scalaz 版本 = 7.1.0

Scala 版本 = 2.11.2

Some(1) returns Some[Int] 而不是 Option[Int].some 的全部意义在于 return Option[Int] 而不是与 scalaz 风格更兼容。 Scalaz 是为基于 ADT 的非子类型编程风格而编写的,大多数 scalaz 类型类对子类型的支持很少(特别是,它们通常是不变的;通常这会改进类型推断并意味着在用户犯错时更好的错误消息,但在对子类型支持较差的成本)。如果您大量使用 scalaz,您可能会发现最简单的方法是一直使用 scalaz 风格 "smart constructors",例如 .some