问题标签 [frp]

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 回答
159 浏览

haskell - 功能性香蕉旅行者 - 将 Behavior t GameState 放在一起

问题是我不知道如何创建类型的行为Behavior t GameState

我有更多的代码,但我只是想展示我认为有必要谈论这个问题的内容。让我知道是否有空白要填写。这就是我所拥有的:

和活动网络

我相信 bGameState 需要使用 eCommandChange,但我遇到了类型问题

这让我相信我需要转换eInput :: Event t PlayerCommand成 a eGameState :: Event t GameState,我可以用它stepper来制作Behavior t GameState

所以,我的问题是,我的思路正确吗?如果没有,我可以重新定向吗?如果是这样,eGameState :: Event t GameState会是什么样子?

针对下面的回复。当我accumB最初考虑时,我看到了一个类型错误。当我尝试你的建议时发生了什么。

产生错误

不知道该怎么做。我会看看你的例子,看看答案是否清楚。感谢您指出accumB是正确的方法,因为我专注于stepper

我越研究建议的代码,我就越对类型错误感到困惑。

0 投票
1 回答
147 浏览

haskell - 功能反应香蕉型混淆

Heinrich Apfelmus慷慨地附和了这个问题。我曾考虑将accumB其用作解决方案,但认为会有类型错误。无论如何尝试了他的建议后,我确​​实收到了一个类型错误。

所以我研究了(<$),并搞砸了部分应用程序。看了他建议的例子。我这样做的次数越多,我就越认为上面的代码应该可以工作,但我对它为什么不工作感到困惑。

这是我认为应该发生的事情:

因为(<$)是类型(<$) :: a -> f b -> f a

并且 updateGS 是类型updateGS :: PlayerCommand -> GameState -> GameState

并且eInput是类型Event t PlayerCommand

那么不应该updateGS <$ eInput屈服

Event t (GameState -> GameState)?

我的推理在某个地方有缺陷,有人可以指出哪里吗?

更新:当我尝试使用时,(<$>)我收到以下错误

大纲.hs:158:21:

供参考,这是整个功能

0 投票
1 回答
167 浏览

haskell - 如何让 netwire 网络在一组离散的瞬间上模拟执行?

我一直在研究使用 netwire,但看不到如何通过一系列不依赖于实际时间的电线来泵送瞬间。也就是说,有什么方法可以获取 type 的线和 typeWire e m a b的变量[(Time, a)],然后取回 type 的东西[b]吗?示例中的所有内容似乎都旨在让实时时钟生成瞬间。

0 投票
1 回答
395 浏览

user-interface - 使用 reactive-banana 处理相互递归的 GUI 小部件

我正在寻找一个库来在 GLFW 和 OpenGL 之上编写一个 GUI。我这样做是因为我对常见的 UI 库绑定感到不满意,我觉得这些绑定过于必要,而且我还希望严格控制我的 UI 的外观和感觉。我想要一种定义 UI 的声明性方法。我正在试验反应香蕉(和暂时反应香蕉wx),看看它是否满足我的需求。我在定义递归小部件时遇到问题。这是我最简单的测试用例:

  • 显示计数器的文本小部件。
  • 增加计数器的按钮小部件。
  • 当计数器为 0 时处于非活动状态(因此它变灰并且根本不响应输入)的按钮小部件,否则处于活动状态并将计数器重置为 0。

第一个和第三个小部件具有递归关系。第一个小部件直观地是从两个按钮提供的事件之一stepperunion但是,重置按钮是fmap计数器的一个,然后事件流依赖于重置按钮!什么是要做?

除了这个问题之外,我还担心事件处理:由于我想在我的代码中处理设备输入和输入焦点,而不是依赖于框架,因此我看到以可扩展方式正确调度事件的困难。理想情况下,我会定义一个data封装小部件的层次结构的方法,一种在元素之间安装事件回调的方法,然后编写一个遍历该数据结构的函数,以定义设备输入处理和图形输出。我不确定如何获取事件流并将其拆分,因为可以合并事件流。

0 投票
2 回答
399 浏览

haskell - 将 Netwire 网络连接到 OpenGL/GLUT 回调

作为实验,我设置了一组模拟齿轮连接到电机并使用 OpenGL/GLUT 渲染它们。目前,Wire 网络的唯一输入是Time. 我想用键盘来控制改变电机的速度。我还想将物理时间步从帧速率中分离出来,如修复你的时间步中所述!.

这意味着我需要使用三种不同类型的输入从三个不同的 GLUT 回调(、、和)keyboardMouseCallback运行idleCallbackWire网络。displayCallback我不清楚如何将 Netwire 与 GLUT 回调集成。

0 投票
0 回答
146 浏览

user-interface - wxHaskell 和 Reactive-Banana staticText 在文本更改时不更新大小

我正在尝试构建一个简单的 UI 作为学习 wxHaskell 和 Reactive Banana 的练习,但我在尝试解决一个看似简单的问题时遇到了困难。具体来说,我想在标签的文本更新时调整窗口大小以适应标签,使其始终适合文本。我尝试使用 来完成此操作windowReLayoutMinimal,但这出乎意料地导致窗口在文本溢出时无法调整大小,并且在手动调整大小时窗口在其原始大小和新大小之间闪烁(即用句柄拉伸它角落)。据我所知,StaticText当文本更改时,项目的大小无法更新。有没有办法强制项目重新计算其最小尺寸?我的代码如下所示:

0 投票
0 回答
746 浏览

qt - Scala.React 与 Qt 信号和插槽

随着 Scala.React 的兴起,我想知道当使用 Qt 作为 Scala 程序的 GUI 框架时,Qt 的 Signals & Slots 机制是否会过时。这两种方法中的一种如何在以下每个类别中表现出色?

  • 易于编码,关于简洁和清晰
  • 表现力:是否有任何技术提供另一种技术不提供的可能性(例如 WPF 的依赖属性强制机制)?
  • 编译时类型安全,例如使用 QtScript 定义信号和插槽时
  • 性能 - 但它在 GUI 中真的很重要吗?

假设 Scala.React 已经处于完成状态并且有据可查:你什么时候更喜欢一种方法而不是另一种方法?

0 投票
2 回答
1923 浏览

haskell - FRP 是实现大多数“事件驱动”事物的正确方法吗?

在我对 Haskell 的第一印象中,它是一种可以非常出色地处理“执行然后结果”事情的语言。但我找不到如何实现“事件驱动”的东西,比如游戏或 HTTP/FTP/TCPSocket 服务器。

这个问题在我阅读了一些关于 FRP 的论文后得到了回答,包括 Yampa 和它创建的 FPS 游戏(Frag)。看起来 FRP 是一个很好的模型来实现像 3D 游戏这样的“重”事件驱动的东西,但是像 HTTP 服务器或普通桌面 GUI 程序这样的轻微事件驱动的应用程序呢?如果我使用 FRP 来实现所有这些东西,会出现什么缺点?

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 回答
1807 浏览

functional-programming - How do you dynamically create inputs in Elm?

I want to create a button which, when pressed, adds a new input (or textarea) to the form.