范畴学
最后更新于:2022-04-02 04:17:34
[TOC]
## 范畴学
范畴学(category theory)是数学中的一个抽象分支,能够形式化诸如集合论(set theory)、类型论(type theory)、群论(group theory)以及逻辑学(logic)等数学分支中的一些概念。范畴学主要处理对象(object)、态射(morphism)和变化式(transformation),而这些概念跟编程的联系非常紧密
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e/9e/2e9e89eb10be4f2a172a1320c30e2ac8_687x399.png)
在范畴学中,有一个概念叫做...范畴。有着以下这些组件(component)的搜集(collection)就构成了一个范畴:
* 对象的搜集
* 态射的搜集
* 态射的组合
* identity 这个独特的态射
什么是范畴
1. 一个有向图(directed graph),以节点为对象,以边为态射,以路径连接为组合也是一个范畴。
2. 定义一个实数类型(Number),以所有的实数为对象,以`>=`为态射(实际上任何偏序(partial order)或全序(total order)都可以成为一个范畴)
范畴学将在应用架构、模拟副作用和保证正确性方面扮演重要角色
## 对象的搜集
对象就是数据类型,例如`String`、`Boolean`、`Number`和`Object`等等。通常我们把数据类型视作所有可能的值的一个集合(set)。像`Boolean`就可以看作是`[true, false]`的集合,`Number`可以是所有实数的一个集合。把类型当作集合对待是有好处的,因为我们可以利用集合论(set theory)处理类型。
## 态射的搜集
态射是标准的、普通的纯函数。
## 态射的组合
就是代码的组合
具体例子
```
var g = function(x){ return x.length; };
var f = function(x){ return x === 4; };
var isFourLetterWord = compose(f, g);
```
## identity 这个独特的态射
函数接受随便什么输入然后原封不动地返回它
```
var id = function(x){ return x; };
```
id 函数跟组合一起使用简直完美
```
// identity
compose(id, f) == compose(f, id) == f;
// true
```
';