3

我一直在研究使用 netwire,但看不到如何通过一系列不依赖于实际时间的电线来泵送瞬间。也就是说,有什么方法可以获取 type 的线和 typeWire e m a b的变量[(Time, a)],然后取回 type 的东西[b]吗?示例中的所有内容似乎都旨在让实时时钟生成瞬间。

4

1 回答 1

2

看看Control.Wire.Session模块。在那里,您将找到构建您自己的时钟的实用程序。特别是,您需要查看Session数据类型和genSession辅助函数。这是关于时钟的。第二个问题是输入:在某一时刻传递什么输入由主循环的作者决定。

事实上,如果你只有一个时间列表和输入,我建议计算时间增量,然后stepWire直接使用(而不是stepSession),绕过整个会话机制。唯一的限制是时间总是类型Double。例子:

loop :: [(Time, a)] -> Time -> Wire e m a b -> m [Either e b]
loop [] _ _ = return []
loop ((t, x):ins) t' w' = do
    (mx, w) <- stepWire w' (t - t') x
    fmap (mx:) (loop ins t w)

未经测试的代码,但应该可以工作。第二个参数是开始时间。

于 2012-10-26T16:11:03.223 回答