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" 没有改变的情况下,我会 map
和 mappend
:
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))
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" 没有改变的情况下,我会 map
和 mappend
:
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))