haskell - 有没有可以像自动机一样使用的单子(monad)?

标签 haskell monads arrows automaton

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

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

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

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

  • 编辑:
    在要求更多细节之后,我在这里添加了代码。现在我要删除它(这是无法理解的)并添加一些其他解释。我的问题得到了回答。

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

    最佳答案

    Netwire 涵盖了您提到的所有用例。图书馆。它提供了罗斯自动机箭头对线箭头系列的推广。我还没写完wiki page然而,它应该给你足够的开始。

    将此与 Kleisli (LogicT m) 结合使用对于一些单子(monad)m你得到不确定的电线。

    作为附加说明:你想要的不是单子(monad)。

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

    相关文章:

    parquet - 为什么 `plain_dictionary` 编码的字典页面偏移量为 0?

    haskell - 有类似 `map2::(i -> a) -> (i -> b) -> [i] -> [(a,b)]` 的东西吗?

    haskell - 在递归函数内使用 'Either' 进行错误处理

    Haskell 素数测试

    haskell - 是否可以纯粹执行 `ST`之类的monad(无需 `ST`库)?

    haskell - 理解 Haskell 中 Monad 绑定(bind)运算符的关联性

    parsing - 使用 Free Monad 实现词法分析器

    arrays - haskell优化尾递归中的代码和堆栈溢出

    haskell - 函数单子(monad)真的提供了比函数应用仿函数更多的东西吗?如果是这样,是什么?

    python - 如何使用 matplotlib 绘制与比例无关的箭头