最近刚到大学报到完,恰巧有些闲暇时间
闲来无事,来记录一下自己与一步一步推动我走到现在的manim之间的故事(指流水账
这篇虽然叫「与manim之间的往事」,但是里面很多都和manim无关(逃
Haskell中的函子单子等都与范畴论(category theory)有很多联系,所以打算简单了解一下范畴论的相关内容。
范畴论是数学的一门学科,以抽象的方法处理数学概念,将这些概念形式化成一组组的“物件”及“态射”。数学中许多重要的领域可以形式化为范畴。使用范畴论可以令这些领域中许多难理解、难捉摸的数学结论更容易叙述证明。
———— 维基百科
范畴本质上是一个简单的集合,一个范畴$\mathbf{C}$包含三个组成成分:
半群(semigroup)是一个集合$S$,它需要指定一个二元运算符$\oplus$,并且满足
$$
a\oplus b \in S\quad a, b\in S
$$
以及结合(associative)律:
$$
(a\oplus b)\oplus c = a\oplus (b\oplus c)
$$
这个二元运算符在Haskell的Semigroup中被定义为<>
函数:
函子(Functor)是一个类型类(typeclass),和其他类型类一样,它规定了其实例类必须实现的功能(例如Eq类型类规定了它的实例必须是可以比较是否相等的),Functor规定类它的实例必须是可以进行映射的。Functor要求使用fmap
:: (a -> b) -> f a -> f b 函数来实现这个功能,它接收一个a -> b类型的函数、一个内部元素为a类型的函子,返回一个内部元素为b类型的函子
Haskell有一个静态类型系统,任何变量、函数都会具有类型,并且有类型判断功能,没给出的类型会自动识别。
Type的首字母全为大写,常用的有:
Int
:整型,有上下界范围,-2147483647~2147483648