问题标签 [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.
haskell - 为什么`changes`返回`Event t(Future a)`
该changes
函数具有类型Frameworks t => Behavior t a -> Moment t (Event t (Future a))
。Future
是抽象的,只有一个函数使用它(reactimate'
)。
但是,我可以轻松编写以下函数:
得到一个正常的(非Future
)事件。
该功能有问题吗?如果不是,为什么原始changes
函数有更严格的类型?
haskell - 修剪行为的初始价值是多少
我有以下测试程序:
我希望这能打印出来
但它打印
我正在创建一个包含两个事件的网络。eNum
是Int
s中的eShow
一个事件()
。每当eShow
被提出,printInitial
被执行。
printInitial
打印行为的初始值trimB (stepper 0 eNum)
。我认为trimB
随后now
会在编译包含它的网络描述之前丢弃历史记录。这意味着每次eShow
引发时,都会出现一个新的行为,该行为以当时的值开始beh
。显然,事实并非如此。
所以,
- 目的是
trimB
什么? - 是否可以转换
x :: Behavior t0 a
为aty :: Behavior t1 a
的initial y
值?x
t1
haskell - 在反应香蕉中进行测试
有没有办法对在反应香蕉中创建的网络进行单元测试?假设我已经建立了一些带有一些输入事件的网络 - 是否可以验证事件已经产生了一些输出流/行为在一定数量的输入事件之后具有一些价值。这样做是否有意义?
我注意到有各种interpret*
功能,但似乎无法弄清楚如何使用它们。还有一个Model
模块看起来非常适合测试,但与实际实现有完全不同的类型。
haskell - 在反应香蕉中执行单个开关
我正在使用reactive-banana
- 构建一个多模式编辑器,并且在大多数情况下它会很完美。为了扩展我的场景,编辑器是一些绘图软件,或者您可以将其视为一个非常简单的矢量图形编辑器。它目前有两种状态——选择模式和多边形创建模式。在选择模式下,用户可以用鼠标右键选择以前创建的多边形(理论上这会带你进入一个新的选择模式),或者他们可以用鼠标左键开始创建一个新的多边形。
目的是,当按下鼠标左键时,我们从选择模式切换到多边形创建模式。在这种模式下,鼠标左键意味着“添加一个新的顶点”,直到用户返回到原来的顶点。此时,他们已经关闭了多边形,所以我们返回选择模式。
我已经用几种不同的方式实现了这一点,最近注意到事件切换几乎使它非常优雅。我可以有:
随着
这当然有效 - 只需单击鼠标。如果我在地图上单击一次,我会从刚才的状态切换到扇区创建模式。但是,如果我再次单击,defaultMode
接收到单击事件并切换到新的多边形创建模式,丢弃我之前的状态。
我想做的就是切换defaultMode
一次,再也没有回来的可能。本质上,我想Behavior t Diagram
用defaultMode
.createSectorMode
我知道reactive-banana
动态事件的垃圾收集存在问题,但我现在愿意接受。上面的公式比我迄今为止写的任何其他公式都要精确得多——比如有一个CurrentState
变量并根据它的内容过滤各种事件。我遇到的问题是它太大了,给我留下了太多的空间来搞砸事情。通过切换,我只能在范围内处理我可以处理的事件。
reactive-programming - Reactive Banana:模型实现,120 行代码真的完整描述了 Reactive Banana 的语义?
这 120 行代码是否完整完整地描述了 Reactive Banana 的语义?
这 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
是否可以修改它以使用模型实现?
haskell - wxc-0.91.0.0 安装失败
我正在尝试在 cabal 沙箱中安装 reactive-banana、wx、wxcore。何时cabal install --only-dependencies
运行以下错误消息:
出了什么问题以及如何解决这个问题?
haskell - 如何解决反应香蕉中 Moment t 的类型问题?
我正在尝试编写这样的函数:
但我无法让它进行类型检查:
我用 ScopedTypeVariables 和 forall t 尝试了不同的东西。但我无法让它工作。如何键入检查此功能?
[编辑 1]
添加类型签名
我得到:
很难理解这里发生了什么......这与“正常”的 Haskell 完全不同......
最终解决方案
haskell - 可复位的累加器行为?
我正试图把头绕在 FRP 上,但我不确定我做对了。我想从按键事件建立一个字符串,直到按下输入。一旦按下回车,字符串就会被写出并且累加器被重置为空字符串。
Char
我有一个事件源,每次按下键盘上的键时都会发出ePressed
. 首先,我将我关心的两种按键分开:
现在我知道如何将它们收集到我想要发送的内容中:
但是我不确定如何“坚持”直到按下输入,或者之后如何重置它。什么是正确的,惯用的方式来解决这个问题?
multithreading - 多线程和 gtk2hs
我正在用反应香蕉和 gtk2hs 编写一些需要从文件句柄中读取的代码。我需要至少有两个线程(一个用反应香蕉读取键盘事件,一个从文件句柄读取),所以目前我的代码看起来像这样:
具有以下主要功能:
我的活动网络设置如下:
(除了在我的实际代码中,这些reactimate
调用写入TextView
内置mainAxn
)。我发现我需要构建-threaded
以使事件网络正确捕获来自的文本和来自的textIn
按键keyPress
,这会导致问题,因为同时修改 gtk 包中的对象是不安全的。
目前,postGUIAsync
我的代码中分散了调用,我发现 usingpostGUISync
会导致整个事情陷入僵局——我不知道为什么。我认为这是因为我最终postGUISync
在运行的同一个线程内部调用mainGUI
。
似乎最好在自己的线程中运行所有 GUI 内容并使用这些postGUI*
函数进行每次访问。但是,当我将最后一行更改mainAxn
为
程序到达末尾时立即返回mainAxn
。我试图通过使用来解决这个问题:
但是 gtk GUI 根本没有打开,我不明白为什么。
这样做的正确方法是什么?我错过了什么?
haskell - 如何知道是什么导致了行为改变?
我正在为列表框逻辑编写网络描述。
这真的很简单:我对 ( Maybe
) 当前选定的项目有一个行为,并且我想要它,以便每当用户向列表中添加新项目时,当前选定的项目将选择刚刚创建的值。
用户也可能从列表中删除项目,并导致各种其他更改,因此我必须知道何时创建新项目;我不能只选择每次更改的最后一项。
我真的没有任何代码可以显示它,因为我对要做什么的所有猜测甚至都不能用 API* 编写,但我有Frameworks t
和(简化)的上下文:
* 好吧,我确实考虑过使用eAddEntry
来选择最后一个条目,但这太糟糕了,即使它会起作用,它也只是添加新项目和选择它之间的竞赛。
我该怎么办?