惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
博客园 - 叶小钗
Last Week in AI
Last Week in AI
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
P
Proofpoint News Feed
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
aimingoo的专栏
aimingoo的专栏
月光博客
月光博客
量子位
A
About on SuperTechFans
Engineering at Meta
Engineering at Meta
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
博客园 - Franky
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
D
DataBreaches.Net
博客园_首页
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Stack Overflow Blog
Stack Overflow Blog

方永、南天紫雲

linux透明代理 技术的边界 停机问题通俗说明 Rust与oracle、redis集群的纠结 学习能力的增长 微信调试的原语 mac外接移动硬盘安装ArchLinux linux的死机问题 linux下全键盘操作 漂亮又好用的bspwm linux本机透明代理 ssh、mosh、autossh linux不能待机又一例 从WordPress切换到Hugo 折腾电脑开机 linux系统QQ新思路 Arch Linux的字体渲染 svn管理之submin OpenWrt自动fucking墙記錄 二维码(qrcode)名片的一些事儿 用lua nginx module搭建一个二维码(qr code)生成器 CentOS 7 安裝註記 php程序連接MySQL时只能127.0.0.1而localhost無法連接的問題 ThinkPad之FAN_ERROR、hi fi聲卡 jetty多端口部署 OpenWrt簡單暴力限網 linux中cron之PATH变量 OpenWrt的WDS無線橋接模式 再敘OpenWrt下的rtl8187無線中繼 sed之模擬tail
理解单子是自函子范畴上的幺半群(五)
zola · 2024-09-05 · via 方永、南天紫雲

那么如何与编程语言相对应?

在编程语言中,将所有的类型(T)作为对象,它们之间的转换(F)作为态射,那么就形成了一个范畴(C)。

如果有一组函数(G),既可以将C中的一种类型转换为另一种类型,还可以将这些类型间的转换(F)进行转换,那么很明显, 这一组函数就是对范畴进行了变换,就是函子,而变换后范畴仍是C,那么这个函子就是自函子。

自函子G可能对应于编程语言中一个结构体(struct)的构造函数和作用于结构体上map函数。例如Rust语言中的Option类型, 构造函数是let v = Option(x);,map函数是Option上定义的and_then

再看单子的定义,单子 M = (F, unit, flatMap)

Option类型已经具备了F(即Option类型), unit(即Option的构造函数),那么只需实现flatMap,那么Option就是一个单子了, 而这个flatMap就是Option上定义的flatten,因此Option类型还是一个单子。

一般在函数式编程语言中,构造函数被称之为 returnunit, flatMap 称之为 bind

参考

  1. A Monad is just a Monoid in the Category of Endofunctors — Let’s actually unravel this.

  2. 单子 (函数式编程)