haskell - Haskell foldl Monad 绑定
问题描述
我有一个功能
move :: Move -> Node -> Maybe Node
我可以在哪里使用我的绑定 monad 来获得一个 Maybe 节点
(return n >>= move m)
其中 n::Node 和 m::Move,但是我现在如何折叠移动列表([Move])?
我试图用 foldl 来做,但没有成功。
解决方案
如果你有一个首字母Node
和 a[Move]
你可以使用foldM
:
moveAll :: Node -> [Move] -> Maybe Node
moveAll startNode moves = foldM (\n m -> move m n) startNode moves
或者干脆
moveAll = foldM (flip move)
推荐阅读
- python - 内部 virtualenv 中的 subprocess.call 离开 Windows 上的虚拟环境
- php-7.3 - 当我将 mysqli_fetch_assoc($query) 放入 while 循环以从数据库中检索数据时,循环将无限迭代。为什么会这样
- javascript - 更改功能后,Sinon 测试失败
- angular - 我正在尝试实现 ngx-bootstrap datepicker
- javascript - 如何在 React-native 中更改整个应用程序的主题?
- java - Java - 如果要发送的文件不是普通文本文件,则通过套接字发送的文件为空
- c# - 一键从两种方法调用两个插入表查询的一个存储过程
- java - 如何让数组打印用户输入、存储小计、乘以税款和总计
- reactjs - React Native FAILURE:构建失败,出现异常 ative_modules.gradle' 行:191
- javascript - 复制 jquery-ajax - 为什么是 403?[CORS]