首页 文章

Haskell Reactive-Banana FRP 和事件循环

提问于
浏览
2

我仍然试图围绕 Haskell 和 FRP。具体来说,我已经使用 reactive-banana 包并开始获得 FRP 的一些例子。

但是,我仍然不明白事件网络何时知道输入事件的发生。我的理解是,与具有不断检查用户输入的事件循环的 NodeJS 不同,FRP 利用不同的框架来“等待”或“检查”用户输入或外部信号。

从我的阅读中,FRP 让时间明确。通过将时间与事件或行为联系起来,网络总是知道外部刺激何时被解雇。

我读过 Conal,Hudak 等人的许多论文。而且解释太技术化了。请提供较少的技术说明。

谢谢你的帮助。

1 回答

  • 3

    记住 FRP(与基本构建有趣的EventBehavior有关)和平台特定的“胶代码”之间的区别很有用,它提供了基本Event的集合,如当前鼠标位置或键盘按键。

    在 Reactive-Banana 库中,这种区别反映在模块结构中,Reactive.Banana.Combinators与第一部分有关,而Reactive.Banana.Frameworks与第二部分有关。

    现在,了解第二部分(基本Events)如何工作对于理解第一部分(FRP)如何工作并不重要;事实上,不同的库可能会做出非常不同的实现选择。

    也就是说,在 Reactive-Banana 库中,事件网络本质上是一个巨大的回调函数,它将自身注册到外部事件源(在库中称为AddHandler)。只要其中一个外部源调用回调函数,后者将按依赖顺序遍历EventBehavior的图形,对内部状态执行必要的更新,最后运行先前使用reactimate注册的操作。

    FRP 的神奇之处在于库用户没有看到任何这些实现细节,尽管知道“事件网络=一个巨大的回调函数”有时很有用。

相关问题