问题标签 [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 - 如何在 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)。
谢谢,
haskell - 在反应香蕉中找不到 AddHandler
我正在其教程中尝试反应香蕉的示例。当我尝试将示例加载到ghci
中时,出现错误。
运行它ghci -v
会在底部给出输出。我安装wx-2.8
了wxWidgets-0.13.1.3
ubuntu 14.04 LTS。
当我查看我的 cabal 目录时,该AddHandler
文件确实不存在:
有人可以告诉我出了什么问题,我该如何解决这个错误?
谢谢,
错误信息:
haskell - 反应香蕉 GLFW 事件寄存器示例
在一个相关的线程中,已经给出了一个准代码示例,也就是说,据说很容易修复:
到目前为止我无法修复它。有人可以提供一个注册关键事件的功能代码片段吗?
haskell - 在反应香蕉中处理当前时间
你如何处理反应香蕉中的当前时间?
理想情况下,我想要一个Behaviour
我可以“轮询”以获取当前时间的东西。Behaviour
但是,用s轮询s Event
(通过<@
等)给了我Behaviour
来自previous Event
的值,而不是当前值。(我意识到这是为了避免确实有用的循环定义。)
我发现fromPoll
我认为会有所帮助。 Behaviour
观察到的 sfromPoll
不能依赖于它们自己,因此不能通过观察在this被触发之前Event
而不是在前一次触发之后Event
的行为来引入循环。
题外话
用更正式的术语来说,我建议Event
s 总是在时间t+发生,并且Behaviours
总是在时间t-被观察到,即Event
s 观察在它们之前无限短时间发生的行为。Behaviour
由和朋友生成的 s 的新值accumB
总是从时间t+开始,因此无法被Event
s 观察到,这也发生在时间t+。
在这个提议的语义下Behaviour
,由创建的语义fromPoll
将在每个处理之前更新Event
。其他Behaviour
s 将在之后更新,因为它们是由accumB
和朋友创建的。
我的用例
无论如何,这对我的主要问题来说是一个重要的题外话。我想知道是否有某种方法可以在反应香蕉中处理当前时间(而不是上一个时间) 。 Event
例如,我的用例是跟踪实体发送的 ping,以及它们中的任何一个是否在特定时间间隔内未发送 ping 以发出警告事件的信号。
当然,我可以并且会非常频繁地触发事件,所以我的警告不会有很大的错误。然而,它们似乎并不精确。
处理这个问题的正确方法是什么?
haskell - 根据之前的更新动态更新 UI
我正在对用于 UI 的 FRP 的实际方面进行一些研究,并且一直在努力使用响应式香蕉来实现以下功能:根据选择框的值,呈现可变数量的列表框,这些列表框会显示一些结果。(我正在使用 WxHaskell。)
使用一堆准备好的列表框来实现这一点非常简单,这些列表框根据结果行为隐藏和显示,但这次我希望它根据需要创建和销毁列表框,每个列表框都链接到结果行为。
到目前为止,我有以下成分:
eParam
绑定到选择框的事件- 用(and )
bResults :: Behavior t [[String]]
定义的行为,它包含所有结果(每个列表框的项目列表)eParam
stepper
- 一个更新函数
updateResultControls :: [SingleListBox ()] -> [[String]] -> IO [SingleListBox ()]
,它根据结果销毁或构建列表框。请注意,返回类型在 IO 中。
查看BarTab示例,我尝试实现以下内容:
- 列表框的行为
bResultControls :: Behavior t [SingleListBox ()]
,定义为stepper [] eUpdateResultControls
. - 执行 UI 更新的事件
eUpdateResultControls :: Event t [SingleListBox ()]
。此事件取决于行为bResultControls
和bResults
。但是,它还必须更新网络并运行 IO,所以我怀疑Moment
并将execute
参与其中。这就是我卡住的地方。
我最近的尝试是这样的:
但我收到以下类型错误:
我怀疑这将涉及修剪一些行为,或者我可能会以完全错误的方式进行处理。
haskell - 带谓词的动态切换
假设我有一个 monad M
,一个函数*
和一个谓词
我想得到一个值*(在任何必要的单子中)
bar
就是这样,foo n
直到信号传达的状态满足pred
,在该点bar
切换到foo (n+1)
,然后重复。n
从任意开始Int
,比如 1。
我在学习 FRP 时玩得很开心,但是这个特殊的问题给我带来了麻烦。
*还要考虑替代的Behavior t
情况Event t
haskell - 既是递归的,又依赖于其他行为的行为
我的网络如下所示:
ePhysics
从计时器重复触发。
我在定义bPlayerPosition
. 我的意图是它将从 开始(0,0)
,并且每当ePhysics
被触发时,bPlayerPosition
将使用bPlayerForce
作为参数重新计算。
问题在于,为了指定我需要使用的初始值accumB
/stepper
但它们仅适用于事件,并且我无法从中获取力值,bPlayerForce
因为只有行为才能获取其他行为的值(使用<*>
)。
另一种方法是使用<*>
,但我没有初始值,所以它变成了无意义的无限递归:
我有3个问题:
- 有没有办法从没有的行为中获得价值
<*>
?比如,在reactimate
ing 或映射事件时?从一开始,无法解决的问题就一直困扰着我。 - 会有更实用/frp 的方式来做物理吗?(一般来说和特定于问题的那些)
- 我该如何解决提出的问题?
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)。这很有趣,并且确实帮助我澄清了一些事情。我强烈推荐给任何觉得这个问题很有趣的人。
haskell - FRP 框架和 IO
我刚刚一直在研究 Haskell 中的 FRP(主要是reactive-banana
(推荐!)),我想知道这对他们来说是否常见,如果是响应式香蕉,那么在IO
monad 中操作而不是被限制为MonadIO
rven的原因是什么更好,任何Monad
(以便我可以提供自己的堆栈)?
在我看来,这是因为专注于 GUI 编程,你将它与一些现有的库集成在IO
哪里?更改它以便我可以将它与自定义 monad 堆栈集成是否可行?
haskell - 为什么要在 FRP 中使用 Behavior
我正在学习反应香蕉。为了理解这个库,我决定实现一个虚拟应用程序,只要有人按下按钮,它就会增加一个计数器。
我使用的 UI 库是 Gtk,但这与解释无关。
这是我想出的非常简单的实现:
这只是将结果转储到 shell 中。我在阅读Heinrich Apfelmus的文章时提出了这个解决方案。请注意,在我的示例中,我没有使用单个Behavior
.
在文章中有一个网络示例:
该示例显示 a将 astepper
转换Event
为 aBehavior
并带回Event
using changes
。在上面的例子中,我们可以只使用Event
它,我猜它不会有任何区别(除非我不理解某些东西)。
那么有人可以阐明何时使用Behavior
以及为什么使用?Event
我们应该尽快转换所有s 吗?
在我的小实验中,我看不到Behavior
可以在哪里使用。
谢谢