Haskell foldl Monad 绑定
Haskell foldl Monad bind
我得到了一个函数
move :: Move -> Node -> Maybe Node
我可以在哪里使用我的绑定 monad 来获取 Maybe 节点
(return n >>= move m)
其中 n::Node 和 m::Move,但我现在如何折叠 Moves ([Move]) 列表?
我尝试用 foldl 来做,但没有成功。
如果你有一个初始 Node
和一个 [Move]
你可以使用 foldM
:
moveAll :: Node -> [Move] -> Maybe Node
moveAll startNode moves = foldM (\n m -> move m n) startNode moves
或者干脆
moveAll = foldM (flip move)
我得到了一个函数
move :: Move -> Node -> Maybe Node
我可以在哪里使用我的绑定 monad 来获取 Maybe 节点
(return n >>= move m)
其中 n::Node 和 m::Move,但我现在如何折叠 Moves ([Move]) 列表?
我尝试用 foldl 来做,但没有成功。
如果你有一个初始 Node
和一个 [Move]
你可以使用 foldM
:
moveAll :: Node -> [Move] -> Maybe Node
moveAll startNode moves = foldM (\n m -> move m n) startNode moves
或者干脆
moveAll = foldM (flip move)