Parallel
#cats
#型クラス
概要
MonadとApplicativeの力を使い分けることができる
例えばMonadicな値でproductするとflatMapな実装での結果になってしまう
しかし、applicativeなレベルでproductして欲しい場合は、parTupledとparをつけることでレベルを下げて組み合わせることができる
MonadとApplicativeをFunctionKで変換している
code:scala
import cats.syntax.parallel._
(List(1, 2), List(3, 4)).tupled
// res8: List(Int, Int) = List((1, 3), (1, 4), (2, 3), (2, 4))
(List(1, 2), List(3, 4)).parTupled
// res9: List(Int, Int) = List((1, 3), (2, 4))
Scala
code:scala
trait Parallel[M_] {
type F_
def applicative: ApplicativeF
def monad: MonadM
def sequential: F ~> M
def parallel: M ~> F
}