问题标签 [elm]

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

elm - 找不到变量 Text.Color

尝试从 Elm 教程编译 Pong 时出现错误“找不到变量 Text.color”

该错误是指在我尝试设置 Text.color 的位置提供的第二行。提前感谢您提供的任何帮助。

0 投票
1 回答
410 浏览

functional-programming - 榆树初学者:尝试写二十一点

我正在对 Elm 进行独立研究,我觉得我正在重新学习编程!作为一个学习语言的项目,我试图让一个简单的二十一点开始并运行,但一旦我开始,我意识到我仍然没有掌握多少。我已经从牌组中抽牌并将它们添加到列表中:

我的问题主要是关于如何继续。查看已完成的 Elm 项目会有所帮助,但作为初学者,我很难解析其中的许多项目。任何方向都有帮助!

  1. 我遇到的第一个问题是试图弄清楚如何在卡片被抽出后从牌堆中移除,使用类似dropCard deck card = filter (\card /= nextCard) deck从列表中过滤掉抽出的卡片。但我对 Elm 的理解是,每次信号变化时,程序都会重新评估,这意味着每次抽牌时都会重新创建完整的牌组。我也需要foldp原来的甲板吗?

  2. 在函数式编程中从一个列表中删除一个元素并将其添加到另一个列表中的正确方法是什么?函数组合,例如toHand . dropCard card?

  3. 为了添加卡面以确定输赢,我不确定如何从列表中获取整数值。我试着做fst (head deck),但我得到了类型错误,可能是因为甲板本身就是某种信号。有什么我没看到的吗?

也就是说,到目前为止,我真的很喜欢 Elm!

0 投票
1 回答
723 浏览

node.js - elm-repl 找不到 nodejs

按照此页面上的说明,我已运行:

不幸的是,当我运行时,elm-repl我发现它不知道 nodejs 在哪里:

我怎样才能指出elm-repl正确的方向。到目前为止,其他 3 个程序运行良好。

0 投票
1 回答
227 浏览

haskell - 在Elm中,当信号下的value有list等复合类型时,如何高效地更新一个元素

我对 Elm 比较陌生,并且被 Elm 处理 GUI 的方式深深吸引。但是经过深思熟虑后,我发现很难有效地仅更新列表或手指树中的一个元素(就像 Haskell 中的手指树,如果它已经存在于 Elm 的库中),它位于 Signal 下,并且它的大小也有所不同与时间抗衡。

具体来说,要表达一个动态的手指树,我们必须写

Signal [ {-手指树的元素类型-} ]

但是如果我们想有效地更新手指树的一个元素,我们必须写

Signal [ Signal {-核心数据类型-} ]

但是在 Elm 中 Signal 不是 Monad,那么如何将两层 Signals 扁平化为一层呢?

评论 1:我不详细了解 Elm 在这种情况下的行为。重新处理整个手指树只是我的猜测。

注释 2:例如,假设我们有一个信号值,标记为s,类型为Signal (fingerTree Int),以及以下函数,标记为f,其输入为s,例如,lift (fmap (+1))其类型为Signal (fingerTree Int) -> Signal (fingerTree Int)。如果s只有一个元素发生了变化,函数f必须对s. 显然,这是在浪费时间,我不确定 Elm 是否足够聪明,可以检测到不可变性。

0 投票
1 回答
520 浏览

elm - foldp 并在 Elm 中附加列表会导致堆栈溢出

我正在尝试用 Elm 制作交互式图表。我最初的方法是附加一个带有信号值的状态列表,并从该列表中绘制一条线。但是,我无法使其正常工作,因为在 foldp 中附加一个列表会给我带来堆栈溢出错误(请参阅代码)。

这是预期的行为吗?有人会建议一种更好的方法来管理作为价值列表的状态吗?

0 投票
1 回答
193 浏览

signals - Elm 信号和类型注释

来自 Elm 新手但长期使用 Haskeller,快速查询。

目的:有一张地图,上面有城镇的指定位置,我想检查用户点击是否靠近城镇,并识别出那个城镇。

所以,我像往常一样收集信号:

这给了我一个元组,我想把它变成一个 Int (表示最近城镇的编号)。城镇被指定为

这样做的功能是:

现在,我需要将此函数应用于我的 clickPositionsSignal。

环顾各种示例,我修改了一些代码以......

