【发布时间】:2014-07-06 00:34:49
【问题描述】:
我正在尝试在 Haskell 中编写一个用于实时交互式图形的框架。我一直试图通过使用 Netwire 5 来处理事情,但我似乎没有很好地处理事情如何“相互依赖”。 For example,下面的代码应该在切换到 (val + 1) 之前产生 val 两秒钟,然后无限期地继续。
someWire :: Num a => a -> Wire s e m a a
someWire x = (-->) ((pure x) &&& (periodic 2) >>> until) (someWire (x + 1))
但是,这会造成某种内存泄漏,导致我的程序停止并一直分配内存,直到系统崩溃。或者,这个定义
someWire :: Num a => a -> Wire s e m a a
someWire x = (-->) ((pure x) &&& (at 2) >>> until) (someWire (x + 1))
按照我期望的方式运行:从val 开始计数,值每两秒更改一次。有人可以解释一下这种行为吗?
【问题讨论】:
-
您的
someWires 不进行类型检查。我假设你的意思是例如((pure val &&& (periodic 2)) >>> until) --> (someWire (val + 1)). -
谢谢,我修好了。这里有一个更好的完整崩溃示例:gist.github.com/Mokosha/2b65655450981cfded65
标签: haskell functional-programming frp netwire