问题标签 [reactive-banana]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3748 浏览

haskell - 选择哪种 FRP 包?

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

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

我只有这些初步意见:

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

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

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

0 投票
2 回答
283 浏览

haskell - Haskell 的响应式香蕉中响应式网络的 flatMap 的等价物是什么?

我正在寻找响应式香蕉中的函数,该函数将根据另一个事件流或信号的传入值(行为?)从下一个要发出的事件流中进行选择。在 scala 库中,reactive-web 是通过以下方式完成的:

谢谢 !

0 投票
1 回答
120 浏览

haskell - Reactive-Banana 中溢出函数的事件处理顺序是什么?

我对此进行了测试,似乎事件处理的顺序与源事件中列表的顺序相同。我不认为我可以依赖它,因为文档仅说明:

发出同时发生的事件。严格来说,我们有溢出。收集 = id

如何使用以下规范创建类似于溢出的函数:

发出连续的事件发生,并保证在第一个和最后一个之间不会触发其他事件

还是我应该尝试不同的方法?我正在尝试在 Reactive-Banana 中实现宏功能

0 投票
1 回答
845 浏览

haskell - Cabal 在 ubuntu 12.04 上安装 reactive-banana-wx

我刚刚重新安装了 Ubuntu 12.04,从 apt-get 拉下 haskell-platform,当我尝试安装 reactive-banana-wx 时,我得到:

当我强制重新安装时,我得到:

关于如何解决这个问题的任何想法,或者我是否必须等待更新依赖项或新版本的 haskell-platform?如果可能的话,我希望一切都尽可能接近 Ubuntu 上的标准安装。

谢谢!

0 投票
1 回答
218 浏览

haskell - Reactive-banana:来自 fromPoll 的最新值

我正在用反应香蕉在 Haskell 中写一个音乐播放器。我遇到的一个问题是使用 fromPoll 获取最新值。我想让用户在播放时有选择地选择曲目的一部分。我的代码看起来像这样:

上面,getPosition是一个偏函数,在真正开始播放之前返回Nothing 。问题是一旦addCmdEvent第一次触发,bPosition仍将保持Nothing值。eSetStart/End基于此计算它们的值。只有这样bPosition 才会更新,这是下次触发addCmdEvent时使用的值。依此类推,可以说,值将始终“减一”。

有一个相关的SO question,但在这种情况下,存在一个“触发”事件,可用于计算行为的新值。使用 fromPoll 可以实现类似的事情吗?

0 投票
1 回答
269 浏览

haskell - 使用 Reactive-banana 和 SDL 的完整 Click/KeyPress 事件

据我所知,完整的单击事件是一个按钮向下和向上,没有鼠标移动。SDL 只给我 Button Up 和 Down 事件。

有什么reactive-banana方法可以表达“先按下然后再按下”吗?

顺便说一句,如果我想要一个显示“key still down”的事件,我必须启用 SDL,enableKeyRepeat以便再次触发 keyDown 事件。如何在 FRP 中正确表达?

0 投票
1 回答
171 浏览

haskell - 实现 zipE :: Event ta -> Event tb -> Event t (a,b)

一般来说,我对反应性香蕉和 FRP 很陌生,所以如果我遗漏了一些明显的东西,我深表歉意。

对于我的项目(一个GDB/MI前端),我对 GUI 和前端逻辑模块都使用了响应式香蕉(版本 0.6.0.0)。前者效果很好,但对于后者,我显然需要额外的组合器。

其中之一是zipE :: Event t a -> Event t b -> Event t (a, b)。不幸的是,我能想出的只是 NetworkDescription monad 中的一个解决方案,它changes在事件类型中使用并且不是通用的:

当然,我对此并不满意。因此,我想问如何在不使用的情况下实现一个通用的 zipE 函数changes(不鼓励将其用于非 GUI 目的)。

其他尝试失败,例如

导致元组的第一个元素被移动一个 - 我猜是由于stepper. 但是我看不到如何从没有stepper(或accumB就此而言)的事件中获取行为,也看不到如何将函数应用于没有行为的事件。总的来说,在泛型类型的情况下,我看不到如何为步进器提供初始值。

0 投票
2 回答
325 浏览

haskell - 具有状态更新的状态相关事件处理

我想为我的项目(一个GDB/MI前端)使用 FRP(即反应香蕉 0.6.0.0)。但是我在声明事件网络时遇到了麻烦。

有来自 GUI 的命令,有来自 GDB 的停止事件。两者都需要处理,处理它们取决于系统的状态。

我目前的方法看起来像这样(我认为这是显示问题所需的最低复杂性):

handleCommandhandelStopped根据当前状态对命令和停止事件做出反应。可能的反应是调用(同步)GDB I/O 函数和触发状态更新事件。例如:

问题是,当f由 评估时accumEstate'有时与 不同state

我不是 100% 确定为什么会发生这种情况,因为我不完全理解时间和同时性的语义以及反应香蕉中“反应”的顺序。但我猜想,由触发的状态更新函数可能会在改变状态handleStopped之前被评估。f

无论如何,这个事件网络会导致不一致的状态,因为对f“当前”状态的假设有时是错误的。

我已经尝试解决这个问题一个多星期了,但我就是想不通。任何帮助深表感谢。

0 投票
1 回答
431 浏览

haskell - 功能性香蕉旅行者游戏 - 有趣而疯狂

我想使用响应式香蕉来编写人们可以为其编写机器人的旅行者游戏。FRP 对我来说是全新的,我很难开始。当我开始时,我创建了一个更精细的图表,但为了我的目的,我试图让它尽可能简单。我想要一些指导,主要是关于从哪里开始,以及如何将这个更大的问题分解成更小的问题来解决。这是最初的设计。

这个想法是有一个 LNodes 的图(为了简单起见,我现在忽略了加权边缘)。我将这些 LNode 描述为Planets。s 有一个名字,一个和s上的Planet玩家地图。玩家有一个 id、resources 和一个 Planet。这里是 Data Structues 和一些相关的功能,接下来是更多的讨论。PlanetResource

到目前为止,这是我所知道的,我的事件将涉及类型PlanetPlayer. 行为将涉及移动、加入、获取和给予。当玩家加入时,它将创建一个新Player事件并使用该事件更新 Vulcan 上的地图Player。移动将允许从一个遍历 LNode到另一个,前提是LNodes 由一条边连接。Take 将从resources当前PlanetPlayer“打开”中删除并将它们添加resourcesPlayer. 给予会适得其反。

我怎样才能把这个大问题分解成更小的问题,这样我才能理解这些东西?

更新:事实证明 Hunt the Wumpus 不是帮助学习 FRP 的好选择,请参阅此处的 FRP 用途说明。这是 Heinrich Apfelmus 的回应。

也就是说,我现在将完全忽略网络代码。我可以写一些虚拟机器人来测试时间等。

更新:有些人似乎对这个问题感兴趣,所以我将在这里跟踪相关问题。

建立一个计时器

输入处理

0 投票
3 回答
539 浏览

haskell - Reactive Banana 的 mapAccum 函数是如何工作的?

我在 Stack Overflow 上查看了许多问题的答案,试图找到解决我在使用 Reactive Banana 库时遇到的问题的方法。所有的答案都使用了一些我不太理解的“mapAccum”魔法。查看 API 文档,我发现只有“ accumEand的有效组合accumB”。这不是很有帮助。

似乎这个函数可以用来比较Behavior两个连续事件时 a 的值,这是我想做的。但我不清楚如何使这项工作。

具体是如何mapAccum工作的?