我对Haskell并不熟悉,但正在查看其中的一些内容。我注意到this:
data Bool = False | True
在OO语言中,这可以使用子类来完成:
class Bool
class False < Bool
class True < Bool
高度想知道这两种结构之间的区别。想知道一个简单的代数数据类型是否可以被认为是一个类及其子类。如果没有,为什么不呢。
答案 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***