问题标签 [yampa]

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 回答
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 投票
0 回答
125 浏览

haskell - 使用事件启动信号功能。Haskell - Euterpea

我正在使用 Euterpea 开发 FRP 应用程序,但在理解如何做这件事方面遇到了重大问题。

我有自己的信号功能,我想在特定事件发生时触发。现在我的 SigFun 刚刚从程序开始运行。

假设我有一个函数可以在图表上显示信号的傅立叶变换,并且效果很好:(字符串 1 是负责生成吉他弦波形的函数。)

我在 toFFT 函数中尝试了 if-then-else 表达式:

当 if-flag 为 True 时,一切都正确显示并且程序资源正常。当标志为假时。FFT 是平坦的(没关系),但程序开始消耗大量内存: 内存图

我知道在 Yampa 中有一些称为开关的功能,但我在 Euterpea 中找不到它们。

是否有可能以我认为的方式“触发”信号功能?我读了一些关于 ArrowChoice 的文章,但我不清楚它有什么帮助。

我觉得有一些我不知道的基本东西。

0 投票
1 回答
102 浏览

haskell - 在 Yampa 程序中获取“输入 '<-' 上的解析错误”

我一直在为我正在写的一款马里奥之类的游戏编写主要的 SF。这是不解析的代码:

这是解析和执行正常的代码:

请注意,我在同一个代码块中保留了两个版本并带有注释,以使差异更加明显。

原则上,我想创建一个带有小延迟的负反馈循环,这样我就可以传递转换后的游戏而不必切换功能。输出到这样的“绘制”SF:

在第一个版本中,我尝试使用中间名称 gs(游戏状态)和 dgs(延迟游戏状态)。错误在以 dgs 开头的行上发出信号。

在适合我的第二个版本中,我必须将整个 SF 写在一行中。

我想使用代码的第一个版本,因为我需要通过连接暗示负反馈循环的附加 SF 来扩展功能。

我一直在用箭头“do”表示法寻找关于 rec 的帮助,我总是找到强调正确代码缩进的相同示例。但我用 Sublime 缩进,间距对我来说很好。还有其他方法吗?括号,大括号?任何事物?

0 投票
0 回答
108 浏览

haskell - 我已经安装了 Yampa,但我未能导入 FRP.Yampa (Mac OS Catalina)

我最近阅读了 FRP 并开始对 Yampa 感兴趣。因为我已经安装过了,这里我只是检查一下它的安装情况。当我按照指示

第三步的结果是:

所以我添加 --lib 并得到:

然后我转向Vscode并写了一行:

我得到的是:

我没有放弃,使用“ghc -v Yampa”搜索包:

显然上面的最后一行是Yampa,但接下来是:

我一直在尝试解决这个问题,但似乎没有与我的情况相关的问题。所以我真的需要你的帮助。谢谢!

-------------------------------------------------- ------update_2020_05_03------------------------------------------- -----

该文件是直接创建的(不使用“stack new”)。这意味着,我只需创建一个文本文件,在 VScode 中的文件夹“haskell_code”中输入一行“import FRP.Yampa”并将其名称更改为 helloworld.hs。

但是,如果我使用“stack new mystic”创建一个名为 mystic 的项目。并转到它的 main.hs。我仍然找不到 FRP.Yampa。这次我运行它时的错误消息有点不同:

因此,我修改了 mystic.cabal 文件,将 Yampa 添加到它的 build-depends 中(我没有使用 ':set -package Yampa' 因为每次我都必须输入这些东西)

我得到以下信息:

我采纳了它的建议,将这一行添加到 stack.yaml 的 extra-deps

有用。我还尝试了其他一些软件包。如果我创建一个 .hs 文件,我会失败。如果我创建一个项目并修改它的 .cabal 和 .yaml,它就可以工作。我想这可能与环境有关。这些包已下载但隐藏。

所以我的问题是:是否有任何解决方法可以让单个 .hs 文件(显然它既没有 .cabal 也没有 .yaml)也能看到包?

0 投票
1 回答
35 浏览

haskell - 用Yampa的公共API定义像“积分”这样的信号函数

我正在尝试掌握 Yampa,但是从高级信号函数的定义来看,integral对于我来说,如何使用 Yampa 导出的带有惯用 Haskell 的组合器自己定义这样的信号函数对我来说并不明显(我不在乎目前的表现)。我的目标是学习如何编写自己的组合器来进行去抖动、缓冲、分组等。

integral函数使用未导出的构造函数SFSF'. 如何仅使用其他导出的组合器编写它,可能使用带有开关和箭头符号的更惯用的 Yampa 样式?

0 投票
1 回答
83 浏览

haskell - N-body with Yampa FRP, haskell

我正在尝试制作一个 n 体求解器(一堆相互引力吸引的物体)。问题是它看起来像gravity1函数没有反馈返回的对象,导致对象的线性运动:

代码如下所示:

运行代码,有我在控制台中读取的输出:

基本上这些值都是相同的(NaN 是由于对自身计算的对象,我应该解决这个问题,但这不是这里的问题),看起来gravity1 函数没有反馈返回对象,尽管返回值是:

结果是对象的线性运动,因为 acc 似乎是一个常数。

我在这里的期望是,在gravity1 :: ([Object], Object) -> SF () (Object)更新并返回对象之后,updateObjects' objs = parB . fmap (updateObject1 objs ) $ objsandupdateObject1 objs0 obj0 = ... returnA -< obj应该导致所有对象都被更新,并且下一个迭代周期应该gravity1 :: ([Object], Object) -> SF () (Object)为对象提供一组更新的对象,以便acc每一帧的值都不同......

我是否误解了这里应该如何运作的逻辑?

0 投票
1 回答
47 浏览

haskell - 如何使用 Yampa 让随机的时间过去

我正在尝试使用 Yampa 编写一个简单的 FRP 示例,而不是等待 2 秒(如这里:https ://wiki.haskell.org/Yampa/reactimate )将在一定范围内等待随机时间。我尝试了多种不同的方法来以某种方式将 randomRIO 函数放入信号函数中,但无法真正掌握我应该做什么。我的意图是像这样替换 twoSecondsPassed 函数:

但这似乎并没有因为类型不匹配而起作用。编译器输出:

任何指向正确方向的指针都将不胜感激,因为我对 Yampa 很陌生,似乎找不到合适的文档来帮助我。

0 投票
1 回答
51 浏览

haskell - 有没有办法使用reactimate在Yampa的getLine中创建一个信号函数

我正在尝试编写一个简单的基于命令行的反射游戏,它会提示用户在随机时间后按回车键,然后输出反应时间。我正在使用基于此示例的 reactimate:https ://wiki.haskell.org/Yampa/reactimate 我的代码按照我的意图运行得非常好:

但是对于我在代码中标记的按回车部分,它根本没有真正使用 FRP。由于程序只是等待 getLine 终止,然后立即结束反应循环。所以它几乎只是使用 IO Monad 而不是 FRP。有没有办法重构信号函数enterPressed,使其以“FRPish”的方式工作?或者在使用reactimate时这根本不可能?