2025-09-21
什么是类型
ADT
抽象数据类型,由基础类型组成,类型可以有多个构造子 它定义好之后是封闭,一旦编译时读到它定义
type class
赋予类型一些方法,或者明确来说不能说是类型的方法,而是关于类型的函数,这些函数是对于类型结构无关的,也有关系的 无关结构,类似Show,Eq,关于结构的是Monad之类的 它是对外开发的,适合运行时
程序的定义
对于纯函数,输入->输出,描述这个过程的都可以叫函数,其他的元素,例如结构,类型都是次要的,它们本质都是为这个函数过程服务的 在这个基础上,我们再看其他的元素和定义有什么关系。
- 原始类型int string
- ADT,是原始类型组合起来的类型,但要知道最终输出大概率是原始类型,就像数据里的虚数。
- 类型可以叫拥有同一种函数的集合,为什么是函数,不是方法,因为一个函数可以连接两种类型,那这个函数属于哪个类型,所以称其函数更为合理
- 处理同一种类型,相关的函数集合,称为type class
- Functor,Monad这样的type class是用来干嘛的?与ADT的结合是对值的延迟处理,本质也是计算。最终通过map, bind获取内部值,举个例子,链表就是一种结构,单看起来又是一种计算
- 既然也是一种计算,那也可以像普通函数一样可以进行compose,只是结构上的compose
- 从lisp角度来看,数据结构和函数计算是一致的。
总结
程序就是计算,输出是数据,而数据结构是惰性的可以解构的计算,通过结构性的type class解构后重新参与计算。