如何让netwire网络模拟一组离散瞬间的执行?

时间:2012-10-26 13:58:02

标签: haskell frp

我一直在考虑使用netwire,但是看不出我如何通过一系列不依赖于实际时间的电线来泵送瞬间。也就是说,有没有办法采用Wire e m a b类型的电汇和[(Time, a)]类型的变量,并返回[b]类型的某些内容?示例中的所有内容似乎都是为了让实时时钟生成瞬间。

1 个答案:

答案 0 :(得分: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)

未经测试的代码,但应该有效。第二个参数是开始时间。