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

haskell - 如何在 Gtk2Hs 中使用反应香蕉?

我正在尝试获得一些反应香蕉的经验,根据它的网站,它应该支持 GTK。我想知道是否有任何关于如何做到这一点的教程/介绍性材料?

在这里读到有一个 jaek 项目,但我更多的是寻找一个使用 gtk2hs(来自 hackage 的 gtk3)的反应性香蕉的最小示例,因为我之前没有使用 FRP 或反应性香蕉的经验。

此外,我多次尝试让 reactive-banana-wx 在 Windows/MinGW 上工作。尽管我最终能够安装 wxHaskell,但预先存在运行时错误(https://stackoverflow.com/questions/23367950/wxc-segfault-in-wxhaskell)。我想我无法让 wxHaskell 正常工作,除非我将所有内容降级到 2010 或更早版本,因为在那之后没有关于如何让 wxHaskell 在 Windows 上工作的说明,只有问题。

我今天尝试安装 Gtk2Hs。即使使用 gtk3,它也是轻而易举的事。这让我想知道这条路线上是否有适合初学者的好材料(即反应香蕉+ gtk2Hs)。

谢谢,

0 投票
2 回答
171 浏览

haskell - 在反应香蕉中找不到 AddHandler

我正在其教程中尝试反应香蕉的示例。当我尝试将示例加载到ghci中时,出现错误。

运行它ghci -v会在底部给出输出。我安装wx-2.8wxWidgets-0.13.1.3ubuntu 14.04 LTS。

当我查看我的 cabal 目录时,该AddHandler文件确实不存在:

有人可以告诉我出了什么问题,我该如何解决这个错误?

谢谢,

错误信息:

0 投票
1 回答
197 浏览

haskell - 反应香蕉 GLFW 事件寄存器示例

在一个相关的线程中,已经给出了一个准代码示例,也就是说,据说很容易修复:

到目前为止我无法修复它。有人可以提供一个注册关键事件的功能代码片段吗?

0 投票
1 回答
351 浏览

haskell - 在反应香蕉中处理当前时间

你如何处理反应香蕉中的当前时间?

理想情况下,我想要一个Behaviour我可以“轮询”以获取当前时间的东西。Behaviour但是,用s轮询s Event(通过<@等)给了我Behaviour来自previous Event的值,而不是当前值。(我意识到这是为了避免确实有用的循环定义。)

我发现fromPoll我认为会有所帮助。 Behaviour观察到的 sfromPoll不能依赖于它们自己,因此不能通过观察在this被触发之前Event而不是在前一次触发之后Event的行为来引入循环。

题外话

用更正式的术语来说,我建议Events 总是在时间t+发生,并且Behaviours总是在时间t-被观察到,即Events 观察在它们之前无限短时间发生的行为。Behaviour由和朋友生成的 s 的新值accumB总是从时间t+开始,因此无法被Events 观察到,这也发生在时间t+

在这个提议的语义下Behaviour,由创建的语义fromPoll将在每个处理之前更新Event。其他Behaviours 将在之后更新,因为它们是由accumB和朋友创建的。

我的用例

无论如何,这对我的主要问题来说是一个重要的题外话。我想知道是否有某种方法可以在反应香蕉中处理当前时间(而不是上一个时间) 。 Event例如,我的用例是跟踪实体发送的 ping,以及它们中的任何一个是否在特定时间间隔内未发送 ping 以发出警告事件的信号。

当然,我可以并且会非常频繁地触发事件,所以我的警告不会有很大的错误。然而,它们似乎并不精确。

处理这个问题的正确方法是什么?

0 投票
1 回答
124 浏览

haskell - 根据之前的更新动态更新 UI

我正在对用于 UI 的 FRP 的实际方面进行一些研究,并且一直在努力使用响应式香蕉来实现以下功能:根据选择框的值,呈现可变数量的列表框,这些列表框会显示一些结果。(我正在使用 WxHaskell。)

使用一堆准备好的列表框来实现这一点非常简单,这些列表框根据结果行为隐藏和显示,但这次我希望它根据需要创建和销毁列表框,每个列表框都链接到结果行为。

到目前为止,我有以下成分:

  • eParam绑定到选择框的事件
  • 用(and )bResults :: Behavior t [[String]]定义的行为,它包含所有结果(每个列表框的项目列表)eParamstepper
  • 一个更新函数updateResultControls :: [SingleListBox ()] -> [[String]] -> IO [SingleListBox ()],它根据结果销毁或构建列表框。请注意,返回类型在 IO 中。

查看BarTab示例,我尝试实现以下内容:

  • 列表框的行为bResultControls :: Behavior t [SingleListBox ()],定义为stepper [] eUpdateResultControls.
  • 执行 UI 更新的事件eUpdateResultControls :: Event t [SingleListBox ()]。此事件取决于行为bResultControlsbResults。但是,它还必须更新网络并运行 IO,所以我怀疑Moment并将execute参与其中。这就是我卡住的地方。

我最近的尝试是这样的:

但我收到以下类型错误:

我怀疑这将涉及修剪一些行为,或者我可能会以完全错误的方式进行处理。

0 投票
0 回答
88 浏览

haskell - 带谓词的动态切换

假设我有一个 monad M,一个函数*

和一个谓词

我想得到一个值*(在任何必要的单子中)

bar就是这样,foo n直到信号传达的状态满足pred,在该点bar切换到foo (n+1),然后重复。n从任意开始Int,比如 1。

我在学习 FRP 时玩得很开心,但是这个特殊的问题给我带来了麻烦。


*还要考虑替代的Behavior t情况Event t

0 投票
1 回答
118 浏览

haskell - 既是递归的,又依赖于其他行为的行为

我的网络如下所示:

ePhysics从计时器重复触发。
我在定义bPlayerPosition. 我的意图是它将从 开始(0,0),并且每当ePhysics被触发时,bPlayerPosition将使用bPlayerForce作为参数重新计算。

问题在于,为了指定我需要使用的初始值accumB/stepper但它们仅适用于事件,并且我无法从中获取力值,bPlayerForce因为只有行为才能获取其他行为的值(使用<*>)。

另一种方法是使用<*>,但我没有初始值,所以它变成了无意义的无限递归:

我有3个问题:

  1. 有没有办法从没有的行为中获得价值<*>?比如,在reactimateing 或映射事件时?从一开始,无法解决的问题就一直困扰着我。
  2. 会有更实用/frp 的方式来做物理吗?(一般来说和特定于问题的那些)
  3. 我该如何解决提出的问题?
0 投票
1 回答
11230 浏览

haskell - 推拉式和箭头式 FRP 有何根本不同?

我想在 Haskell 中学习 FRP,但决定使用哪个库有点困难。许多似乎是死的尝试,有些似乎已经复活(例如最近在 Yampa 上的活动)。

根据我的阅读,似乎有两种“类型”的 FRP:一侧是推拉式 FRP(如 Reactive-banana 和 Reflex 中),另一侧是箭头化 FRP(如 Yampa 中)。似乎在 Fran 和 FrTime 时代也曾经有过一些“经典 FRP”,但我没有发现这些最近的活动。

  • 这两种(或三种)真的是完全不同的 FRP 方法吗?

  • 其中一个是过时的理论,而另一个是“未来的东西”吗?

  • 还是它们必须并行发展,以满足不同的目的?

  • 我是否命名了每个类别中最突出的库,或者是否有其他选择需要考虑(Sodium、Netwire 等)?


我终于看了 J. Abrahamson 在评论中推荐的 [来自 Evan Czaplicki 的谈话](https://www.youtube.com/watch?v=Agu6jipKfYw)。这很有趣,并且确实帮助我澄清了一些事情。我强烈推荐给任何觉得这个问题很有趣的人。
0 投票
1 回答
676 浏览

haskell - FRP 框架和 IO

我刚刚一直在研究 Haskell 中的 FRP(主要是reactive-banana(推荐!)),我想知道这对他们来说是否常见,如果是响应式香蕉,那么在IOmonad 中操作而不是被限制为MonadIOrven的原因是什么更好,任何Monad(以便我可以提供自己的堆栈)?

在我看来,这是因为专注于 GUI 编程,你将它与一些现有的库集成在IO哪里?更改它以便我可以将它与自定义 monad 堆栈集成是否可行?

0 投票
3 回答
824 浏览

haskell - 为什么要在 FRP 中使用 Behavior

我正在学习反应香蕉。为了理解这个库,我决定实现一个虚拟应用程序,只要有人按下按钮,它就会增加一个计数器。

我使用的 UI 库是 Gtk,但这与解释无关。

这是我想出的非常简单的实现:

这只是将结果转储到 shell 中。我在阅读Heinrich Apfelmus的文章时提出了这个解决方案。请注意,在我的示例中,我没有使用单个Behavior.

在文章中有一个网络示例:

该示例显示 a将 astepper转换Event为 aBehavior并带回Eventusing changes。在上面的例子中,我们可以只使用Event它,我猜它不会有任何区别(除非我不理解某些东西)。

那么有人可以阐明何时使用Behavior以及为什么使用?Event我们应该尽快转换所有s 吗?

在我的小实验中,我看不到Behavior可以在哪里使用。

谢谢