是否有可以像自动机一样使用的单子?

时间:2011-12-07 17:09:50

标签: haskell monads arrows automaton

我正在从一些输入数据类型到输出数据类型编写流转换器。输入由用户进行,因此事件之间有一段时间。因为每个输入需要一些资源加载,我想“展望未来”,即将所有可能的输入发送到主计算并根据结果预加载资源。

目前,每次输入后总会有一个输出,但最终可能会对此进行更改。

我成功地用Ross Paterson的Automaton变压器实现了这一点。我不确定我的解决方案是否最佳。

  • 有没有很好的例子如何做到这一点?甚至可能还有测试代码?
  • 也可以用monad实现吗? (例子?,解释为什么不可能?)

编辑: 在调用更多细节之后,我在这里添加了代码。现在我将其删除(这是不可理解的)并添加一些其他解释。我的问题已经回答了。

我的目的是让主事件循环在每个用户输入之后停止,这些用户输入已经被送到箭头/流变换器/等等。然后它将存储当前自动机状态并将所有可能的输入(假事件)逐个发送到自动机,并查看必须加载哪些资源,以缓存它们。在下一个真实事件之后,它将使用缓存来获得更好的响应。主要计算不应受此影响。

1 个答案:

答案 0 :(得分:8)

您提到的所有用例都包含在Netwire库中。它提供了Ross'自动机箭头到一系列 wire 箭头的概括。我还没有完成wiki page,但它应该足以让你开始。

对于某些monad Kleisli (LogicT m),将此与m相结合,可获得不确定的电汇。

作为补充说明:你想要的不是单子。