【发布时间】:2022-01-23 21:53:09
【问题描述】:
这不是 SO 上已经存在的无数问题之一
- What is a monad?
- Monad in plain English? (For the OOP programmer with no FP background)
- A monad is just a monoid in the category of endofunctors, what's the problem?
这是一个关于答案本身的问题。截至今天,what is a monad in functional programming? 查询的 Google 搜索结果约为 269,000 条,这里和网络上都有大量的尝试解释,从墨西哥卷饼到爱情的类比。似乎每一次“简单”回答的尝试都变成了一个迷宫,每一个类比都变得比下一个更令人困惑。我可能是错的,但在我看来,这种现象是单子独有的。
很多人尝试过,很少有人成功
monad 是什么让解释它们如此诱人但又如此难以捉摸?
【问题讨论】:
-
但是很多东西都是抽象的。似乎 Monad 是最难解释的
-
@AdamNathan 他们要求你首先了解很多其他的东西,太多的人试图在没有先决条件的情况下跳入单子。 IMO 理解 monad 的绝对最低要求,您需要了解以下内容:编译时和运行时之间的区别。泛型。功能组成。操纵其他类型的类型,例如
Nullable<T>。了解联合类型和高级类型也很有帮助。许多程序员不使用编译语言,或者使用没有丰富类型系统的语言,或者只使用他们语言的类型系统。 -
FWIW 我认为explanation here 对许多使用流行的静态类型语言(C++/C#/Java/Typescript)的程序员来说是完全可以理解的。我什至不使用 C#,但它是我真正了解的对 monad 的第一个解释。
-
@JaredSmith 如果我理解正确,您是说只有牢牢掌握范畴论才能理解单子?我听说了,但是 IMO 复杂的事情可以直观地解释,而不会掩盖细节,为什么要试图解释它们呢?也许它们处于我们认为我们理解的事物和我们知道我们不理解的事物之间的边缘?我的意思是我们没有看到那么多的教程,比如米田嵌入或其他什么
标签: functional-programming monads