反应性香蕉时间延迟

时间:2013-10-29 20:56:43

标签: haskell frp reactive-banana

我已经搜索了reactive-banana的文档,但我找不到指定显式时间延迟的方法。比方说,我想采取Event t a并将其所有出现时间转移到未来1秒;或者获得从现在起1秒钟内发生的事件(Moment t内);或类似的东西。反应性香蕉中是否存在明确的延迟?如果没有,用户如何实现,例如,回应延迟一秒的输入?

2 个答案:

答案 0 :(得分:4)

正如Ben指出的那样,这是正确的:反应性香蕉不是内置的时间和延迟概念。

主要原因是很难保证逻辑时间和实时一致。当鼠标点击事件发生时,在事件的逻辑时间尚未计算之前,即实际时间落后于其逻辑时间,会发生什么?

但是,仍然可以通过使用外部计时器事件来处理时间。看看Wave.hs示例。

答案 1 :(得分:3)

我不是一个专家,但是我已经使用了一个较旧的反应香蕉来完成这个需要的程序(不幸的是,我现在手头没有代码)。

认为明确的延迟不适合在反应性香蕉框架中超自然,因为你总是隐含地处理某种抽象时间。延迟特定的时间间隔需要处理现实世界的时间概念。我可以看到,在union event (delay 1.0 event)type Event a = [Maybe a][a, b, a, b]还是[a, a, b, b]的权威模型方面,很难说NetworkDescription之类的内容是什么意思?正如我一直在考虑的那样,问题是如果没有考虑操作运行时的细节,那么这两个中的哪一个应该是未指定的。

但是你可以通过将IO动作连接到你想要延迟睡眠一段时间的事件(显然不是在主线程中)然后触发一个不同的事件来“响应”反应性香蕉框架。我相信我能够将所有逻辑包含在我可以从Moment monad调用的函数中(这是在{{1}} monad存在之前)来获取我的新延迟事件。