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

Dus*_*ang 7 monads haskell arrows automaton

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

目前,每次输入后总会有一个输出,但最终可能会改变它.

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

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

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

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

小智 8

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

将此与Kleisli (LogicT m)一些monad 结合使用m可以得到不确定的线.

另外要注意:你想要的不是monad.