Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell GADTs:与x27之间的差异;代数';和';摘要';?_Haskell_Abstract Data Type_Algebraic Data Types_Gadt - Fatal编程技术网

Haskell GADTs:与x27之间的差异;代数';和';摘要';?

Haskell GADTs:与x27之间的差异;代数';和';摘要';?,haskell,abstract-data-type,algebraic-data-types,gadt,Haskell,Abstract Data Type,Algebraic Data Types,Gadt,“广义抽象数据类型”和“广义代数数据类型”这两个术语似乎可以互换使用,但我确信,从技术上讲,它们不是一回事 有人能解释一下这种区别吗?也许可以在Haskell的上下文中使用一个简单的例子。没有一个独立的概念叫做广义抽象数据类型。短语“广义抽象数据类型”有时被错误地用于广义代数数据类型。出现这个错误是因为“代数数据类型”和“抽象数据类型”都缩写为“ADT”。AFAIK,“GADT”在Haskell中总是表示广义代数数据类型。术语“抽象数据类型”来自面向对象编程世界,指的是完全不同的东西。你在哪里看

“广义抽象数据类型”和“广义代数数据类型”这两个术语似乎可以互换使用,但我确信,从技术上讲,它们不是一回事


有人能解释一下这种区别吗?也许可以在Haskell的上下文中使用一个简单的例子。

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

AFAIK,“GADT”在Haskell中总是表示广义代数数据类型。术语“抽象数据类型”来自面向对象编程世界,指的是完全不同的东西。你在哪里看到了“广义抽象数据类型”?我看到的“广义抽象数据类型”的大部分搜索结果似乎都是使用该术语来指代我们通常称之为“GADT”或“广义代数数据类型”的人。@KeshavKini同意,有一点是抽象数据类型与OO无关。事实上,它们与OO风格的抽象相反。ML,甚至Haskell在某种程度上,通过他们的模块系统支持ADT。顺便说一句,关于GADT的一些早期论文称它们为GRDTs(R=recursive),因为ADT作为抽象数据类型的含义由来已久,而它作为代数DT的读法在大多数情况下可能是一种误解。@augustss:Lennart,我想知道为什么没有坚持下去?:)干杯,老板,明白了:)