问题标签 [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 - 反应香蕉时间延迟
我已经搜索了reactive-banana的文档,但我找不到指定明确时间延迟的方法。比如说,我想将Event t a
它的所有出现转移到未来 1 秒;或获取从现在开始 1 秒后触发的事件(在 内Moment t
);或类似的东西。反应性香蕉中是否可以表示显式延迟?如果不是,用户如何实现,例如延迟一秒回显输入?
haskell - 反应式香蕉游戏的一般结构是什么样的?
一个简单的游戏,每次迭代都运行其逻辑并以命令式语言每秒在屏幕上绘制 60 次,它可能看起来像这样:
我只是不确定这如何转化为反应香蕉。
haskell - 推拉式FRP在实现游戏时有帮助吗?
在游戏的实现中,我一直在比较仅拉式 FRP(即 netwire)和推拉式 FRP(即反应式班纳纳)。一个比另一个有优势吗?我注意到的事情是:
- 推送事件可以轻松地从 GLFW 或 GLUT 获得鼠标点击/按键事件
- netwire 使用的带箭头的 FRP 的
IO
浮动要少得多,这总是更好。 - 看起来对鼠标移动之类的事情只有拉动响应可能会导致时间泄漏。
我还错过了什么?
编辑,以减少基于意见的内容:主要目标是尽可能表达/简洁,没有时间泄漏。
更新:我发现 Netwire 的一个大问题是似乎没有一种方便的方法来拥有多个帧速率,如“修复你的时间步长”一文中所述。
更新 2:我解决这个问题的方法是让我的游戏模拟线返回 a Float -> IO ()
,它采用 alpha 值,并使用该 alpha 插值的所有内容执行所有 GL 调用。理想情况下,我应该能够通过 an 将此“绘图函数”传递到另一个线程MVar
并在该线程中运行它。伙计,Haskell 很棒。
更新 3:在提出这个问题后的六个月里,我基于 Netwire 和“实体组件编程”的概念开发了一个简单的渲染引擎。在这个过程中,我实际上并没有发现使用 FRP 非常有帮助。在某些情况下,s的表现力Wire
实际上已成为一种障碍。问题集中在对象的“身份”上。当定义一个值时Wire
类型,它没有身份,即它可以在整个网络中多次重复使用,并且每次代表不同的物理事物。当您想要执行诸如碰撞检测之类的操作并且无法遍历场景图时,这是一个巨大的痛苦,因为如果不融合成一条不透明的线,它就无法存在。这个问题不会出现在“玩具”示例中,因为很容易准确地指定哪些对象的哪些属性与哪些其他对象以何种方式交互。我相信这是任何一种 FRP 的问题。
如果某个 Haskell 向导能证明我在这方面是错误的,那就太棒了,但我真的没有办法绕过它。如果解释不是很好,我也很抱歉,但如果不亲自尝试,它并不是那么容易理解。
haskell - 如何让玩家跳跃(设置它的 y 速度)?
鉴于以下情况:
当跳跃事件到达时,如何让玩家跳跃(可能通过设置它的 y 速度)?
haskell - 有可能吗?:行为 t [行为 ta] -> 行为 t [a]
有没有办法让Behavior t [a]
[a] 在时间 t 的值是Behavior t [Behavior t a]
在时间 t 包含在 a 中的值?即,具有以下类型的函数:
如果这是不可能的,那是因为逻辑上的不可能性还是反应香蕉的限制?
haskell - FRP 中的“现在行为”
在之前的 SO 问题(Is it possible?: Behavior t [Behavior ta] -> Behavior t [a])中,我们正在分析 a 的存在Behavior
join
(使用reactive-banana
术语)。
在语义模型中实现如下
虽然直接实现这将是不幸的,因为我们可以产生一个Behavior
Monad
using const
and behaviorNow
,如果以及如何behaviorNow
违反 FRP 的语义?
我很想听到使用任何其他 FRP 系统的术语以及有意义的比较的答案。
haskell - 在 Haskell 中使用响应式香蕉进行音频合成
我正在尝试使用 reactive-banana 并想创建一个简单的合成器。有很多 GUI 示例,但我无法将它们应用于音频。由于音频 API 有回调说“给我 n 个音频样本”,我想我应该触发一个事件,每个回调(使用 newAddHandler 返回的 snd 部分)包含要生成的样本数量,应该写入的指针, 和时间信息来协调 MIDI 事件。传递给 reactimate 的 IO 操作会将样本写入指针。MIDI 事件将类似地从另一个回调中触发,并且还包含时间信息。
然而,这就是我卡住的地方。我猜音频信号应该是一种行为,但是我如何在适当的时间内“运行”一种行为来获取样本?正确的数量当然取决于两个音频回调之间可能发生的 MIDI 事件。
haskell - FRP - 事件流和信号 - 仅使用信号会丢失什么?
在经典 FRP 的最新实现中,例如反应香蕉,有事件流和信号,它们是阶跃函数(反应香蕉称它们为行为,但它们仍然是阶跃函数)。我注意到 Elm 只使用信号,并没有区分信号和事件流。此外,reactive-banana 允许从事件流到信号(已编辑:虽然它不被认为是好的做法,但可以使用 reactimate 对行为采取行动),这意味着理论上我们可以应用所有事件流通过首先将信号转换为事件流,应用然后再次转换来对信号/行为进行组合器。所以,考虑到它通常更容易使用和学习一种抽象,分离信号和事件流有什么好处?仅使用信号并将所有事件流组合器转换为对信号进行操作是否会丢失任何东西?
编辑:讨论非常有趣。我自己从讨论中得出的主要结论是,相互递归定义(反馈)和输出依赖于两个输入(一个行为和一个事件源)都需要行为/事件源,但只有在一个输入时才会导致动作其中有变化 (<@>)。
haskell - 为什么一些三便士-gui FRP 组合器在 MonadIO monad 上运行而不是纯粹的?
首先声明一下,由于我对 Haskell 的了解不够深入,我可能完全误解了threepenny-gui 的工作方式,所以请对我的断言持保留态度。:-)
在我看来,一些组合器并不纯粹,例如
步进器是否必须在某种类型的 IO monad 上运行(因此它不是纯的),或者我在这里误解了一些东西?第二个问题,如果这些组合子确实不纯,那是为什么?对我来说,这使得构建事件图的代码不如响应式香蕉那么好,因为必须使用 IO monad 而不是纯粹的普通函数。代码似乎变得比反应香蕉更复杂。
更可怕的是,valueChange 从类型上看似乎是纯的
但它实际上是在内部使用 unsafeMapIO ,所以它实际上是在做隐藏的 IO 吗?再说一次,我可能会误解一些东西,但这不是 Haskell 中最高的罪过吗?这也令人困惑,我无法从类型中看出回调注册是如何发生的……这在我之前在 Haskell 中从未发生过……这样做是为了让用户不必处理 Frameworks monad 吗?
haskell - Haskell(反应香蕉)中的 Paths.getDataFile 在哪里?
我正在使用涉及动画的示例之一测试反应香蕉 0.8.0.0
Paths
我收到有关未找到模块的错误。问题线是:
错误是:
任何人都知道从哪里获得或如何安装此模块?(我在 Windows XP 64 上使用来自 mingw.org 的 Haskell Platform 2013.2 和 mingw32)。