首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

深入解析 Monad(2)Functor

深入解析 Monad(2)Functor

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)。
返回列表