Haskell抽象概念Functor剖析

在理解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的单位态射”。
时间: 2024-10-07 05:54:06

Haskell抽象概念Functor剖析的相关文章

深入理解计算机系统(1.3)---金字塔形的存储设备、操作系统的抽象概念

本文转载地址:http://www.cnblogs.com/zuoxiaolong/p/computer3.html 上一章LZ给各位展示了一下hello程序的简单执行过程,可以看出在这一过程当中,系统在数据的传输上花费了大量的时间.硬件开发商为了减少这种数据传输的时间成本,采用一种高速缓存的技术去减少这种时间成本. 高速缓存被置放于处理器当中,与处理器中的寄存器文件直接进行数据交换,这样大大减少了数据传输的时间成本,使得程序的运行速度可以得到数倍的提升.而作为一个程序猿,如果可以适当的利用高速

闭包——JavaScript 中功能最强大的抽象概念之一

下面我们将看到的是 JavaScript 中必须提到的功能最强大的抽象概念之一:闭包.但它可能也会带来一些潜在的困惑.那它究竟是做什么的呢? function makeAdder(a) { return function(b) { return a + b; } } var x = makeAdder(5); var y = makeAdder(20); x(6); // ? y(7); // ? makeAdder 这个名字本身应该能说明函数是用来做什么的:它创建了一个新的 adder 函数,

数学和物理太难?这些 GIF 让你秒懂抽象概念

把科学带回家,给孩子最好的科学教育 觉得数学和物理很抽象很难懂吗?今天我们来分享一组数学和物理相关的动图,让你秒懂抽象概念. 数学动图 △ 从椭圆的一个焦点射出的光线总会通过另一个焦点. △ 真人版. △ 一图看懂正弦.余弦和正切什么意思. △ 圆的面积. △ 如何理解圆的面积和派的关系. △ 勾股定理演示.直角三角形的两条直角边的平方和(两个小正方形的面积),加起来正好等于斜边的平方(大的面积). △ 另一种勾股定理的理解. △ 用阿基米德的穷举法计算派的大小. △ 如何利用 2 点画椭圆.2

金字塔形的存储设备,操作系统的抽象概念

系统在数据的创书上花费了大量的时间.硬件开发商(主要是那个做存储介质的人)为了减少这种数据传输的时间成本,此阿勇了以中高速缓存的技术去减少这种时间成本. 高速缓存被置放于处理器中,与处理器中寄存器文件直接进行数据交换,这样大大较少了数据传输的时间成本,使得程序的运行速度可以得到数倍的提升.作为一个搞电脑的,入股可以适当的利用高速缓存去存放一些程序运行过程中常用的数据,可以将程序的运行速度提高数倍甚至数个数量级. 你回想一下在网页中,你第一个打开一个网页,可能很慢,但是当你打开第二次的时候,可能快

Docker的概念及剖析原理和特点

一.docker的简介: 应用容器是个啥样子呢,一个做好的应用容器长的就像一个装好了一组特定应用的虚拟机一样,比如我现在想用mysql数据库,我直接找个装好了的MySQL的容器就可以了,想用的时候一运行容器,MySQL服务就起来了,就可以使用MySQL了 为什么不能直接安装一个MySQL?或者是SqlServer呢也可以啊? 答:因为有的时候根据每个人的电脑的不同,在物理机安装的时候会出现各种各样的错误,突然你的机器中病毒了或者是挂了,你所有的服务都需要重新安装. 注意:    但是有了dock

进程的概念和剖析

1.操作系统的发展史(经历的三个阶段)    1.穿孔卡片 ======>2.磁带 ========>3.批处理 经历的三个阶段的变化,本质上无非是想要提高CPU的利用效率. 2.多道程序设计和单道程序设计的理念   多道程序设计:1.空间上的复用:他们共同使用一台计算机上的硬件设备. 2.时间上的复用:就拿做家务来说,你洗衣服需要45分钟,在这45分钟里你可以完成烧水10分钟的事情和30分钟的做饭两件事,但是完成的总时间是只有45分钟. 3.CPU在程序中来回切换程序进行执行 4.CPU在以

STL源码剖析 --- 空间配置器 std::alloc

STL是建立在泛化之上的.数组泛化为容器,参数化了所包含的对象的类型.函数泛化为算法,参数化了所用的迭代器的类型.指针泛化为迭代器,参数化了所指向的对象的类型.STL中的六大组件:容器.算法.迭代器.配置器.适配器.仿函数. 这六大组件中在容器中分为序列式容器和关联容器两类,正好作为STL源码剖析这本书的内容.迭代器是容器和算法之间的胶合剂,从实现的角度来看,迭代器是一种将operator*.operator->.operator++.operator-等指针相关操作予以重载的class tem

STL"源码"剖析-重点知识总结

STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点略多 :) 1.STL概述 STL提供六大组件,彼此可以组合套用: 容器(Containers):各种数据结构,如:vector.list.deque.set.map.用来存放数据.从实现的角度来看,STL容器是一种class template. 算法(algorithms):各种常用算法,如:sort.search.copy.erase.从实现的角度来看,STL算法

【转载】STL&quot;源码&quot;剖析-重点知识总结

原文:STL"源码"剖析-重点知识总结 STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点略多 :) 1.STL概述 STL提供六大组件,彼此可以组合套用: 容器(Containers):各种数据结构,如:vector.list.deque.set.map.用来存放数据.从实现的角度来看,STL容器是一种class template. 算法(algorithms):各种常用算法,如:sort.se