简而言之,我们必须考虑代数和类型之间的关系。 Haskell 的代数数据类型之所以如此命名,是因为它们对应于范畴论中的初始代数。
维基百科说:
在计算机编程中,特别是函数式编程和类型编程
理论上,代数数据类型是一种复合类型,即
由其他类型组合而成的类型。
让我们来Maybe a
数据类型:
data Maybe a = Nothing | Just a
Maybe a
表明它可能包含某种类型a
- Just Int
例如,也可以为空 -Nothing
。在 Haskell 中,类型是对象,例如Int
。例如,运算符获取类型并生成新类型Maybe Int
. Algebraic
指代数数据类型创建的属性algebraic
运营:sums
and product
where:
- “sum”是交替(A | B,意思是A或B但不是两者)
- “产品”是组合(A B,意思是A和B在一起)
例如,让我们看看sum
for Maybe a
。首先我们定义Add
type:
data Add a b = Left a | Right b
在哈斯克尔|
is or
,所以它可以是或Left a
or Right b
。竖条|
向我们表明Maybe
我们上面定义的是一个 sum 类型,这意味着我们可以这样写Add
:
type Maybe a = Add Nothing (Just a)
Nothing
这里是这里是一个unit
type:
在数理逻辑和计算机科学领域称为类型
理论上,单位类型是这样的类型allows只有一个值
data Unit = Unit
Or ()
在哈斯克尔。
Just a
是一个单例类型。单例类型是那些只有一个值的类型。
data Just a = Just a
之后我们可以将其重写为:
type Maybe a = Add () a
所以我们有单位类型 -1
,以及单例类型 -a
。现在我们可以说Maybe a
与 1 + a 相同。
如果你想深入——数据代数和变异演算