【发布时间】:2011-12-07 17:09:50
【问题描述】:
我正在编写一个从某种输入数据类型到输出数据类型的流转换器。输入由用户进行,因此事件之间有一些时间。因为每个输入都需要一些资源加载,所以我想“展望未来”,即将所有可能的输入发送到主计算并根据结果预加载资源。
目前,每次输入之后总是只有一个输出,但最终可能会变得有趣。
我使用 Ross Paterson 的 Automaton 变压器成功地实现了这一点。我不确定我的解决方案是否最佳。
- 有没有很好的示例如何做到这一点?甚至可以使用测试代码?
- 也可以通过 monad 来实现吗? (例子?,解释为什么不可能?)
编辑: 在要求更多细节之后,我在这里添加了代码。现在我要删除它(这是无法理解的)并添加一些其他解释。我的问题得到了解答。
我的目的是让主事件循环在每个用户输入被馈送到箭头/流转换器/任何东西之后停止。然后它将存储当前的自动机状态并将所有可能的输入(假事件)一一发送给自动机,并查看必须加载哪些资源,以缓存它们。在下一个真实事件之后,它将使用缓存以获得更好的响应。主计算不应受此影响。
【问题讨论】:
-
没有资格回答,但 iteratees 可能对您有用。请参阅此库:hackage.haskell.org/package/enumerator ... 但箭头似乎是一个很好的抽象。我敢打赌,更多细节会帮助人们回答。
标签: haskell monads arrows automaton