博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Haskell抽象概念Functor剖析
阅读量:7064 次
发布时间:2019-06-28

本文共 1036 字,大约阅读时间需要 3 分钟。

hot3.png

在理解Functor之前,必须对抽象代数的范畴论有所了解,有范畴论的知识作为铺垫,感觉Functor也不是那么的难以理解了。

一个范畴C包括:

    •  一个由对象所构成的类ob(C)

    •  对象之间的态射所构成的类hom(C)。每一个态射f都会有一个“源对象”a和“目标对象”b,且a和b  都在ob(C)之内。因此写成f:a -> b,且称f为由a到b的态射。所有a到b的态射所构成的“态射类”,  其标记为hom(a,b)或者homC(a,b)。

    •  对三个对象a、b和c,二元运算hom(a,b) * hom(b,c) -> hom(a,c)称之为态射复合;f :a -> b 和g  : b -> c 的复合写成g . f 或者gf。

态射复合满足下列公理:

    • (结合律)若f:a -> b、g:b -> c且 h:c -> d,则 h.(g.f) = (h.g).f;

    • (单位元)对任一对象x,存在一态射1x:x -> x,使得每一态射f:a -> b,都会有1b.f = f = f.1a。  此态射称为“x的单位态射”。     

千万别被这些概念吓到了,从编程者的角度考虑,范畴就是一种抽象,一种interface,理解一个抽象接口最好的方式就是看它的具体实现,而范畴最容易理解的一个具体就是Set,集合,我们高中就接触过的东西。一个集合就是一个范畴,我们看看它是怎么满足的:

    • 它的对象是集合的元素

    • 它的态射就是集合之间的映射(函数)

    • 它的态射复合就是映射的复合(函数的复合)

了解了范畴的概念,接下来我们在看看函子,函子到底是个什么东西呢?下面看它的定义:

设C和D为范畴,从C到D的函子为一个映射F:

    • 将每个对象X <- C 映射到一个对象 F(X) <- D 上,

    • 将每个态射f : X -> Y <- C 映射至一态射 F(f) : F(X) -> F(Y) <- D上

看函子的定义知道了函子的作用大概就是把一个范畴转换为另一个范畴,所以函子是范畴间的一种映射。

如果我们把函子在抽象一层的话,会发现函子也是遵循着范畴的定义,下面看看:

    • 它的对象是函子(一个把一个范畴映射到另一个范畴的东西)

    • 它的态射是自然变换

    • 它的态射复合就是自然变换之间的复合

所以我们的函子也是满足范畴的定义,它自身也够成了一个范畴,叫做函子范畴。然后我们还有一种特殊的函子,它是把一个范畴映射到自身,它叫自函子。

转载于:https://my.oschina.net/firebroo/blog/384494

你可能感兴趣的文章
java shutdownhook
查看>>
Mongodb简介及安装部署配置
查看>>
Linux安装Nginx
查看>>
Linux的发行版及其不同发行版直接的联系与区别
查看>>
PHP课程总结20161228
查看>>
重装操作系统-mysql数据库还原
查看>>
一致性hash原理与实现
查看>>
大数据hadoop领域技术总体介绍(各个组件的作用)
查看>>
安装本地jar到Maven仓库
查看>>
游戏开发怎么样学能入门零基础学游戏编程
查看>>
成熟的软件组件都是老板用大把、大把的钱堆出来烧出来的,以最简单的数据库访问组件为例...
查看>>
KVM安装与使用
查看>>
grep 正则表达式 vim及相关知识
查看>>
Julia 1.0 正式发布,这是新出炉的一份简单中文教程
查看>>
【3分钟读懂Kafka原理系列】细数MQ那些不得不说的8大好处
查看>>
区块链3.0,人工智能与区块链的完美融合
查看>>
ERROR [net.sf.ehcache.Cache] - Unable to set localhost.解决方案
查看>>
微信群里的这些文章,都是谣言!赶紧给爸妈看看
查看>>
图像搜索技术发展应知道
查看>>
PPT图表分享一:组织结构图
查看>>