什么是克罗克福德法律?

时间:2013-10-23 14:39:52

标签: haskell functional-programming monads

最近有人提到“克罗克福德定律”是关于单子的。谷歌在结果方面表现得很少。有谁知道它是什么?

2 个答案:

答案 0 :(得分:28)

假设“克罗克福德定律”是他在视频中早期提到的诅咒,他指的是这种常见现象(更为雄辩地描述here):

  1. 人X不懂单子
  2. 人X长期努力工作,并且修理单子
  3. 人X经历了惊人的启蒙感,想知道为什么其他人没有同样的开悟
  4. X人对其他人提出了可怕的,不完整的,不准确的,过于简单化和混乱的monad解释,这可能使他们认为monad是愚蠢的,愚蠢的,毫无价值的,过于复杂的,不必要的,不正确的,或者是精神错误的
  5. 以下是我认为The Curse存在的一些原因:

    • 忘记了所谓的“主流”编程中不同的函数式编程。如果你还没有很好地理解FP是什么,以及为什么人们这样做,使用FP构建的东西就没有意义。这样的事情需要时间和精力
    • 忘记与一等公民不同的捕获效果是如何来自系统提供的效果(例如异常或可变状态):与上述相同
    • 缺乏好的激励示例。你知道,“这就是问题所在,这是典型的解决方案,但是等等,典型的解决方案存在这些问题,所以让我们看看如何使用monad清理修复这些问题!”这比关于空指针异常的旧例子要多得多。
    • 忘记monad提供的内容 - 我看到很多“monad”示例实际上可以作为Functor或Applicative Functor示例工作
    • 忘记了在Haskell中构建monad。问题:如果monads突然消失,你还能在Haskell做I / O吗?
    • 认为monad需要语法支持或某种类型的系统
    • 认为monad只是关于可变状态或I / O

    我成了诅咒的受害者。 :(

    听起来像Crockford一样,基于最后的一个问题:“所以Monads基本上只是Builder模式?”恕我直言,这是一个很棒的视频,用于学习kick-ass Javascript技术,但如果你真的想了解monad,那就没那么好了。

    如果您正在尝试了解monad,只需花费时间和精力并做大量示例。从头开始重新实现所有monad instances and combinators。最终你也将成为诅咒的受害者!

答案 1 :(得分:0)

Crockford难题-Haskell初学者无法帮助其他Haskell初学者之前或之后自己理解单子。这种现象通常在Haskell初学者中出现,他们一直在努力弄清楚如何打印"Hello, world!"。偶尔会提供证据证明Haskell初学者依靠抽象数据类型(A.D.T.)的I / O模型是徒劳的,该抽象数据类型的接口基于数学的最抽象领域之一。有时,这是在入门课程中代替Haskell教授JavaScript的原因之一。有传言说克莱数学研究所正在考虑将其纳入千禧年问题。

备用名称:克罗克福德复合体,克罗克福德定律