【发布时间】:2014-08-12 10:46:11
【问题描述】:
似乎术语“广义抽象数据类型”和“广义代数数据类型”可以互换使用,但我确信从技术上讲它们不是一回事.
有人能解释一下区别吗,也许在 Haskell 的上下文中使用一个简单的例子?
【问题讨论】:
-
AFAIK,Haskell 中的“GADT”始终表示广义代数数据类型。术语“抽象数据类型”来自面向对象的编程世界,指的是完全不同的东西。您在哪里看到“广义抽象数据类型”?
-
我看到的“广义抽象数据类型”的大部分搜索结果似乎都是人们使用该术语来指代我们通常所说的“GADT”或“广义代数数据类型” .
-
@KeshavKini,同意抽象数据类型与 OO 无关的观点。事实上,它们是 OO 风格抽象的对立面。 ML,甚至在某种程度上,甚至是 Haskell,都通过其模块系统支持 ADT。
-
顺便说一句,一些关于 GADT 的早期论文称它们为 GRDT(R = 递归),因为 ADT 作为抽象数据类型具有早已确立的含义,而将其解读为代数 DT 可能是一种误解大多数情况。
-
@augustss:Lennart,我想知道为什么没有坚持下去? :)
标签: haskell abstract-data-type algebraic-data-types gadt