方永、南天紫云

道亦有道

理解单子是自函子范畴上的幺半群(一)
2024年08月29日

A monad is just a monoid in the category of endofunctors.

单子只不过是自函子范畴中的幺半群 这句话在编程领域闻名遐迩,在数学视角描述了单子(monad)是什么。

有很多人或尝试用某种特定的编程语言去阐释,或用数学语言阐释,或二者杂糅之。

看了许多他人的阐释,觉得有必要整理一下,有一个明晰地描述,尽管不够准确、简洁。

单子的起点概念是范畴,范畴的概念其实很简单,就是对象加态射。

对象(object),或者说是东西、事物;

态射是从一个对象到另一个对象的映射,或者说变换,形如 f : a → b,还应具备 结合律和单位态射两个属性。结合律和自然数加法的结合律类同,如1 + (2 + 3) = (1 + 2) + 3,单位态射类似于加法中的y = x,即一个函数,输入和输出相同。那么,任意一个态射和单位态射相结合,得到的仍是这个态射。

由一组对象和这些对象间的态射就构成了范畴。