【发布时间】:2014-05-24 05:33:18
【问题描述】:
在经典 FRP 的最新实现中,例如反应香蕉,有事件流和信号,它们是阶跃函数(反应香蕉称它们为行为,但它们仍然是阶跃函数)。我注意到 Elm 只使用信号,并没有区分信号和事件流。此外,reactive-banana 允许从事件流到信号(已编辑:虽然它不被认为是好的做法,但可以使用 reactimate 对行为采取行动),这意味着理论上我们可以应用所有事件流通过首先将信号转换为事件流,应用然后再次转换来对信号/行为进行组合器。那么,考虑到它通常更容易使用和学习一种抽象,分离信号和事件流有什么好处?仅使用信号并将所有事件流组合器转换为对信号进行操作是否会丢失任何东西?
edit:讨论非常有趣。我自己从讨论中得出的主要结论是,相互递归定义(反馈)和输出依赖于两个输入(一个行为和一个事件源)都需要行为/事件源,但只有在一个输入时才会导致动作其中有变化 ()。
【问题讨论】:
-
嗯,据我了解,行为是不是阶跃函数,而是随时间连续?
-
conal.net/papers/push-pull-frp 可能是一本好书
-
是的,行为不是阶跃函数,但据我了解,reactive-banana 所称的行为实际上是阶跃函数,elm 和 reactive-web 称其为信号。谢谢你的链接,我已经读过那篇论文了。
-
@Bergi 我认为理论上它们应该是连续的,但在实际实现中很难实现真正的连续性,这就是它们被这样实现的原因。
-
@miguel.negrao 我认为另一个主要结论是行为是瞬时的,而事件可以累积,即支持更新而不是总是依赖于当前值。
标签: haskell functional-programming frp reactive-banana elm