Scalaz 7 中 map2 的新名称是什么?

What's the new name for map2 in Scalaz 7?

Jordan West 在 this presentation from Scalamachine clearly speaks about map2 function. Turns out the function was available in Scalaz 6 但我在 Scalaz 7 中找不到它或任何等效项。

例如我希望能够 运行 此代码:

List(Some(1), Some(2)).map2(_ + 1)

得到结果

List(Some(2), Some(3))

我在哪里可以找到 Scalaz 7 中的这个函数?

编辑: 理想情况下,我希望能够在 l: List[Option[A]]

上执行任何函数 f: A => B
l.map2(f)

并通过直观的语义得到 List[Option[B]]

好的,在 Scalaz 7 中似乎不存在这样的功能,但是有一个很好的方法来使用 Monad Transformers:

OptionT[List, Int](List(Some(1), Some(2))).map(_ + 1).run

// List(Some(2), Some(3))

或者在 l: List[Option[A]]

的情况下
OptionT[List, A](l).map(f).run

您可以改用应用语法:

scala> List(Some(1), Some(2)) <*> List((x:Option[Int]) => x |+| Some(1))
res0: List[Option[Int]] = List(Some(2), Some(3))

Scalaz 7 与 Scalaz 6 不同。

我还没有在 scalaz 7 中找到 map2 以及@I.K 的应用方法。是我能想到的最相似的。但是在 "shape of the list" 没有改变的情况下,我会 mapmappend:

List(1.some, 2.some) map (_ |+| 1.some)
res: List[Option[Int]] = List(Some(2), Some(3))

当然,如果分配给该类型的默认操作不是所需的操作,那么我会使用来自 scalaz 的现有 Tag 或自定义 implicit.

编辑

我刚刚注意到你的回答:相反的预期结果可以使用 traverse

来实现
List(1.some, 2.some, 3.some) traverseU (_ |+| 1.some)
Some(List(2, 3, 4))