【问题标题】:Why are monads hard to explain? [closed]为什么单子很难解释? [关闭]
【发布时间】:2022-01-23 21:53:09
【问题描述】:

这不是 SO 上已经存在的无数问题之一

这是一个关于答案本身的问题。截至今天,what is a monad in functional programming? 查询的 Google 搜索结果约为 269,000 条,这里和网络上都有大量的尝试解释,从墨西哥卷饼到爱情的类比。似乎每一次“简单”回答的尝试都变成了一个迷宫,每一个类比都变得比下一个更令人困惑。我可能是错的,但在我看来,这种现象是单子独有的。

很多人尝试过,很少有人成功

monad 是什么让解释它们如此诱人但又如此难以捉摸?

【问题讨论】:

  • 这是一个相当基于意见的问题,但是,我认为,monad 在现实世界中没有一个很好的类比,所以要理解 monad,你需要了解 monad。也就是说,在面向对象语言中引入 OptionalStreamPromise 等类型可能会更容易。
  • 但是很多东西都是抽象的。似乎 Monad 是最难解释的
  • @AdamNathan 他们要求你首先了解很多其他的东西,太多的人试图在没有先决条件的情况下跳入单子。 IMO 理解 monad 的绝对最低要求,您需要了解以下内容:编译时和运行时之间的区别。泛型。功能组成。操纵其他类型的类型,例如Nullable<T>。了解联合类型和高级类型也很有帮助。许多程序员不使用编译语言,或者使用没有丰富类型系统的语言,或者只使用他们语言的类型系统。
  • FWIW 我认为explanation here 对许多使用流行的静态类型语言(C++/C#/Java/Typescript)的程序员来说是完全可以理解的。我什至不使用 C#,但它是我真正了解的对 monad 的第一个解释。
  • @JaredSmith 如果我理解正确,您是说只有牢牢掌握范畴论才能理解单子?我听说了,但是 IMO 复杂的事情可以直观地解释,而不会掩盖细节,为什么要试图解释它们呢?也许它们处于我们认为我们理解的事物和我们知道我们不理解的事物之间的边缘?我的意思是我们没有看到那么多的教程,比如米田嵌入或其他什么

标签: functional-programming monads


【解决方案1】:

我认为它是数学或编程中少数与现实世界没有明确隐喻的抽象之一。

因此,所有那些试图compare monads to burritos 的文章都失败了,因为 monad 不是与人类经验相对应的东西。

这似乎让很多人感到困惑,因为他们有一种内在的期望,即每一个抽象概念都有一个“真实”的根源。例如,monoids(不是 monads)是可以“组合在一起”的东西,比如数字相加或相乘,或者连接列表。

在我看来,单子更像是量子力学或相对论。任何使用人类经验来解释它们的尝试都失败了,因为它们超出了自然经验。

不过,就像量子力学或相对论一样,它们实际上并不难理解。 (说句公道话,我对这两者只有高中的理解,但我记得,一旦你看到了公式,它们并不难理解。)

我在教授 monad 方面的经验恰恰是,如果您放弃所有尝试通过将其与现实世界中的某些东西进行比较来使该概念易于理解,那么它的效果最好。

相反,我首先解释函子,它更容易理解。一旦人们掌握了函子,我就会告诉他们单子只是可以“展平”的函子。这里没有隐喻或明喻——只有“原始”抽象。

我还告诉人们做一些练习来熟悉这些抽象,就像在尝试理解(基本)量子力学和狭义相对论时查看证明和公式一样。

通常还需要几天(或几周)的练习才能让函子和 monad 的概念为人们所用,但根据我的经验,最好的教学策略是认识到现实世界中没有任何直接的隐喻有帮助。相反,教授“原始”公式会使事情变得更容易。

简而言之,单子很难解释,因为我们还没有在人类经验中识别出任何与这种有用抽象相对应的东西。在我看来,这可以与量子力学或相对论相媲美。我们的大脑进化为处理我们可以感知的事物,就像我们感知不到皮米级的事物或接近光速的速度一样,我们通常不会体验到任何让人联想到单子的事物。

但这并不意味着它们不是真实的。

【讨论】:

  • 我听到了你的观点,但是所有的范畴论都是抽象的(几乎按照定义),但 Monad 似乎产生了最大的混乱,而且我还没有看到用 1000 多个弱类比来解释物理学.通常薛定谔的猫或者用球来展示时空曲率就足够了。
  • @AdamNathan 也许是因为大多数人遇到的唯一范畴论是单子的概念?
  • @AdamNathan Shrodinger 的猫没有做任何解释量子力学的事情,事实上,它应该展示一个由量子叠加引起的悖论,它是一个很好的例子,说明了量子力学是如何实现的很难以直观的方式解释。这绝对不够,甚至没有尝试解释!
  • @juanpa.arrivillaga 是的,但它提供了足够的直觉来理解问题
  • @AdamNathan 不,它没有,它应该显示为什么它不直观,这就是重点!这是一个悖论。这就好像说芝诺悖论让经典力学更直观。
猜你喜欢
  • 2021-04-03
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
  • 2014-02-09
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多