问题标签 [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 回答
230 浏览

haskell - reactive-banana-wx `sink` 不会生成启用 post-sink 处理的事件

我目前正在使用 reactive-banana 和 reactive-banana-wx 包重新设计一个遗留的 wxHaskell。然而,为了避免动态网络构建(我遇到了 MVar 上的线程块),我现在通过预先构建一组固定的 wxHaskell 小部件来模拟这一点,我根据需要设置了这些小部件的可见性。可见性由sink采用Behavior. 但是,wxHaskell 要求在所有这些小部件都通过 适当地修改sink之后,需要随后更改包含这些小部件的面板的布局。这意味着sink-ing 实际上应该是网络的一部分,因此它是一个可以触发并等待布局更改的事件。就目前而言,一个sinksink将您“带出”事件网络,操作完成后无法触发事件。我确实尝试过适应sink这样的事情:

然而,unsafePerformIO并没有被执行。如何实现所需的行为,即允许(wxHaskell)IO 通过Event?

0 投票
2 回答
1501 浏览

events - 与传统 FRP 框架相比,Netwire 中的事件处理

大多数 Haskell FRP 框架(如 AFRP、Yampa 和 Reactive-banana)在连续时变函数和离散函数之间有所区别。通常他们称它们为行为和事件。

一个例外是 Netwire,它使用抑制幺半群来模拟事件。这种方法的优缺点是什么?

特别是,我对 FRP 在机器人控制中的应用很感兴趣。例如,这篇论文http://haskell.cs.yale.edu/?post_type=publication&p=182展示了一种使用事件在 FRP 中对任务和 HSM 抽象进行编码的方法。这可以直接翻译成Netwire吗?

0 投票
1 回答
351 浏览

haskell - Haskell 无法从上下文中推断出 (t ~ t1) (Frameworks t)

我正在学习如何使用名为 Reactive Banana 的 Haskell FRP 库,这对 Haskell 来说也是相当新的。目前我正在创建一个将网络作为参数的函数,并在函数体中在编译网络并通过其事件循环之前进行一些初始化,但我遇到问题 Haskell 无法推断出我想要的内容做。

这是代码的简化版本

我得到的确切错误是这个。

搜索互联网使我相信 start 函数中的框架和 setupNetwork 函数中的框架之间的类型不被认为是同一类型。

反正有没有让类型匹配?

0 投票
1 回答
511 浏览

haskell - Reactive-Banana 中的动态事件切换

我目前正在开发一个使用反应香蕉和 SDL 的小游戏。由于目标主要是了解更多关于响应式香蕉和 FRP 的知识,因此我尝试使用动态切换来设置游戏对象的集合,但到目前为止还没有取得多大成功。

在 Bartab 示例中,我发现唯一使用事件切换的示例,最终触发在集合中创建新条目的事件是从事件网络外部获取的,而不是使用内部事件。我的问题是:这是唯一的方法还是只是这个例子的一个特例?

在反应香蕉中是否有更多动态事件切换的例子?

据我了解,我得到了一个 Moment t(Anytime Behavior a),使用 execute 创建一个 Event t(Anytime Behavior a),然后又用于更新携带集合的 Behavior。Moment t (Anytime Behavior a) 是在从触发事件创建的行为上使用 trimB 创建的。如果此触发事件源自事件网络,则不会编译并显示错误消息“无法推断 (t ~ t1)”。我不确定 ~ 到底是什么意思,但它显然会引发错误,因为事件网络的两个框架值 (t) 和这个新的 Moment 值不同。

所以,长话短说,我不明白反应香蕉中的事件切换是如何工作的,我不知道为什么。理论上应该相对简单。

编辑:

我只是尝试从示例中镜像 newEntry / eNewEntry,只是使用正常事件来创建新行为。这会在 spawnPos 中产生“无法推断 (t ~ s)”错误。

编辑2:

它可以工作,但现在在我使用执行创建事件的行上出现了同样的错误。“无法推断出 t ~ t1”

0 投票
1 回答
220 浏览

haskell - 反应香蕉中的动态事件切换导致严重泄漏

我不确定这种行为是预期的(即我误用了 Reactive.Banana.Switch)还是一个错误。

假设我有两个类似类型的输入行为,我想根据一个事件在它们之间切换。我写了这个函数:

这段代码似乎无关紧要;当嵌入到简单的 GUI 模型中时,它会进行类型检查、编译并给出所需的结果。(行为的两个文本输入字段,一个发出交替 True 和 False 事件的按钮,以及一个使用 绑定到组合行为的标签sink。)

然而,在多次触发事件后,很明显某处发生了灾难性的泄漏。应用程序开始花费越来越长的时间来对输入行为的变化和新事件做出反应。它也开始吞噬记忆。

这是带有 -hC 的堆配置文件:泄漏内存 我反复切换事件;两个最大的峰值可能是事件的第 20 次和第 21 次触发。

使用 trimB 感觉有点像挥手让类型相加;我不知道我是否正确使用它或以某种方式滥用它。

我的子问题是:

1) 我是在滥用 Reactive.Banana.Switch API,还是这是一个错误?如果我滥用 API,我做错了什么?

2)我应该在不使用动态事件切换的情况下这样做吗?Usingapply不会给出正确的行为,因为当底层行为发生变化时,结果事件不会触发。如果我打开事件的所有三个输入,我想我可以设置一个折叠,手动累积每个输入事件的最新值。这是正确的方法吗?

0 投票
1 回答
115 浏览

haskell - reactive-banana reactimate 检索小部件 textCtrl 值,如 textCtrlGetValue

我想检索小部件值。

在下面,按下按钮 b 检索 s_in 并在本机 wxhaskell 中打印它。

