gpt4 book ai didi

haskell - 单子(monad)只是内仿函数类别中的一个幺半群,有什么问题?

转载 作者:行者123 更新时间:2023-12-03 15:46:02 29 4
gpt4 key购买 nike

下面是谁先说的?

A monad is just a monoid in the category of endofunctors, what's the problem?



在不太重要的一点上,这是真的吗?如果是这样,您能否给出解释(希望没有太多 Haskell 经验的人可以理解)?

最佳答案

那个特别的措辞是詹姆斯·艾里(James Iry)的,来自他非常有趣的 Brief, Incomplete and Mostly Wrong History of Programming Languages ,其中他虚构地将其归因于菲利普·瓦德勒。
原始引述来自 Saunders Mac Lane 的工作数学家类别,类别理论的基础文本之一。 Here it is in context ,这可能是准确了解其含义的最佳场所。
但是,我会打一针。原句是这样的:

All told, a monad in X is just a monoid in the category of endofunctors of X, with product × replaced by composition of endofunctors and unit set by the identity endofunctor.


X 这里是一个类别。 Endofunctor 是从一个类别到其自身的仿函数(就函数式程序员而言,这通常是所有 Functor s,因为他们主要处理一个类别;类型的类别 - 但我离题了)。但是您可以想象另一个类别,即“X 上的内仿函数”类别。这是一个范畴,其中对象是内仿函数,态射是自然变换。
在这些内仿函数中,其中一些可能是单子(monad)。哪些是单子(monad)?正是那些在特定意义上是幺半群的。与其详细说明从 monad 到 monoid 的确切映射(因为 Mac Lane 做得比我希望的要好得多),我只是将它们各自的定义并排放置并让您比较:
一个幺半群是...
  • 一套,小号
  • 一个操作, • : S × S → S
  • S的一个元素, e : 1 → S

  • ...满足这些法律:
  • (a • b) • c = a • (b • c),对于 S 中的所有 a、b 和 c
  • e • a = a • e = a,对于 S 中的所有 a

  • 一个单子(monad)是...
  • 一个内仿函数, T : X → X (在 Haskell 中,类型构造函数 * -> * 带有 Functor 实例)
  • 自然的转变, μ : T × T → T ,其中 × 表示仿函数组合(μ 在 Haskell 中称为 join )
  • 自然的转变, η : I → T ,其中 I 是 X 上的恒等函数(η 在 Haskell 中称为 return )

  • ...满足这些法律:
  • μ ∘ Tμ = μ ∘ μT
  • μ ∘ Tη = μ ∘ ηT = 1(恒等式自然变换)

  • 稍稍眯起眼睛,您可能会看到这两个定义都是相同 abstract concept 的实例。 .

    关于haskell - 单子(monad)只是内仿函数类别中的一个幺半群,有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3870088/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com