首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在反应式香蕉中没有从非事件中构建事件的函数?

为什么在反应式香蕉中没有从非事件中构建事件的函数?
EN

Stack Overflow用户
提问于 2012-09-21 04:15:40
回答 1查看 234关注 0票数 7

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

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

代码语言:javascript
复制
reactimate $ fmap (uncurry playNote) myEvent

在我的NetworkDescription中,但我不知道如何让网络重复做同样的事情,或者只做一次。理想情况下,我在寻找这样的东西:

代码语言:javascript
复制
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类型只是我们最终使用的任何时间度量的替身。我是否需要将系统时间作为一种行为来驱动“延迟”函数?这似乎比必要的更复杂。

提前谢谢你,

Echo Nolan

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

代码语言:javascript
复制
repeatWithDelay :: a -> Time -> Event t a
concatWithDelay :: a -> a -> Time -> Event t a
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-21 16:57:20

我选择现在不在核心模型中包含这样的函数,因为时间对一致性提出了各种挑战。例如,如果计划从现在起5秒后发生两个事件,它们是否应该同时发生?如果没有,哪一个应该放在第一位?我认为核心模型应该服从正式的证明,但这不适用于实际的物理时间测量。

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12520242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档