问题标签 [discriminated-union]

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 投票
3 回答
459 浏览

f# - 通过函数调用区分联合模式匹配

我的问题是受这个启发的:link

这是一个代码:

它有效,但有一个警告: 警告

说得通; 我没有Y的对手。

但是如果我添加一行

然后我得到一个错误:

错误

有没有一种很好的方法来修复它并且仍然在函数参数中使用模式匹配?如果不是,那他们为什么要创建这种奇怪的语法,总是会导致警告?

0 投票
0 回答
361 浏览

f# - 您如何提供来自 F# 类型提供程序的有区别的联合

是否可以从 F# 类型提供程序发出可区分的联合类型?如果是这样,是否有任何示例代码可用于这样做?

0 投票
1 回答
101 浏览

f# - F# 树拼图 - 未找到值或构造函数“TreeNode”

这是一个初学者问题,因为我仍在弄清楚 F# 编译器错误的含义以及如何修复它们。

我有以下 F# 代码 - 不明白为什么它不起作用。它基于此处找到的解决方案:F#: Recursive collect and filter over N-ary Tree

我得到的错误在TreeNode (1,[TreeNode(2,[])]) 下。我不明白为什么这会导致问题,当嵌套的 TreeNode 使用正确显示类型并且没有任何构造函数问题时,我也可以将此类型用作方法参数。

希望有人可以对此有所了解,因为我缺少一些重要的见解。

0 投票
1 回答
214 浏览

f# - 如何从记录成员中使用 F# 可区分联合的成员

我正在尝试将受歧视的工会作为成员进行记录,但是在制作“API”记录后,我只能访问工会而不是我放入其中的内容....

所以当我制作我的api时......

我希望 foo.Default 给我我的 DefaultExpr 使用

在阅读了一些帖子之后,我想我必须回去做一些模式匹配,这会破坏这里的整个目的......

那么如何让我的 DefaultExpr 退出 API 记录呢?

0 投票
1 回答
840 浏览

f# - f# 中可区分联合的内置比较

在回答这个问题compare时,我发现了受歧视工会的以下行为。

我对此感到惊讶。

我可以依靠compare测量这样的构造函数之间的“距离”吗?

规范(第 154 页)关于生成的compareTo

如果 T 是联合类型,则首先在联合案例的索引上为两个值调用 Microsoft.FSharp.Core.Operators.compare,然后在每个对应的 x 和 y 字段对上为联合案例携带的数据调用。返回第一个非零结果。

从那以后,我希望comparetypeT总是给出一个,-1,0,1因为这就是compare数字类型的行为方式。(正确的?)

0 投票
2 回答
360 浏览

f# - 简化嵌套模式匹配 F#

我正在用 F# 编写一个简单的表达式解析器,对于每个运算符,我只想支持一定数量的操作数(例如,两个用于 Modulo,三个用于 If)。这是我所拥有的:

我想摆脱或简化内部列表匹配。实现这一目标的最佳方法是什么?我应该使用多个警卫吗?

0 投票
1 回答
168 浏览

recursion - 递归判别联合和映射

我需要一种树和一张地图,所以我这样做:

但这让我想知道:

  1. map成员是样板。在 Haskell 中,GHC 将为fmap我实现 ( ... deriving (Functor))。我知道 F# 没有类型类,但有没有其他方法可以避免我自己在 F# 中编写地图?
  2. 我能以某种方式避开这条线let (G gs) = g吗?
  3. 这整个结构在某种程度上是非惯用的吗?这对我来说看起来很奇怪,但也许这只是因为将成员放在 sum 类型上对我来说是新的。
0 投票
5 回答
2055 浏览

f# - 是否可以将有区别的联合标签作为参数传递?

是否可以将已区分联合标记的类型传递给另一个函数,以便它可以将其用于模式匹配?

我的意思的非工作示例:

0 投票
1 回答
280 浏览

f# - 匹配可区分联合时的类型通配符

在以下真实世界示例中,我进行了匹配:

有没有办法创造更有效的搭配,这样我就不需要检查每个衣箱了?像这样的东西:

当然,这不是正确的语法。但是我怎样才能达到这样的效果呢?

0 投票
1 回答
730 浏览

static - 有区别的联合方法看不到它的静态成员

这个问题似乎很愚蠢,但我真的不明白。

错误是

原因是 f# 出于某种原因认为那Failure是类型Microsoft.FSharp.Core.Operations.Failure

当我尝试写作时

我明白了

当我重命名Failure为 examplexFailure时,它​​可以工作。但我真的不想重命名它。我可以以某种方式避免重命名并使用静态方法吗?