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

Haskell 如何让netwire网络模拟在一组离散的瞬间执行?,haskell,frp,Haskell,Frp,我一直在考虑使用netwire,但看不出如何通过一系列不依赖于实际时间的导线来泵送瞬间。也就是说,是否有某种方法可以获取类型为的导线e m a b,以及类型为[(时间,a)]的变量,并获取类型为[b]的内容?示例中的所有内容似乎都是为了让实时时钟生成瞬间。请查看Control.Wire.Session模块。在那里,您将找到构建自己时钟的实用程序。您尤其需要查看会话数据类型和genSessionhelper函数。这是关于时钟的。第二个问题是输入:传递给一个瞬间的输入由主循环的作者决定 事实上,如果

我一直在考虑使用netwire,但看不出如何通过一系列不依赖于实际时间的导线来泵送瞬间。也就是说,是否有某种方法可以获取类型为
的导线e m a b
,以及类型为
[(时间,a)]
的变量,并获取类型为
[b]
的内容?示例中的所有内容似乎都是为了让实时时钟生成瞬间。

请查看
Control.Wire.Session
模块。在那里,您将找到构建自己时钟的实用程序。您尤其需要查看
会话
数据类型和
genSession
helper函数。这是关于时钟的。第二个问题是输入:传递给一个瞬间的输入由主循环的作者决定

事实上,如果您只有一个时间列表和输入,我建议您计算时间增量,然后直接使用
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)
loop::[(时间,a)]->Time->Wire e m a b->m[任一e b]
循环[]\uuz=return[]
循环((t,x):ins)t'w'=do

(mx,w)这似乎并没有按原样编译,但我想我可以从这里到达那里,谢谢。