为什么Scalaz没有asIdentity方法?

时间:2012-11-09 16:07:49

标签: scala scalaz

Scalaz有asMA方法,但没有asIdentity方法。以下内容在Scala 2.9.1中产生编译错误,如下所示:

Some(0).max(None)

<console>:14: error: type mismatch;
 found   : None.type (with underlying type object None)
 required: Ordering[?]
              Some(0).max(None)
                          ^

可以使用显式强制转换来修复:

(Some(0):Identity[Option[Int]]).max(None)

在我看来,如果存在asIdentity,这会更优雅:

Some(0).asIdentity.max(None)

1 个答案:

答案 0 :(得分:4)

您可以使用Identity具有Pure实例的事实:

scala> some(0).pure[Identity] max None
res0: Option[Int] = Some(0)

请注意,您需要在此使用some(0)而不是Some(0),以便从Option[Int]类型而非Some[Int]开始。

还有Identity.apply

scala> Identity(some(0)) max None
res1: Option[Int] = Some(0)

鉴于这些选项 - 以及明确表示你想要在Identity中包装内容的事实仅在少数这样的情况下是必要的,你需要消除歧义 - 我猜想Scalaz设计师只是没有看到需要额外的asIdentity方法。