最近有人提到了关于单子的“克罗克福德定律”。谷歌显示的结果很少。有人知道这是什么吗?
问问题
3085 次
2 回答
33
假设“克罗克福德定律”是他在视频开头提到的诅咒,他指的是这种常见现象(这里描述得更有说服力):
- X 人不理解单子
- X 人长期而努力地工作,并且摸索着 monads
- 人 X 体验到惊人的开悟感,想知道为什么其他人没有同样开悟
- 人 X 对其他人给出了可怕的、不完整的、不准确的、过于简单化和令人困惑的 monad 解释,这可能使他们认为 monad 是愚蠢的、愚蠢的、毫无价值的、过于复杂的、不必要的、不正确的或精神错乱的
以下是我认为 The Curse 存在的一些原因:
- 忘记了函数式编程与所谓的“主流”编程有何不同。如果您还没有很好地理解什么是 FP,以及人们为什么要这样做,那么使用 FP 构建的东西将毫无意义。这样的事情需要时间和精力
- 忘记作为一等公民的捕获效果与系统提供的效果有何不同(例如异常或可变状态):同上
- 缺乏好的激励例子。你知道,诸如“这就是问题,这是典型的解决方案,但是哦,等等,典型的解决方案有这些问题,所以让我们看看我们如何使用 monad 彻底解决这些问题!” 这比关于空指针异常的旧示例要多得多
- 忘记了 monad 提供了什么——我看到的许多“monad”示例实际上可以作为 Functor 或 Applicative Functor 示例工作
- 忘记了单子是在 Haskell 中构建的。问题:如果 monads 突然消失了,你还能在 Haskell 中做 I/O 吗?
- 认为 monad 需要语法支持或某种类型系统
- 认为 monad 只是关于可变状态或 I/O
我已经成为诅咒的受害者。:(
听起来 Crockford 也有,基于最后的一个问题:“所以 monads 基本上只是 Builder 模式?” 恕我直言,这是一个学习踢屁股 Javascript 技术的好视频,但如果你真的想了解 monad,那就不是很好了。
如果您想了解 monad,只需投入时间和精力并做大量示例即可。从头开始重新实现所有 monad实例和组合器。最终,您也将成为诅咒的受害者!
于 2013-10-23T19:59:22.327 回答
2
Crockford 难题- Haskell 初学者无法帮助其他 Haskell 初学者在自己理解单子之前或之后理解单子;这种现象通常出现在试图弄清楚如何打印的 Haskell 初学者身上"Hello, world!"
。偶尔提供一个证明向 Haskell 初学者展示依赖于抽象数据类型 (ADT) 的 I/O 模型是徒劳的,该抽象数据类型 (ADT) 的接口基于“最抽象的数学分支之一”。有时作为在入门课程中教授 JavaScript 而不是 Haskell 的原因之一。据传,克莱数学研究所正在考虑将其纳入千年问题。
别名:克罗克福德复合体,克罗克福德定律。
于 2020-08-11T00:04:13.637 回答