2

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

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

顺便说一句,维基百科说是的,也许应该更正。

4

1 回答 1

3

在 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吗?

于 2012-03-04T18:21:44.637 回答