我一直在考虑使用netwire,但看不到如何通过一系列不依赖于实际时间的连接来传递瞬间。也就是说,是否有某种方法可以获取类型为Wire e m a b的连接和类型为[(Time, a)]的变量,并返回类型为[b]的内容?示例中的一切似乎都是为了让实时时钟生成瞬间。
发布于 2012-10-27 00:11:03
看一看Control.Wire.Session模块。在那里您将找到构建您自己的时钟的实用程序。特别是,您将需要查看Session数据类型和genSession助手函数。这是关于时钟的。第二个问题是输入:传递给一个实例的输入是由主循环的作者决定的。
事实上,如果你只有一个包含输入的时间列表,我建议你计算时间增量,然后直接使用stepWire (而不是stepSession),绕过整个会话机制。唯一的限制是time的类型始终是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)未经测试的代码,但应该可以工作。第二个参数是开始时间。
https://stackoverflow.com/questions/13088329
复制相似问题