【发布时间】:2015-03-20 10:28:59
【问题描述】:
对于我正在处理的任务,Elm 编程语言的信号系统似乎是一个合适的解决方案。
但是我的纯计算函数是在 Haskell 中实现的。是否有一个 Haskell 库可以让我构建一个信号图(在节点中使用我的纯函数),以便它像在 Elm 中一样工作?
我的背景
我需要按需观察大量计算的中间结果,即我不想实际格式化和输出每个中间结果,但如果需要,我应该以最新的中间结果响应(从计算信号中接收到)。
其实有几个并行计算,其中一些使用其他的结果,所以我想要几个独立的输出信号来观察它们。所以我相信我可以编写一个 Elm 程序来对系统进行建模,以观察可用的中间结果。 (也许,我错了,我应该尝试至少在 Elm 中编写一个原型,但我也在考虑与我的主要 Haskell 代码集成。)
【问题讨论】:
-
有许多 Haskell FRP 包。我认为在尝试从 Elm 移植某些内容之前,您可能应该深入研究这些内容。
-
在新Auto library 的讨论中提到了该领域的一些内容。现在我怀疑我需要更像真实(“实时”)FRP 的东西,而不是像 Elm 或 Auto 这样的伪 FRP,因为我希望依赖节点仅在实际空闲时执行新计算-时间(完成之前的工作),它应该从源节点获取任何可用的中间结果,跳过之前的任何结果,而不是等待新的结果......
-
在低级别上,我认为这是一个可变变量,保存最后计算的中间结果(在源节点中),并且依赖节点在它再次空闲时读取它。或者更好:每当它被查询时,因此必须强制计算它的值。好吧,最后一部分与 Elm 系统并没有那么不同,但是我还不清楚源信号在 Elm 系统中就像一个可变变量的想法。无论如何,我的这些考虑与我在本文标题中提出的问题没有直接关系。
-
无论如何,我的这些考虑与我在本文标题中提出的问题没有直接关系。我相信标题中的问题对于 Haskell 社区来说是一个非常重要且有趣的问题,因为 Elm 有一个有吸引力的、展示良好且广为人知的信号系统,许多人可能希望在他们的 Haskell 程序中使用它。跨度>
-
我的特定问题的一个很好的解决方案可能是将我的计算节点写为coroutines(另见Bargain Priced Coroutines),然后是一个专门的顶级主函数,它将通过可变变量并使用真实线程“实时”调度它们。然后我可以灵活地将它们嵌入到一个完全不同的调度程序中(纯粹是功能性的,具有离散的步骤,协作多任务,或者不那么细粒度)