我有一个函数
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)