【问题标题】:GADTs: Difference between 'Algebraic' and 'Abstract'?GADT:“代数”和“抽象”之间的区别?
【发布时间】: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


【解决方案1】:

不存在名为广义抽象数据类型的独立概念。短语“广义抽象数据类型”有时被错误地用于广义代数数据类型。出现这个错误是因为“代数数据类型”和“抽象数据类型”都缩写为“ADT”。

【讨论】:

  • 干杯老板,明白了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 2011-01-01
  • 2014-09-02
  • 2016-05-06
  • 1970-01-01
  • 2012-03-18
相关资源
最近更新 更多