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