我已经搜索了reactive-banana的文档,但我找不到指定明确时间延迟的方法。比如说,我想将Event t a
它的所有出现转移到未来 1 秒;或获取从现在开始 1 秒后触发的事件(在 内Moment t
);或类似的东西。反应性香蕉中是否可以表示显式延迟?如果不是,用户如何实现,例如延迟一秒回显输入?
2 回答
正如 Ben 所指出的,这是正确的:reactive-banana 没有内置的时间和延迟概念。
主要原因是很难保证逻辑时间和实时时间一致。当鼠标点击在一个尚未计算的事件的逻辑时间之前实时发生时会发生什么,即其实时时间落后于其逻辑时间?
但是,仍然可以使用外部定时器事件来处理时间。查看Wave.hs示例。
无论如何,我都不是专家,但我已经使用了一个旧的响应式香蕉来满足这个需求(不幸的是,我目前手头没有代码)。
我认为显式延迟并不自然地适合响应式香蕉框架,因为您总是隐含地处理某种抽象时间。延迟特定的时间间隔需要处理现实世界的时间概念。我可以看到,很难说类似的东西union event (delay 1.0 event)
在权威模型中意味着什么type Event a = [Maybe a]
:应该是[a, b, a, b]
还是[a, a, b, b]
?正如我一直在考虑的那样,问题是在不考虑操作运行时细节的情况下,未指定这两个结果中的哪一个。
但是您可以通过将 IO 操作连接到您想要延迟的事件(显然不在主线程中)然后触发不同的事件,从而“围绕”响应式香蕉框架来执行此操作。我相信我能够将所有逻辑封装在一个函数中,我可以从NetworkDescription
monad 调用(这是在Moment
monad 存在之前)来获取我的新延迟事件。