最近有人提到了关于单子(monad)的“克罗克福德定律”。谷歌显示的结果很少。有人知道这是什么吗?
假设“克罗克福德定律”是他在视频开头提到的诅咒,他指的是这种常见现象(描述得更有说服力 here):
X 人不懂单子(monad) X 人长期努力工作,并且探索单子(monad) X 人体验到了惊人的开悟感,想知道为什么其他人没有同样开悟 X 人对其他人给出了可怕、不完整、不准确、过于简单和令人困惑的 monad 解释,这可能使他们认为 monad 是愚蠢的、愚蠢的、毫无值(value)的、过于复杂的、不必要的、不正确的或精神错乱 以下是我认为 The Curse 存在的一些原因:
忘记了函数式编程与所谓的“主流”编程有何不同。如果您还没有很好地理解什么是 FP,以及人们为什么要这样做,那么使用 FP 构建的东西将毫无意义。这样的事情需要时间和精力忘记作为一等公民的捕获效果与系统提供的效果有何不同(例如异常或可变状态):同上缺乏好的激励例子。你知道,诸如“这就是问题,这是典型的解决方案,但是哦,等等,典型的解决方案有这些问题,所以让我们看看我们如何使用 monad 彻底解决这些问题!”这比关于空指针异常 的老旧示例要多得多。
忘记了 monad 提供了什么——我看到的许多“monad”示例实际上都可以作为 Functor 或 Applicative Functor 示例 忘记了单子(monad)是在 Haskell 中构建的。问题:如果 monads 突然消失了,你还能在 Haskell 中做 I/O 吗? 认为 monad 需要句法支持,或某种类型系统 认为 monad 只是关于可变状态或 I/O 我已经成为诅咒的受害者。 :(
听起来 Crockford 也有,基于最后的一个问题:“所以 monads 基本上只是 Builder 模式?”恕我直言,这是一个学习踢屁股 Javascript 技术的好视频,但如果你真的想了解 monad,那就不是很好了。
如果您想了解 monad,只需投入时间和精力并做大量示例即可。重新实现所有的 monad
instances and combinators从头开始。最终,您也将成为诅咒的受害者!