数据中的代数数据类型和子类之间的区别Bool = False |真正

时间:2018-05-22 07:05:42

标签: haskell

我对Haskell并不熟悉,但正在查看其中的一些内容。我注意到this

data Bool = False | True

在OO语言中,这可以使用子类来完成:

class Bool
class False < Bool
class True < Bool

高度想知道这两种结构之间的区别。想知道一个简单的代数数据类型是否可以被认为是一个类及其子类。如果没有,为什么不呢。

1 个答案:

答案 0 :(得分:1)

  

将和类型视为类型不相交的联合更有意义。另一方面,OO语言中的子类共享数据布局,而在Haskell中,数据构造函数可以完全不相交。 - Tobias

  

Bool是一种类型,而False和True是值。一个关键的区别在于。 - duplode

要查看它,请在GHCi propmt:

处尝试:k
~> :k Bool
Bool :: *

~> :k False
***error***

这是因为Bool是一种事物,而False(创造)是一种事物。它是一个(nullary)数据构造函数,它不需要任何参数:

x :: Bool
x = False

事情有类型:

~> :t False
False :: Bool

~> :t x
x :: Bool

~> :t Bool
***error***