是否有现有的组合器来执行此操作。
这是我现有的代码
private def traverse(states: Seq[State[Set[Tip], Unit]]) : State[Set[Tip], Unit] = {
states.reduce((a,b) => for { _ <- a
bb <- b } yield bb)
}
答案 0 :(得分:1)
首先,monadic绑定有一个更简单的语法,忽略第一个monad的值 - >>
:
import scalaz.State
import scalaz.syntax.monad._
val states: List[State[Set[Tip], Unit]] = ???
states.reduce((a, b) => a >> b)
但也有一种特殊的方法可以做你想做的事,即Foldable.sequenceS_
:
import scalaz.State
import scalaz.std.iterable._
import scalaz.syntax.foldable._
val states: List[State[Set[Tip], Unit]] = ???
states.sequenceS_[Set[Tip], Unit]