我有一个功能
move :: Move -> Node -> Maybe Node
我可以使用我的绑定monad获取Maybe Node
(return n >>= move m)
其中n :: Node和m :: Move,但我现在如何折叠Moves([Move])列表?
我尝试用foldl做但没有成功。
答案 0 :(得分:6)
如果您有初始Node
和[Move]
,则可以使用foldM
:
moveAll :: Node -> [Move] -> Maybe Node
moveAll startNode moves = foldM (\n m -> move m n) startNode moves
或只是
moveAll = foldM (flip move)