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)
答案 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
方法。