Shorthand 用于地图遍历减少
Shorthand for map traverse reduce
我正在寻找一种同时遍历和归约的捷径。这是我想出的解决方案:
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个操作:traverse
、map
和reduce
,但我预计在遍历时可以进行归约。有没有shorthand?
不用遍历也可以试试
def traverseReduce[F[_]: Applicative, M[_]: Monad](lst: List[Int]): F[M[Int]] =
lst.map(intFM[F, M]).reduce((_, _).mapN(_ >> _))
我正在寻找一种同时遍历和归约的捷径。这是我想出的解决方案:
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个操作:traverse
、map
和reduce
,但我预计在遍历时可以进行归约。有没有shorthand?
不用遍历也可以试试
def traverseReduce[F[_]: Applicative, M[_]: Monad](lst: List[Int]): F[M[Int]] =
lst.map(intFM[F, M]).reduce((_, _).mapN(_ >> _))