27

我刚刚开始研究 Haskell 中的函数响应式编程世界,我想在反应设置中尝试 GUI 编程(使用 gtk,因为大量绑定)。

现在,我一直在研究 Grapefruit、Reactive-Banana 和 Buster,我想要任何关于使用任何一种或其他包装的快乐/恐怖的证明。

我只有这些初步意见:

  • 我不介意自己将 FRP 包绑定到 gtk,因为我对抽象的后端想法(Grapefruit 有)有一种矛盾的感觉。

  • 虽然我发现类型理论很有趣,但我也重视实际程序的简单编码,这似乎让 grapfruit-records 有点偏离..

也就是说,除非你们中的一些人当然说服我不这么想:-)

4

2 回答 2

19

如果您只想使用常规 FRP,并与 GUI 框架保持密切联系,而不是对其使用“预制”抽象,那么在我看来,reactive-banana 是最可行的选择。它明确地针对与现有框架的绑定,专为“现实世界”使用而设计(不做任何过于实验性的、语义上可能导致问题的事情)等等。

您可以查看reactive-banana-wx以了解如何将基于事件的框架绑定到 reactive-banana。这很简单;我曾经写过一个到 Gtk2Hs 的快速绑定(不幸的是,现在丢失了代码),并且文件没有超过 50 行。这几乎是对 reactive-banana-wx 代码的直接音译。

我建议不要使用 Buster,原因很简单,因为它自 2009 年以来就没有更新过,并且不是基于 GHC 7 构建的。

其他“面向生产”的 FRP 框架是(类似于 reactive-banana,但它具有动态事件切换即将进入 reactive-banana,但尚未出现)和用于并发的“分区”概念;但是,它刚刚问世,尚未被采用)和netwire(箭头 FRP,与反应性香蕉和钠完全不同的生物)。

于 2012-04-03T20:44:59.417 回答
12

我自己一直在试验 FRP,到目前为止,唯一对我有用的是 Reactive-Banana。我从来没有研究过 Grapefruit 或大多数其他的,因为它们已经过时了,而且似乎根本不会更新或支持它们。我确实简要地查看了 netwire,但坦率地说,其中所有的箭头理论让我感到厌烦,我在弄清楚如何做一些简单的事情时遇到了很多麻烦。

相比之下,我设法获得了一组用 Reactive-Banana 编写的非常好的 SDL 绑定,一路上只有一些小问题。支持 Reactive-Banana 的另一件事是 Heinreich 在社区中非常活跃,并且在遇到问题时经常会提供有用的答案。只要看看这里的各种反应性香蕉问题,你就会发现他已经回复了很多问题,而且他通常非常活跃于 Haskell 邮件列表中的 FRP 讨论。

于 2012-04-03T20:49:20.210 回答