我正在努力深入了解Opa背后的概念。特别是,我很好奇决定不在ML或Haskell中提供有区别的联合(即定义包含零个或多个值的几个构造函数),但要保留它们的记录类型和总和类型。这个决定对我来说是完全有意义的(也许是因为我更倾向于OOP而不是FP),并且似乎可以实现所有可以用歧视联盟完成的事情。
但是,我们可以说语言仍然支持代数数据类型吗?这个问题不是一个实际问题,而是一个关于术语的问题。
是的,Wikipedia说是的,也许应该纠正。答案 0 :(得分: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吗?