如何解决一次折叠和映射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
解决方法
您必须在那里使用元组吗?如果您使用NonEmptyList
或NonEmptyChain
,则可以简单地
NonEmptyList.of(1.some,2.some).reduce // Some(3)
或
NonEmptyList.of(1.some,2.some).reduceMap(_.getOrElse(0)) // 0
或NonEmpty*
或Traverse
的任何其他组合。
您不能完全逃离getOrElse
。有时,您必须在Option[Int] => Int
,foldMap
或reduceMap
ing / fold
之后提供一些reduce
映射。您可以将其替换为{{1}上的fold
或其他方式,但是没有Option
实用程序可以为您完成此操作,因为退出上下文Applicative
并非{{1 }}界面(更像是F
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。