哈斯克尔折叠莫纳德绑定



我有一个函数

move :: Move -> Node -> Maybe Node

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

(return n >>= move m) 

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

我试图用折叠来做,但没有成功。

如果您有初始Node[Move],则可以使用foldM

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

或者干脆

moveAll = foldM (flip move)

最新更新