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

当前,在每个输入之后总有一个输出,但是改变它可能最终变得有趣。

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

  • 有很好的示例如何执行此操作?也许甚至带有测试代码?
  • 也可以用monad来实现吗? (示例?,解释为什么不可能?)

  • 编辑:
    在要求提供更多细节之后,我在此处添加了代码。现在,我将其删除(这是无法理解的),并添加一些其他说明。我的问题得到了解答。

    我的意图是在将每个用户输入馈入箭头/流转换器/任何对象之后,使主事件循环停止。然后它将存储当前的自动机状态,并将所有可能的输入(虚假事件)一一发送到自动机,并查看必须加载哪些资源以对其进行缓存。在下一个真实事件之后,它将使用缓存来获得更好的响应速度。主要计算不应受到此影响。

    最佳答案

    您提到的所有用例都在Netwire库中涵盖。它提供了罗斯自动机箭头到线箭头族的概括。我还没有完成wiki page,但是它应该给您足够的启动空间。

    将其与Kleisli (LogicT m)结合使用以获得某些monad m,您将获得不确定的连线。

    另外请注意:您想要的不是单子(monad)。

    关于haskell - 是否有可以像自动机一样使用的单子(monad)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8419452/

    10-10 16:25