问题标签 [algebraic-data-types]
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.
generics - Haskell 中的泛型类型转换
我正在尝试编写一个带有常规函数的箭头转换器,并将它们转换为抽象值的计算。如果我们有一个“源”箭头,
那么目标是让f处理提升的 [原文如此?] 抽象值类型,在这个例子中
然而,为了成功地实现这个箭头,需要提升一些类型,以便在任意深度拥有具有一些具体值和一些抽象值的异构数据结构。我最终做的是为常规的 haskell 构造函数添加特殊类型,例如,如果
然后我为元组构造函数 (,) 添加一个抽象表示,
并且g的代码被提升到 [展开一点],
AVEither 也需要这样做。这最终会成为很多案例。有没有一个很好的方法来解决这个问题?
我是 Haskell 新手,所以请给我发参考资料或半详细的解释;可能我读过的最接近的东西是 SYBR 论文(废弃你的样板革命)第 1-3 节。
非常非常感谢你!
haskell - Haskell - 双向类实例类型含义或 GADT 存在类型限定?
我有一个定义为(缩写)的 GADT,
编译器正确地抱怨它不能为 R 派生 Show。在这种情况下,我们知道 (Either ab) 属于 Show 类,但如果 b 属于 Show 类,我们不知道这是真的。错误信息是,
似乎需要能够限定存在类型,例如对存在类型 b 说“Show b => Show (D (Either ab))”,或者升级含义“(Show a, Show b) = > Show (Either ab)" 所以它是双向的。
非常感谢!
(请随意清理标题或描述。)
data-structures - 什么是“sums-and-products”数据结构?
最近一篇关于 William Cook 的 Fusings 的博文提到:
关键是 Ensō 中的结构被整体视为图形,而不是单个值或传统的和乘积数据结构。
他指的是什么传统的 sum-and-products 数据结构?
haskell - 在 Haskell 中覆盖 (==)
我有以下代数数据类型:
用简单的玩具语言表示表达式。
但是,因为我推导出 Eq,所以即使我想将其视为等于的表达式,Op Plus (Var "a") (Var "b)
也不认为等于。Op Plus (Var "b") (Var "a")
a+b
b+a
如何(==)
仅针对这些实例进行更改,而不必(==)
为所有其他实例指定行为?
haskell - 从 CSV 构造数据类型实例
我有 CSV 数据(继承 - 这里没有选择),我需要使用它在 Haskell 中创建数据类型实例。解析 CSV 没有问题 - 教程和 API 比比皆是。
这是为我简化的精简测试用例生成的“显示”:
我可以进行读取以将此字符串转换为 JField 数据记录。我的 CSV 数据只是字段的值,所以上面 JField 对应的 CSV 行是:
我正在阅读这些作为字符串列表 ["cardNo", "str"]
所以 - 暴力破解“字符串表示”的确切格式很容易(但在 Haskell 中编写 Java 或 python 风格的字符串格式不是我的目标)。
我想过做这样的事情(第一个列表是静态的,第二个列表是读取文件 CSV):
导致
然后连接元组 - 明确地使用 ++ 或以一些更聪明的方式尚未确定。
这是我在教程之外的第一段简单代码,所以我想知道这是否是一种合理的 Haskellian 方式,或者有什么明显更好的方式来构建这一段:fname = "cardNo", ftype =“字符串”
不期待解决方案(这不是家庭作业,这是一个学习练习),而是批评或指导以更好地做到这一点。蛮力强制它会很容易,但会破坏我的目标,即学习
haskell - 在枚举上创建函数
我刚开始学习 Haskell。我想我已经掌握了基础知识,但我想确保我实际上也在强迫自己从功能上思考。
无论如何,我想做的事情是创建一个函数来映射每个“Dir”和它的对立面/inv。我知道我可以轻松地再继续这 3 行,但我不禁想知道是否有更好的方法。我尝试添加:
但显然你不能这样做。所以我的问题是:有没有一种方法可以生成其余的逆函数,或者有更好的方法来创建这个函数?
非常感谢。
haskell - 具有代数数据类型的 Haskell 类型类
我有一些代数数据类型 A、B 和 C,每个都实现了该类:
如果我创建一个新的代数数据类型:
有没有一种简单的方法让 D 实现 Dog 而不必再次为 A、B 和 C 重新定义每个实例?
谢谢
haskell - 是否有一个词表示“具有两个构造函数的非递归数据类型”?
有没有一个词描述数据类型
- 正好有两个构造函数;和
- 不是递归的吗?
即描述这些类型
但不包括这些类型
haskell - 在 Haskell 中通过整数参数化类型
我正在尝试制作一些 Haskell 类型,这些类型不是按类型而是按类型的元素(特别是整数)进行参数化。例如,R^2 中的(线性代数)向量和 R^3 中的向量是不同类型的对象。具体来说,我正在用 Haskell 编写一个 KD 树,我想用一个正整数参数化我的数据结构,因此 3-D 树和 4-D 树具有不同的类型。
我试图通过元组参数化我的树,但它似乎没有去任何地方(而且这似乎不太可能被推动,特别是因为看起来三元组或更大的东西甚至不是函子(和我不知道如何说,例如 HomogeneousTuple a => Functor a)。我想做这样的事情:
那会很好,或者类似的东西同样好
有人知道这些效果中的任何一个是否可行或合理吗?
谢谢-约瑟夫