请原谅“游戏”这个词。我有点困惑 含义 主张的内容以及因此产生的问题。

背景: 我涉足范畴论以了解各种理论基础 分类结构 以及它们与函数式编程(FP)的相关性。(在我看来)Cat 和 FP 交叉点上的“至高无上的宝石”之一就是这样的声明:

A monad is just a monoid in the category of endofunctors

是什么 大不了 关于这一观察结果以及它的程序/设计含义是什么?来源如 信号传输 FP 上的许多文本似乎都暗示着 令人兴奋 我对这个概念很了解,但也许我看不到所暗示的微妙之处。

我是这样理解的:

知道某事是一个 幺半群 使我们能够推断出我们可以在一定范围内工作的事实 映射减少 设置操作的关联性允许我们以任意顺序拆分/组合计算,即 (a1+a2)+a3 == a1+(a2+a3). 。它还可以允许人们将其分布到机器上并实现高度并行化。(因此,我可以在精神上从 theoretical construct -> computer science understanding -> practical problem solving.)

对我来说是 明显的 (作为研究 Cat 的结果)看到单子有一个 幺半群 内函子范畴内的结构。然而,当我们用这样的心理模型进行编码时,我们可以从中得出什么含义,以及它对程序/设计/工程的影响是什么?

这是我的解释:

  • 理论意义: 所有可计算问题的核心都是 幺半群 从某种意义上说。
    • 它是否正确?如果是这样,我可以理解 启示. 。这是理解可计算问题的概念/结构的不同视角,如果仅来自图灵/Lambda 计算模型,这些问题就不会那么明显,我可以安心。
    • 还有更多吗?
  • 实际意义: 难道只是为了提供一个案例 do-编程的符号风格?也就是说,如果事物是​​幺半群的,我们就能更好地理解事物的存在 do/for 在 Haskell/Scala 中构造。是这样吗?即使我们不知道幺半群的基础,我们也不需要 调用幺半群性 自绑定以来提出此声明 >>=flatMap 构造被定义为关联的。那么什么给出呢?或者这更多地与 可折叠性 一元结构和 是间接的 启示 这是被暗示的吗?

问题): 我在这里缺少什么?难道这只是 认出 事实上,单子是广义幺半群并且它们可以是 合并的 以任何类似于映射减少操作(如幺半群)的顺序?了解幺半群性质有什么帮助 提升 代码/设计以任何方式?展示这种差异之前/之后的一个很好的例子是什么(在了解单子/单态性之前和之后)?

有帮助吗?

解决方案

这个答案可能并不正是您正在寻找的。也就是说,我认为这里可能过分强调了这种特征的重要性。报价单

X 中的单子只是 X 的内函子范畴中的幺半群

最初来自Mac Lane's 职业数学家的类别, ,它似乎对 monad 的定义很有帮助,乍一看,单子的定义似乎很陌生。通过将其描述为特定幺半群类别中的幺半群,读者可以获得另一种视角。请注意,有关 monad 的章节实际上位于有关 Monoidal 类别的章节之前:该评论的目的是提供帮助,而不是精确(稍后才变得精确)。

随后,詹姆斯·艾里 (James Iry) 臭名昭著的文章中对这句话进行了重新表述。 编程语言的简短、不完整且大多是错误的历史.

单子只是内函子范畴中的幺半群,有什么问题吗?

就像文章中那样,断章取义地呈现,其目的是为了娱乐。这句话后来成为函数式编程社区中的一个模因,主要是因为它很有趣,而不是函数式编程的关键见解(尽管它也确实激起了函数式程序员的好奇心,将他们带入范畴论的奇妙世界) )。我的观点是,这种特征虽然有用且有趣,但并不像人们从其受欢迎程度中想象的那么重要。

然而,这并不是说从这个特征中无法获得洞察力。首先,让我指出,虽然带有乘法和单位的 monad 的呈现明显暗示了幺半群,但正如您所指出的,带有绑定和返回操作的 Kleisli 呈现却不是。Kleisli 演示在函数式编程中很常见,因此从这个角度来看,将幺半群刻画为更有趣。

从理论角度来看,其中一个见解确实​​是计算机科学(和数学)中的许多自然结构都是幺半群的。从单子的角度来看(特别是它们与 笛卡尔运算劳维尔理论),幺半群结构对应于取代结构(相当于组合结构)。替换在计算机科学中无处不在(例如,类型理论中的避免捕获替换或树的嫁接)。Monad 只是又一个例子。

虽然正式理解所讨论的陈述可能没有启发性,但我建议理解对 monad 的不同观点是有启发性的,因为它可以让你看到 monad 的不同使用方式(例如作为容器,描述代数结构,描述多组成系统等)。如果没有看到它们出现在不同的灯光下,很难理解它们出现的频率。从这个意义上说,单子作为幺半群只是一种观点(而且可能不是最具启发性的)。

最后,虽然 monad 本身在纯函数式编程中无疑非常有用,但我不确定将 monad 视为 monoids 的观点本身是否有帮助。我认为克莱斯利的观点恰好是等价的,是这里最具启发性的观点。

总而言之,这个回应可能有点令人失望:我认为理解这种关系实际上并没有那么有帮助或启发(即用于编程)。然而,在理论上考虑单子时,与其他观点一样,这是一个值得牢记的有用观点。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top