FunctorFunctor 是范畴之间的映射。对于两个范畴 A 和 B,Functor F 把范畴 A 中的对象映射到范畴 B 中。Functor 在映射时会保留对象之间的连接关系。如果范畴 A 中存在从对象 a 到对象 b 的态射,那么 a 和 b 经过 Functor F 在范畴 B 中的映射值 F a 和 F b 之间也存在着态射。同样的,态射之间的组合关系,以及恒等态射都会被保留。所以说 Functor 不仅是范畴中对象之间的映射,也是态射之间的映射。如果一个 Functor 从一个范畴映射到自己,称为 endofunctor。
前面提到过,编程语言中的范畴中的对象是类型,而态射是函数。因此,这样的 endofunctor 是从类型到类型的映射,同时也是函数到函数的映射。我们首先看一个具体的 Functor :Option。Option 的定义很简单,Java 标准库和 Vavr 中都有对应的类。不过我们这里讨论的 Option 与 Java 中的 Optional 类有很大不同。Option 本身是一个类型构造器,使用时需要提供一个类型,所得到的结果是另外一个新的类型。这里可以与 Java 中的泛型作为类比。Option 有两种可能的值:Some 和 None。Some 表示对应类型的一个值,而 None 表示没有值。对于一个从 a 到 b 的映射 f,可以很容易地找到与之对应的使用 Option 的映射。该映射把 None 对应到 None,而把 f(Some a)映射到 Some f(a)。 |