前叉加入通用monad scala吗?

时间:2018-12-14 15:33:40

标签: scala functional-programming monads scalaz scala-cats

有可能用猫或斯卡拉兹这种通用的方式表达吗?

val common: F[Common] = ...
val a: F[A] = common.flatMap(commonToA)
val b: F[B] = common.flatMap(commonToB)
val result: F[(A,B)] =  a someFunctionToProduct b

并确保common效果仅有效执行一次?

1 个答案:

答案 0 :(得分:3)

最后知道如何。我可以改为:

val common: F[Common] = ...
val fab = common.flatMap{
  c=>
     commonToA(c).zip(commonToB(c))
}