代数类型 (Algebraic Types)浅析

代数类型的实质是,生成类似代数结构类型的一种类型函数(Type Function 或 Type Former),其输入是类型,输出是带有代数结构的类型。主要包括了 积类型(Product Type)、和类型(Sum Type)以及 指数类型(Exponential Type)。因此,代数类型并不指是一种特定的类型,如自然数,整数等,而是所有的带有特定的代数结构的类型的统称。

类型大小(Size)

在解析为什么叫代数类型前,需要回顾一下,在《类型即可构建集合》 一文中描述到类型是一种集合,所包含的各个元素都必须是可构建的。换言之,在定义一个类型的时候,需要定义其所包含的元素是如何构造的。因此,在有限集的情况下,可以计算出每个类型的大小(size),即类型包含的元素个数。记为 |A|,A为类型。

积类型(Product Type)

定义如下,给定两个类型 A和B,生成新的类型 (A,B)。

Product: A -> B -> (A, B)

此时,| (A,B)| = |A| × |B|,由此,该类型函数被成为,积类型。

和类型(Sum Type)

定义如下,给定两个类型 A和B,生成新的类型 A+B。

Sum: A -> B -> A + B

此时,| A + B | = |A| + |B|,由此,该类型函数被成为,和类型。

指数类型(Exponent Type)

定义如下,给定两个类型 A和B,生成新的类型  A -> B,因此也称函数类型。

Exp: A -> B -> (A -> B)

此时,| A -> B | = |B| ^ |A|,由此,该类型函数被成为,指数类型。

延伸

此时,我们讨论里,有个隐含的背景是,类型函数的输入只能是类型,如果类型函数的输入可以是值,也可以是类型的话,我们便有了依赖类型 (Dependent Type)。

也就是说,函数有输入输出两端,输出依赖着输入,然后把输入输出分为值和类两种,就有 2x2 = 4种。分别是

1. 值 -> 值,普通函数

2. 值 -> 类,依赖类型函数

3. 类 -> 值,多态

4. 类 -> 类,类型函数

后面,笔者会有相关文章再仔细说说。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值