一次折叠和映射Applicative的任何技巧



例如,我有一个简单的代码片段:

import cats.instances.option._
import cats.syntax.option._
import cats.syntax.apply._
val a = 1.some
val b = 2.some
(a, b).mapN(_ + _)

我希望将此折叠为结果或0
.getOrElse(0)的替代品吗?

也许是一种:

(a, b).foldN(0)(_ + _) // foldN actually does not exists 

你必须在那里使用元组吗?如果你使用NonEmptyListNonEmptyChain,你可以简单地进行

NonEmptyList.of(1.some, 2.some).reduce // Some(3)

NonEmptyList.of(1.some, 2.some).reduceMap(_.getOrElse(0)) // 0

或者CCD_ 5或CCD_。

你不能完全逃离getOrElse。在某些情况下,您必须在foldMapreduceMap中或在folding/reduceing之后提供一些Option[Int] => Int映射。您可以在Option上用fold或其他东西替换它,但Applicative实用程序无法为您做到这一点,因为退出上下文F不是Applicative接口的一部分(更像Comonad(。

最新更新