gpt4 book ai didi

haskell - 为什么响应式(Reactive)香蕉中没有从非事件构建事件的函数?

转载 作者:行者123 更新时间:2023-12-02 10:56:18 24 4
gpt4 key购买 nike

我正在自学 FRP 和 Reactive-banana,同时编写我希望对那些关注我的人来说更有用的教程。您可以查看我的教程进度 here .

我一直在尝试使用事件来实现简单的蜂鸣声示例。我知道我需要做这样的事情:

reactimate $ fmap (uncurry playNote) myEvent

在我的NetworkDescription中,但我不知道如何让网络重复执行相同的操作,或执行一次操作。理想情况下,我正在寻找这样的东西:

once :: a -> Event t a
repeatWithDelay :: Event t a -> Time -> Event t a
concatWithDelay :: Event t a -> Event t a -> Time -> Event t a

上面的 Time 类型只是我们最终使用的任何时间测量的替代。我是否需要将系统时间作为行为来驱动“延迟”功能?这似乎比必要的更复杂。

提前致谢,

艾科·诺兰

编辑:好的,repeatWithDelay 和 concatWithDelay 的类型没有意义。这就是我真正的意思。

repeatWithDelay :: a -> Time -> Event t a
concatWithDelay :: a -> a -> Time -> Event t a

最佳答案

我选择暂时不在核心模型中包含此类函数,因为时间会给一致性带来各种挑战。例如,如果两个事件计划在 5 秒后发生,它们是否应该同时发生?如果不是,哪个应该放在第一位?我认为核心模型应该适合形式证明,但这不适用于实际的物理时间测量。

也就是说,我计划以“它们有效,但不能保证”的方式包含这些函数。我还没有这样做的主要原因是没有时间测量的规范选择。不同的应用程序有不同的需求,有时您想要纳秒分辨率,有时您想要使用 GUI 框架中的计时器,有时您想要同步到外部 MIDI 时钟。换句话说,您希望基于时间的函数能够与许多计时器实现一起工作,而只有在reactive-banana-0.7.0中我才找到了一个很好的API设计。

当然,您已经可以使用计时器来实现您自己的基于时间的功能。 Wave.hs示例演示了如何做到这一点。另一个例子是 Henning Thielemann 的 reactive-balsa library ,它实现了各种基于时间的组合器来实时处理 MIDI 数据。

关于haskell - 为什么响应式(Reactive)香蕉中没有从非事件构建事件的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12520242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com