【问题标题】:Shorthand for map traverse reducemap traverse reduce 的简写
【发布时间】:2021-02-08 15:54:41
【问题描述】:

我正在寻找一种同时进行遍历和归约的捷径。这是我想出的解决方案:

import cats.{Applicative, Monad}
import cats.instances.list._
import cats.syntax.functor._
import cats.syntax.flatMap._
import cats.syntax.traverse._

object Test extends App {
  def intFM[F[_], M[_]](i: Int): F[M[Int]] = ???

  def traverseReduce[F[_]: Applicative, M[_]: Monad](lst: List[Int]) =
    lst.traverse(intFM[F, M]).map(_.reduce(_ >> _))
}

可以看出我做了 3 个操作:traversemapreduce,但我预计在遍历时可以进行归约。有速记吗?

【问题讨论】:

    标签: scala functional-programming scala-cats


    【解决方案1】:

    不用遍历也可以试试

    def traverseReduce[F[_]: Applicative, M[_]: Monad](lst: List[Int]): F[M[Int]] =
      lst.map(intFM[F, M]).reduce((_, _).mapN(_ >> _))
    

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 2013-06-10
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      相关资源
      最近更新 更多