Pat*_*wne 1 haskell algebraic-data-types
据我所知,Haskell 中的代数数据类型可以有两种形式,即和(例如data Bool = True | False)或乘积(例如data Pair = P Int Double)。以下是一些具有空值和一元值构造函数的数据类型。
data Z = Z
data S n = S n -- I think that this is a singleton type?
data S = S Int
Run Code Online (Sandbox Code Playgroud)
这些类型是否被视为代数数据类型?如果是的话,他们叫什么?
Z只是一个不同名称的单位类型。A1作为 ADT。换句话说,它是一个空的产品类型。(同样,根本没有构造函数的类型可以被视为空和类型。)
S n与n自身同构。在ADT的框架中,它被认为是等价的,即如果n是代数类型,那么 也是S n。
但请注意,在 Haskell 中,类型定义通常被故意视为不透明,以避免导出值构造函数。该类型实际上是一种抽象数据类型,而不是代数数据类型。