Haskell 当中是怎样处理多个 IO 请求的控制流的?
在 Node,js 当中, 使用在业务逻辑里可能需要控制大量 IO 操作,
于是出现了 async when 这样专门控制异步操作的库,
以及出现了 Promise 规范, 看网上的介绍, Promise 和 Monad 有不小的关联
http://www.ituring.com.cn/article/50561
那么, 我想知道, Haskell 当中是怎样用 Monad 控制复杂的 IO 操作的?
比如这样一些例子:
- 读取多个文件, 合并显示结果
- 读取多个文件, 过滤掉空的文件, 返回结果
- 读取多个文件, 兼容部分操作报错
- 读取多个文件, 返回最先读取的两个
- 读取多个文件, 返回限定时间内完成的几个
- 读取多个文件, 再按文件当中固定固定语法读取相关的文件
甜蜜的血液
11 years, 12 months ago
Answers
简单来说就是Haskell默认是lazy的, 所以IO就有比较大的问题参见
http://stackoverflow.com/q/5892653
后来Oleg出了
iteratee
大概就是一个数据流的抽象, 然后数据分为一块一块, 每一块都是一个状态机, 自己管理自己的生命周期(资源管理)
以及后来衍生出的pipes, Conduit, machines, 都是在这个抽象上的不同的trade off
处理多个文件的话, 就是处理这些流的composability问题
p.s LZ还认得我吗?
bluecpu
answered 11 years, 12 months ago