Category

class Category cat where
id :: cat a a
(.) :: cat b c -> cat a b -> cat a c instance Category (->) where
id = GHC.Base.id
(.) = (GHC.Base..) (<<<) :: Category cat => cat b c -> cat a b -> cat a c
(<<<) = (.)
(>>>) :: Category cat => cat a b -> cat b c -> cat a c
f >>> g = g . f
  • Category(范畴)是个类型类,它包含两个函数。

    id函数是Category类型类的幺元。

    (.)函数是Category类型类的组合子。

    id函数和(.)函数形成了一个幺半群(Monoid)。
  • 对于(->)函数操作符这个实例来说

    id函数和(.)函数的定义就是GHC.Base模块中的同名函数。
  • (<<<)函数与(.)同义。

    (>>>) 函数则相当于 flip (.)。

category theory(范畴论)中的 category(范畴)

在范畴论中,一个范畴包括

  • A collection of objects.

    一个对象的集合。
  • A collection of morphisms.

    一个态射的集合。每个态射绑定两个对象:一个输入,一个输出。

    若态射 f 绑定了一个输入对象 A 一个输出对象 B,则它可以被记作

    f : A -> B.
  • A notion of composition of these morphisms.

    态射的组合。

    态射 g : A -> B 可以和态射 f : B -> C 组合成新的态射 f . g : A -> C。

范畴的法则

  • 态射的组合满足结合律。即

    (f . g) . h = f . (g . h)
  • 态射的组合是封闭的。即

    态射组合后形成的新态射仍然必须在范畴之内。
  • 存在单元态射 id。即

    id . g = g . id = g

Haskell语言中的范畴

Haskell语言中的范畴被称为Hask

  • Hask范畴中的对象为类型。
  • Hask范畴中的态射为函数。
  • Hask范畴中态射的组合子是函数 (.)。
  • Hask范畴中的单元态射是函数 id。

范畴论中的 Functor(函子)

Functor是范畴之间的转换器。

给定范畴 C 和 D,函子 F : C -> D 可以将

  • 任何 C 中的对象 A 映射成 D 中的对象 F(A)。
  • 任何 C 中的态射 f : A -> B 映射成 D 中的态射 F(f) : F(A) -> F(B)。

范畴论中的 Monad(单子)

Monad是一种特殊的Functor。

  • Monad M 的映射关系建立在某个范畴 C 自身之上。

    即Monad可以被记作 M : C -> C。
  • 对于范畴 C 中的任何对象 X,都存在两个特殊映射

    unit : X -> M(X)

    join : M(M(X)) -> M(X)

Haskell语言学习笔记(39)Category的更多相关文章

  1. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

  2. Haskell语言学习笔记(79)lambda演算

    lambda演算 根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义.函数如何被应用以 ...

  3. Haskell语言学习笔记(69)Yesod

    Yesod Yesod 是一个使用 Haskell 语言的 Web 框架. 安装 Yesod 首先更新 Haskell Platform 到最新版 (Yesod 依赖的库非常多,版本不一致的话很容易安 ...

  4. Haskell语言学习笔记(20)IORef, STRef

    IORef 一个在IO monad中使用变量的类型. 函数 参数 功能 newIORef 值 新建带初值的引用 readIORef 引用 读取引用的值 writeIORef 引用和值 设置引用的值 m ...

  5. Haskell语言学习笔记(72)Free Monad

    安装 free 包 $ cabal install free Installed free-5.0.2 Free Monad data Free f a = Pure a | Free (f (Fre ...

  6. Haskell语言学习笔记(44)Lens(2)

    自定义 Lens 和 Isos -- Some of the examples in this chapter require a few GHC extensions: -- TemplateHas ...

  7. Haskell语言学习笔记(38)Lens(1)

    Lens Lens是一个接近语言级别的库,使用它可以方便的读取,设置,修改一个大的数据结构中某一部分的值. view, over, set Prelude> :m +Control.Lens P ...

  8. Haskell语言学习笔记(92)HXT

    HXT The Haskell XML Toolbox (hxt) 是一个解析 XML 的库. $ cabal install hxt Installed hxt-9.3.1.16 Prelude&g ...

  9. Haskell语言学习笔记(91)Comprehension Extensions

    Comprehension Extensions 关于解析式的相关语言扩展. List and Comprehension Extensions 24 Days of GHC Extensions: ...

随机推荐

  1. Rockchip parameter文件详解

    瑞芯微的安卓平台使用 parameter 文件来配置一些系统参数,比如定义串口号,固件版本,flash分区信息等. parameter 文件是由 BootLoader 解析的,大小不能超过 64 KB ...

  2. C#代码规范和质量检查工具

    代码风格检查:StyleCop The StyleCop tool provides warnings that indicate style and consistency rule violati ...

  3. jni头文件自动生成

    写一个测试代码,大概如下 package aa.bb; public class TestClass { public native void aaaBBB(); } 在项目的src目录下执行 jav ...

  4. Rabbit测试及其方案

    转载:https://www.2cto.com/kf/201609/548190.html 个消息没有回应,则MQ不会再往消费者A中发消息,直到收到消息确认后才会再次发送. Ack:消息确认. :启动 ...

  5. Eclipse/MyEclipse连接Hadoop集群出现:Unable to ... ... org.apache.hadoop.security.AccessControlExceptiom:Permission denied问题

    问题详细如下: 解决办法: <property> <name>dfs.premissions</name> <value>false</value ...

  6. 转转转!java继承中的this和super

    学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云.只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键 ...

  7. Jade简单教程

    Express框架里内嵌了Jade模板引擎.正好项目里也要用到,本篇整理了下Jade的相关用法. 安装与执行 标签和属性 多行文本 变量 语句 Mixin 模板 注释 过滤器 安装与执行 安装很简单: ...

  8. bitmap运算

    概述 所谓bitmap就是用一个bit位来标记某个元素对应的value,而key即是这个元素.由于采用bit为单位来存储数据,因此在可以大大的节省存储空间     算法思想 32位机器上,一个整形,比 ...

  9. ETL项目场景

    1.基础数据的维护,基本都是人工实现 2.慢慢基于文件进行导入 3.专业的数据交换平台 ================================= Kettle:数据导入不是采取数据库模式,因 ...

  10. python3中reduce()函数的使用方法示例

      reduce() 函数会对参数序列中元素进行累积,下面这篇文章主要给大家介绍了关于python中reduce()函数的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学 ...