我喜欢在 reactive-banana 做同样的事情,但在下面,我得到“ff”而不是 s_in2 的 textCtrlGetValue

接收器在 s_in 之后会很好地更新 sin_2。但是下面的反应行没有让我得到我希望得到的 s_in/b_in 的 textCtrlGetValue 。我怎么才能得到它 ?

0 投票
0 回答
231 浏览

haskell - 模型和 GUI IO (Wx) 的分离状态:堆栈还是 FRP?

对于我的图表工具,我想保持核心模型的代码与 GUI 隔离。

在下面的示例中,“状态”是用 传递的vDiag,它是一个Tvar。这是 wx 中的设计决策。现在,对于我的图表工具,我希望将核心模型“存储”在一个fgl图表中(其中包含复杂类型),并且wx只给出一个视图;比如说在这个例子中,绘画时读取访问的点列表,以及单击、拖动等时要写入的一些功能......。我首先想到了一些 Monad 堆栈,但即使将 StateT 和来自 wx 的 IO 组合起来看起来也并不简单,因为 io 动作遍布在回调的代码中(点击、绘画等)。感觉就像在堆栈底部有 IO 不再适合了。

那么你如何传递一个状态,或者它不是要走的路?(我直觉这是经典。RFP 是这样开始的吗?)

(在代码中,当点击时绘制红色圆圈,点列表在 a 中传递Tvar vDiag。我在等效状态访问器所在的位置标记了“--fgl”。并设置了一个基本的 fgl 测试图访问器说明。我想提出一个状态)(我最初试图在没有 FRP 的情况下试一试 - 反应香蕉,以了解问题,但我想我可能已经成功了 ;-)

0 投票
1 回答
81 浏览

haskell - 具有相同初始值的事件和行为是否存在问题?

我对下面的代码有些不满意。随着我的发展bGameState,我会添加更多的事件。playerInputE(我想其他的)共享相同的初始值这一事实会Events导致问题吗?换句话说,我的初始设计是否足够完善?

此外,是否有替代使用changes?我认为我符合正确使用的标准,但不确定。

0 投票
0 回答
246 浏览

haskell - WxHaskell 和 DragAndDrop:如何创建自定义事件来触发 dropTargetOnData、dropTargetOnDrop、dropTargetOnEnter、dropTargetOnDragOver

WxHaskell 和 DragAndDrop

我想知道如何使用以下事件处理程序:dropTargetOnData、dropTargetOnDrop、dropTargetOnEnter、dropTargetOnDragOver….[1]

您能否检查一下我目前的看法是否正确:

  • 从 wx Widgets/wxPython [2] / [3] / [4] 看来,它们似乎需要用于管理 DragAndDrog 的非平凡示例。
  • 它们不能通过现有事件(如“拖动”等)来操作。
  • 我尝试创建自己的活动。但它没有被“激活”。[7]
  • 此外,从签名 [1] 来看,这些看起来像是在 DropTarget 上被激活的,这与 Reactive/Windows/Controls 上的其他事件不同。这是对的吗 ?
  • Heinrich 创建了自己的事件“onText”,(在反应香蕉中)但这是在控件上。[6]

  • 有人可以确认这些事件在 WxHaskell 中有效地为他们工作,并可能暗示如何做到这一点

    [1]: from Graphics.UI.WXCore.Events , line 1933 onwards

    Set an event handler that is called when the drop target can be filled with data. This function require to use 'dropTargetGetData' in your event handler to fill data. dropTargetOnData :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO () ...

    -- | Set an event handler for an drop command in a drop target. dropTargetOnDrop :: DropTarget a -> (Point -> IO Bool) -> IO ()

    -- | Set an event handler for an enter command in a drop target. dropTargetOnEnter :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO ()

    -- | Set an event handler for a drag over command in a drop target. dropTargetOnDragOver :: DropTarget a -> (Point -> DragResult -> IO DragResult) -> IO ()

    -- | Set an event handler for a leave command in a drop target. dropTargetOnLeave :: DropTarget a -> (IO ()) -> IO ()

[2]:http ://docs.wxwidgets.org/2.8/wx_wxdroptarget.html#wxdroptargetondrop

[3]:http ://wiki.wxpython.org/DragAndDrop

[4]: http: //www.blog.pythonlibrary.org/2012/06/20/wxpython-introduction-to-drag-and-drop/

[5]:http ://wewantarock.wordpress.com/2011/06/17/how-does-wxhaskell-event-handling-work-part-1/

[6]:https ://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana-wx/src/Reactive/Banana/WX.hs L 88

[7]: module Main where

0 投票
1 回答
406 浏览

haskell - 具有反应香蕉和 gtk2hs 的反应表

我写了一个小应用程序来跟踪我在电视剧中的进展。该应用程序是用 Haskell 编写的,带有功能响应式编程 (FRP) 和响应式香蕉

该应用程序可以:

  • 在表中添加/删除新电视剧
  • 更改系列的季节和剧集

应用截图

我在编写将新电视剧添加到表格并连接新事件的代码时遇到问题。此处的 CRUD 示例对我没有太大帮助,因为我有更多要求,然后只是从列表中选择一个元素。

如何以 FRP 方式编写类似于 CRUD 示例中的reactiveTable函数的函数reactiveListDisplay?网络编译后,如何为删除按钮和季节和剧集旋转按钮添加事件?

我想重构 insertIntoTable 方法以使用事件和行为,而不是使用简单的回调。

编辑:

我已经尝试了带有ListStore后端的 gtk TreeView 。在这种情况下,您不需要动态事件切换。我编写了下面的函数来获取插入、更改和删除事件的列表行为。它有效^^reactiveList

我愿意接受意见和建议。