2013-10-29 53 views
8

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

回答

4

正如本指出的,这是正确的:反应式香蕉不是固有的时间和延迟概念。

主要原因是很难保证逻辑时间和实时性的一致。当一个事件的逻辑时间尚未计算出来之前,实时发生鼠标点击时,会发生什么情况,即其实时是否在其逻辑时间之后变暗?

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

3

我不是一个专家,但我已经使用了一个更老的反应式香蕉来满足这种需求的程序(不幸的是,我目前没有手头的代码)。

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

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