reactive-banana 中的 'Latch' 和 'Pulse' 是什么?

What are 'Latch' and 'Pulse' in reactive-banana?

Latch and Pulse 类型是否存在于 FRP 文献中,或者它们是 reactive-banana 作者的发明?

仅看类型,它们大致对应于 Behavior 和 Event(分别),但我想知道它们之间的区别是什么,以及它们的实现是否基于任何正式研究。

谢谢!

这里是海因里希。 PulseLatch 类型可能最好看作是我想出的 "lemmas",它们对于实现 EventBehavior 类型非常有用。我确信在尝试更正式地证明实施的合理性时它们会被证明是有用的,但这是一个艰巨的研究项目,我还没有找到时间或资源来这样做。

类型PulseEvent几乎相同,只是所有函数都要求具有单子类型,例如

mapP :: (a → b) → Pulse a → Build (Pulse b)
-- vs
mapE :: (a → b) → Event a → Event b

Event 类型是通过黑魔法(= 可观察共享)摆脱 Build monad 来实现的。 Build 这个名字听起来像是一个实用的 monad,如果你看一下代码就是这样,但这个 monad 也是基础的,因为它有一个语义解释为 "moment of time",而且你不明白为什么有时可以删除它,有时不能。

类型 Latch 也与 Behavior 非常相似,只是后者出于实用原因还包含一个 Event。类似的考虑适用于 Build monad。

我希望这能回答比提出的问题更多的问题。抱歉,我无法详细介绍 reactive-banana 的内部工作原理,这超出了 Whosebug 答案的范围。