在范畴论中,一个单子在范畴 \mathcal{C} 中是一个对象$M$,带有态射(操作) \mu: M \times M \rightarrow M (乘法)和 \eta: I \rightarrow M (单位),其中$I$是恒等对象,满足结合性和单位定律。 这个结构反映了 \text{End}(\mathcal{C}) 中单子对象的范畴,其中: - 对象是endofunctor F: \math...
多次检查 Null/None 等等. 为了实现更优雅的方案, 在上面的例子中, 我们使用了一种设计模式, 包含了 unit 和 bind 两种函数. 这种设计模式就叫做Monad. 本质上来说, bind 函数实现了 胶水代码, 而 unit 实现了初始化代码. 这就让我们可以在一行之内解决问题: ...
Monad 不就是个自函子范畴上的幺半群,这有什么难理解的(A monad is just a monoid in the category of endofunctors)—— Phillip Wadler 自函子 Endofunctor 什么是函数(Function)?函数表达的映射关系在类型上体现在特定类型(proper type)之间的映射。什么是自函数(Endofunction)?identity :: Number ...
unit(x) 产生了初始值 v1, 然后 bind(v1, f1) 生成了新的中间值 v2, 然后在被用到了 bind(v2, f2) 中, 整个过程一直持续到最终结果产生. 使用这个模式, 配合上不同的 unit 和 bind 函数, 我们可以实 现多种不同的函数组合. 标准的 Monad 库提供了几种预定义好的常用 monad(也就是 unit 和 bind...
然后"自函子范畴上的幺半群", 也就是说限定在"自函子"而不是"普通集合元素"的幺半群了. 这个不能准确描述, 但是应该足够提供一些观念上的理解了, Monad 是怎么出来的... Monad class 在Haskell 里定义又要再另外理解了, 首先对幺半群来说还是清晰的, ...
范畴为高阶类型。 函子为高阶函数。函子的输入为态射。函子为建立在态射基础上的高阶函数。函子用于保持范畴间映射的结构。态射用于范畴内部的转换。 群为运算规则的约束。 自函子是一类比较特殊的函子,它是一种将范畴映射到自身的函子 (A functor that maps a category to itself)。
monad 就是自函子范畴上的一个"幺半群" (?) 我们来尝试理解一下这句话在说什么, 首先这里的"幺半群"是在通常意义上的幺半群的一个推广, 也就是说知道什么是幺半群的同学可以先忘掉原有概念 一个范畴categoryCC是指下述资料: 一些对象, 构成集合Ob(C)Ob(C); ...
Monad 是一个自函子范畴上的幺半群 鉴于本人数学基础实在太差, 一直没能理解. 其实撇开这些数学概念来说, Monad 本身是一个非常简 单的东西, 像是 Rust 中的 Option 一样, 一旦理解, 就发现再也回不去之前没有他的世界了. Monad 并不仅局限于函数式编程语言, 也可以用其他的语言来表示. ...
所有一切的开始都是因为这句话:一个单子(Monad)说白了不过就是自函子范畴上的一个幺半群而已,有什么难以理解的。第一次看到这句话是在这篇文章:程序语言简史(伪)。这句话出自Haskell大神Philip Wadler,也是他提议把Monad引入Haskell。Monad是编程领域比较难理解的概念之一,大部分人都是闻"虎"而色变,更不用说...
Monad不就是个自函子范畴上的幺半群,这有什么难理解的(A monad is just a monoid in the category of endofunctors) —— Phillip Wadler 自函子(Endofunctor) 什么是函数(Function)? 函数表达的映射关系在类型上体现在特定类型(proper type)之间的映射。