反应性香蕉中的“闩锁”和“脉冲”是什么?

时间:2017-08-28 11:50:01

标签: haskell reactive-programming frp reactive-banana

FRP文献中是否存在LatchPulse类型,或者它们是反应性香蕉作者的发明?

只看这些类型,它们大致分别对应行为和事件,但我想知道它们的区别是什么,以及它们的实现是否基于任何正式的研究。

谢谢!

1 个答案:

答案 0 :(得分:3)

海因里希在这里。 PulseLatch类型最好被视为" lemmas"我提出的这对于实现EventBehavior类型非常有用。我确信在试图更正式地证明实施的合理性时,它们将证明是有用的,但这是一个令人生畏的研究项目,我没有找到时间或资源这样做。

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答案的范围。