Haskell foldl Monad 绑定

Haskell foldl Monad bind

我得到了一个函数

move :: Move -> Node -> Maybe Node

我可以在哪里使用我的绑定 monad 来获取 Maybe 节点

(return n >>= move m) 

其中 n::Node 和 m::Move,但我现在如何折叠 Moves ([Move]) 列表?

我尝试用 foldl 来做,但没有成功。

如果你有一个初始 Node 和一个 [Move] 你可以使用 foldM:

moveAll :: Node -> [Move] -> Maybe Node
moveAll startNode moves = foldM (\n m -> move m n) startNode moves

或者干脆

moveAll = foldM (flip move)