我有一个函数
move :: Move -> Node -> Maybe Node
在这里,我可以使用bind monad获取Maybe节点
(return n >>= move m)
其中n::Node和m::Move,但我现在如何折叠移动列表([移动])?
我试图用foldl做这件事,但没有成功。
如果你有首字母 Node 和a [Move] 您可以使用 foldM :
Node
[Move]
foldM
moveAll :: Node -> [Move] -> Maybe Node moveAll startNode moves = foldM (\n m -> move m n) startNode moves
或者只是
moveAll = foldM (flip move)