答案 0 :(得分:3)
Pulse
和Latch
类型最好被视为" lemmas"我提出的这对于实现Event
和Behavior
类型非常有用。我确信在试图更正式地证明实施的合理性时,它们将证明是有用的,但这是一个令人生畏的研究项目,我没有找到时间或资源这样做。
Pulse
类型与Event
几乎相同,只是所有函数都需要具有monadic类型,例如
mapP :: (a → b) → Pulse a → Build (Pulse b)
-- vs
mapE :: (a → b) → Event a → Event b
Event
类型是通过黑魔法(=可观察共享)摆脱Build
monad来实现的。名称Build
听起来像是一个实用工具monad,如果你看代码那就是它,但这个monad也是基础,因为它有一个语义解释为"时刻&#34并且,有时为什么你可以删除它并且有时不能删除它并不明显。
类型Latch
也与Behavior
非常相似,但后者出于实际原因还包含Event
。类似的考虑适用于Build
monad。
我希望这回答的问题多于提出的问题。很抱歉,我无法详细了解反应性香蕉的内部工作原理,这超出了StackOverflow答案的范围。