....这行得通。我得到最近城镇的号码。

但这是无可救药的麻烦和重复。问题是为什么我不能简单地写:

那条线引发了多个类型错误,我还没有足够的经验来解释

0 投票
2 回答
91 浏览

frp - 两个连续的 HTTP 请求

对不起新手的问题(和我的英语):)

我尝试编写以下函数:

  • 该函数从URL1下载内容(作为参数接收)
  • 该函数解析此内容并提取URL2
  • 该函数从URL2下载内容
  • URL2的内容是这个函数的结果
  • 如果发生错误,此函数应返回 Nothing

我知道如何执行 HTTP 请求。我有一个函数来解析来自URL1的请求。但我不知道如何:

  • 使用提取的URL2执行新请求
  • 如果未提取URL2 (或URL1中发生错误) ,则忽略第二个请求
0 投票
1 回答
1037 浏览

javascript - JavaScript 中的函数式反应式编程是否会导致更大的侦听器引用问题?

在 JavaScript 中,观察者模式经常被使用。它有一个棘手的问题,那就是主题保留观察者的参考。他们需要清理。对于常规应用程序,我使用以下经验法则:

  • 如果对象的寿命短于(或等于)观察者,我可以这样做subject.on('event', ...)
  • 如果主题的寿命比观察者长,我需要使用observer.listenTo(subject, 'event', ...)

在第二种情况下,listenTo它知道观察者的生命周期,它会在观察者死亡时自动移除监听者。

在现代 SPA(单页应用程序)风格中,在任何时候只有部分应用程序处于活动状态,这变得非常重要。如果你将它与 Web 套接字结合起来,它是事件流的完美候选者,并且很可能长期存在,这变得更加重要。

使用 FRP,具有表示随时间变化的值的事件流之类的东西,我(不知道)创建了很多侦听器。每个filter,mapflatMap创建一个新的流,该流与前一个流绑定(可能使用侦听器)。

在我看来,确定如何以及何时需要删除这些侦听器似乎非常棘手。我无法想象我是第一个考虑这个问题的人,但我在互联网上找不到太多关于这个问题的信息。

我见过一些其他语言的框架使用弱引用。JavaScript 没有弱引用的概念(WeakMap 在这里不可用)。即使有,这似乎也是一个坏主意,因为不清楚何时进行垃圾收集。

  • 这在当前框架中是如何解决的?
  • 框架是否与对象的生命周期相关联?如果是:如何?
0 投票
1 回答
629 浏览

elm - Elm 中的多个输入?

在 Elm 中是否可以使用一个事件处理程序触发多个输入句柄?例如,假设我有以下内容:

在这种情况下,单击 Go 按钮会将值发送到go输入。我想要的是在同一个点击事件(比如go2输入)上向不同的输入发送不同的值。

有没有办法说,组合输入或让一个输入扇出多个信号?

0 投票
1 回答
391 浏览

haskell - 如何在 Haskell 中进行波浪号扩展和 $PATH 搜索?

我正在尝试运行用 Haskell 编写的 elm-reactor 项目。它失败了,因为它试图elm像这样执行命令:

我的 elm 可执行文件位于 ~/.cabal/bin 中,它位于我的 PATH 中。

System.Process.proc命令在 $PATH 中搜索其命令参数,但它不执行波浪号 (~) 扩展,因此它找不到 elm。

System.Process.shell有相反的问题。它会进行波浪扩展,但显然不会搜索 $PATH。

从 System.Process 命令的源代码来看,看起来大多数事情都依赖于对“runInteractiveProcess”的外部 ccall,我假设它正在执行任何 $PATH 搜索。我不知道 runInteractiveProcess 的来源在哪里,而我的 C 语言已经生锈了大约 15 年。

我可以通过以下方式解决此问题

a) 将完全扩展的 cabal/bin 路径添加到我的 PATH 或

b) 符号链接elm到其在 cabal/bin 中的位置。

但是,我想为 elm 项目提供一个建议的修复,以节省未来的采用者我所经历的麻烦。有没有我没试过的System.Process电话,他们应该在这里打?还是他们应该使用不同的方法?我想在最坏的情况下他们可以getEnv为 PATH 和 HOME,并在调用 proc 之前使用它来实现他们自己的文件搜索——但这会破坏跨平台兼容性。还有其他建议吗?