opa - Opa 提供代数数据类型吗?

标签 opa algebraic-data-types

我正在尝试更深入地了解 Opa 背后的概念。特别是,我很好奇不提供像 ML 或 Haskell 那样的有区别的联合(即定义几个包装零个或多个值的构造函数)的决定,而是保留它们的记录类型和总和类型。这个决定对我来说完全有意义(也许是因为我更喜欢 OOP 而不是 FP),而且似乎可以实现通过歧视联合可以完成的所有事情。

但是,我们可以说该语言仍然支持代数数据类型吗?这不是一个实际问题,而是一个关于术语的问题。

顺便说一句,Wikipedia说是的,也许应该更正。

最佳答案

在 Opa 中,一切都是记录,实际上您可以实现通过歧视联合可以完成的操作。

在 ocaml 中您将写 type tree = Leaf of int | Node of tree * tree

在 Opa 中,它将是 type tree = {int leaf} or {tree left, tree right}

您可能会注意到,与 Ocaml 不同,在 Opa 中您可以操作记录而无需显式定义其类型。这就是为什么即使 Opa 仅使用记录,定义可区分联合仍然很简单。

顺便说一句,你看过http://doc.opalang.org/manual/The-type-system吗? ?

关于opa - Opa 提供代数数据类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9556704/

相关文章:

Opa:如何从数据库中删除对象?

javascript - 原生 JavaScript 类型是如何用 Elm 编写的?

rx-java - 如何在没有 .flatMap 的情况下控制流,这会破坏 react 流,从而阻止 distinctUntilChanged 等运算符在整个流上工作

java - Opa:它如何识别服务器端或客户端脚本

scope - 修改封闭范围内的变量

scala - 是什么使Scala中的类/特征成为ADT

haskell - Haskell 中的记录 getter 是否有默认值?

pattern-matching - (纯脚本)如何对 "empty type"的代数数据类型进行模式匹配

Opa:迭代 stringmap 并基于它形成一个新字符串