问题标签 [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 投票
1 回答
117 浏览

haskell - 为什么`changes`返回`Event t(Future a)`

changes函数具有类型Frameworks t => Behavior t a -> Moment t (Event t (Future a))Future是抽象的,只有一个函数使用它(reactimate')。

但是,我可以轻松编写以下函数:

得到一个正常的(非Future)事件。

该功能有问题吗?如果不是,为什么原始changes函数有更严格的类型?

0 投票
1 回答
52 浏览

haskell - 修剪行为的初始价值是多少

我有以下测试程序:

我希望这能打印出来

但它打印

我正在创建一个包含两个事件的网络。eNumInts中的eShow一个事件()。每当eShow被提出,printInitial被执行。

printInitial打印行为的初始值trimB (stepper 0 eNum)。我认为trimB随后now会在编译包含它的网络描述之前丢弃历史记录。这意味着每次eShow引发时,都会出现一个新的行为,该行为以当时的值开始beh。显然,事实并非如此。

所以,

  • 目的是trimB什么?
  • 是否可以转换x :: Behavior t0 a为aty :: Behavior t1 ainitial y值?xt1
0 投票
1 回答
423 浏览

haskell - 在反应香蕉中进行测试

有没有办法对在反应香蕉中创建的网络进行单元测试?假设我已经建立了一些带有一些输入事件的网络 - 是否可以验证事件已经产生了一些输出流/行为在一定数量的输入事件之后具有一些价值。这样做是否有意义?

我注意到有各种interpret*功能,但似乎无法弄清楚如何使用它们。还有一个Model模块看起来非常适合测试,但与实际实现有完全不同的类型。

0 投票
1 回答
202 浏览

haskell - 在反应香蕉中执行单个开关

我正在使用reactive-banana- 构建一个多模式编辑器,并且在大多数情况下它会很完美。为了扩展我的场景,编辑器是一些绘图软件,或者您可以将其视为一个非常简单的矢量图形编辑器。它目前有两种状态——选择模式多边形创建模式。在选择模式下,用户可以用鼠标右键选择以前创建的多边形(理论上这会带你进入一个新的选择模式),或者他们可以用鼠标左键开始创建一个新的多边形。

目的是,当按下鼠标左键时,我们从选择模式切换到多边形创建模式。在这种模式下,鼠标左键意味着“添加一个新的顶点”,直到用户返回到原来的顶点。此时,他们已经关闭了多边形,所以我们返回选择模式。

我已经用几种不同的方式实现了这一点,最近注意到事件切换几乎使它非常优雅。我可以有:

随着

这当然有效 - 只需单击鼠标。如果我在地图上单击一次,我会从刚才的状态切换到扇区创建模式。但是,如果我再次单击,defaultMode接收到单击事件并切换到的多边形创建模式,丢弃我之前的状态。

我想做的就是切换defaultMode一次,再也没有回来的可能。本质上,我想Behavior t DiagramdefaultMode.createSectorMode

我知道reactive-banana动态事件的垃圾收集存在问题,但我现在愿意接受。上面的公式比我迄今为止写的任何其他公式都要精确得多——比如有一个CurrentState变量并根据它的内容过滤各种事件。我遇到的问题是它太大了,给我留下了太多的空间来搞砸事情。通过切换,我只能在范围内处理我可以处理的事件。

0 投票
1 回答
124 浏览

reactive-programming - Reactive Banana:模型实现,120 行代码真的完整描述了 Reactive Banana 的语义?

这 120 行代码是否完整完整地描述了 Reactive Banana 的语义?

https://github.com/HeinrichApfelmus/reactive-banana/blob/develop/reactive-banana/src/Reactive/Banana/Model.hs

这 120 行代码可以被视为 FRP 的指称语义吗?

这个 120 loc 是否提供与 Sodium 的 1000 loc 相同的功能?

是否有使用此模型实现的简单 FRP 演示?像桨球比赛?还是月球发射器游戏?还是 2D 太阳系模拟器?

我很想看到一些使用这个 120 loc FRP 实现的反应演示。

我可以以某种方式修改现有的 Reactive Banana 演示以使用这个 120 loc 模型实现而不是 Prim 实现吗?

例如,此示例似乎正在使用 Prim 实现: https ://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana/doc/examples/SlotMachine.hs

是否可以修改它以使用模型实现?

0 投票
1 回答
109 浏览

haskell - wxc-0.91.0.0 安装失败

我正在尝试在 cabal 沙箱中安装 reactive-banana、wx、wxcore。何时cabal install --only-dependencies运行以下错误消息:

出了什么问题以及如何解决这个问题?

0 投票
1 回答
95 浏览

haskell - 如何解决反应香蕉中 Moment t 的类型问题?

我正在尝试编写这样的函数:

但我无法让它进行类型检查:

我用 ScopedTypeVariables 和 forall t 尝试了不同的东西。但我无法让它工作。如何键入检查此功能?

[编辑 1]

添加类型签名

我得到:

很难理解这里发生了什么......这与“正常”的 Haskell 完全不同......

最终解决方案

0 投票
1 回答
80 浏览

haskell - 可复位的累加器行为?

我正试图把头绕在 FRP 上,但我不确定我做对了。我想从按键事件建立一个字符串,直到按下输入。一旦按下回车,字符串就会被写出并且累加器被重置为空字符串。

Char我有一个事件源,每次按下键盘上的键时都会发出ePressed. 首先,我将我关心的两种按键分开:

现在我知道如何将它们收集到我想要发送的内容中:

但是我不确定如何“坚持”直到按下输入,或者之后如何重置它。什么是正确的,惯用的方式来解决这个问题?

0 投票
2 回答
147 浏览

multithreading - 多线程和 gtk2hs

我正在用反应香蕉和 gtk2hs 编写一些需要从文件句柄中读取的代码。我需要至少有两个线程(一个用反应香蕉读取键盘事件,一个从文件句柄读取),所以目前我的代码看起来像这样:

具有以下主要功能:

我的活动网络设置如下:

(除了在我的实际代码中,这些reactimate调用写入TextView内置mainAxn)。我发现我需要构建-threaded以使事件网络正确捕获来自的文本和来自的textIn按键keyPress,这会导致问题,因为同时修改 gtk 包中的对象是不安全的。

目前,postGUIAsync我的代码中分散了调用,我发现 usingpostGUISync会导致整个事情陷入僵局——我不知道为什么。我认为这是因为我最终postGUISync在运行的同一个线程内部调用mainGUI

似乎最好在自己的线程中运行所有 GUI 内容并使用这些postGUI*函数进行每次访问。但是,当我将最后一行更改mainAxn

程序到达末尾时立即返回mainAxn。我试图通过使用来解决这个问题:

但是 gtk GUI 根本没有打开,我不明白为什么。

这样做的正确方法是什么?我错过了什么?

0 投票
1 回答
55 浏览

haskell - 如何知道是什么导致了行为改变?

我正在为列表框逻辑编写网络描述。
这真的很简单:我对 ( Maybe) 当前选定的项目有一个行为,并且我想要它,以便每当用户向列表中添加新项目时,当前选定的项目将选择刚刚创建的值。

用户也可能从列表中删除项目,并导致各种其他更改,因此我必须知道何时创建新项目;我不能只选择每次更改的最后一项。

我真的没有任何代码可以显示它,因为我对要做什么的所有猜测甚至都不能用 API* 编写,但我有Frameworks t和(简化)的上下文:

* 好吧,我确实考虑过使用eAddEntry来选择最后一个条目,但这太糟糕了,即使它会起作用,它也只是添加新项目和选择它之间的竞赛。

我该怎么办?