首页 > 解决方案 > Haskell foldl Monad 绑定

问题描述

我有一个功能

move :: Move -> Node -> Maybe Node

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

(return n >>= move m) 

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

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

标签: haskellfoldstate-monad

解决方案


如果你有一个首字母Node和 a[Move]你可以使用foldM

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

或者干脆

moveAll = foldM (flip move)

推荐阅读