haskell - 什么是克罗克福德定律?

标签 haskell functional-programming monads

最近有人提到了关于单子(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从头开始。最终,您也将成为诅咒的受害者!

    关于haskell - 什么是克罗克福德定律?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19544794/

    相关文章:

    scala - 根据值减少迭代器

    haskell - 纯函数式语言如何处理基于索引的算法?

    haskell - 针对一元结果的模式匹配?

    haskell - 如何向此 monad 转换器添加列表或 List?

    haskell - 有没有更好的方法来做 Map k [v] -> Maybe (Map k v)?

    haskell - 纯 Lambda 微积分 - 和函数

    Guards 中的 Haskell 类型解构

    functional-programming - 以下函数在Scheme编程语言中的作用是什么

    javascript - 是否有有效的数组 monad 转换器?

    haskell - 使用 Sublime 2 进行 Haskell 开发?