Haskell中的类型和数据类型有什么区别?

use*_*112 32 haskell typeclass

我对Haskell中的类型数据类型之间的区别感到困惑.

从我遇到的文献中我得到的印象是他们是不同的概念.

Fre*_*Foo 50

类型数据类型指的是完全相同的概念.

哈斯克尔关键字typedata是不同的,虽然:data让你引入一个新的代数数据类型,而type只是让一个类型的同义词.

有关详细信息,请参阅Haskell wiki.

  • 为了完成图片,还有`newtype`.掌握`newtype T a = T a`和`data T a = T a`之间的区别很难,但非常重要. (6认同)
  • @ user997112`newtype`只是一种编译时类型,用于创建一种同义词,但被视为不同的类型.你可以将它包装在`data`中,但它会在运行时增加一些开销.`newtype`使编译器明确表示您希望类型区分,而不会产生运行时开销.长话故事:http://www.haskell.org/haskellwiki/Newtype (6认同)

ham*_*mar 6

这些术语有时会混合使用,但通常“数据类型”是指使用关键字引入的类型data,它具有可以进行模式匹配的构造函数。这些也称为代数数据类型”。

“类型”是一个更通用的术语,还包括使用创建的类型newtype、函数类型等。