【发布时间】:2011-01-08 16:53:20
【问题描述】:
在对one of my answers 的评论中,SO 用户 sdcwc 基本上指出了以下代码:
comb 0 = [[]]
comb n =
let rest = comb (n-1)
in map ('0':) rest
++ map ('1':) rest
可以替换为:
comb n = replicateM n "01"
这让我完全惊呆了。
现在我正在寻找教授这些高级概念的教程、书籍或 PDF。我不是在寻找针对初学者的“什么是单子”教程或解释replicateM 类型的在线参考。我想学习如何在单子中思考并有效地使用它们,如果你愿意的话,是单子“模式”。
【问题讨论】:
-
你可能找不到一本书可以为你做到这一点。这需要时间和思想上的重大转变。只需在 Haskell 中编程。很多。将其用于实际项目。参与社区,打高尔夫球,应用等式推理,玩。
-
这也不是什么先进的概念,考虑到所有的事情。它只是一个高阶函数和列表单子。 Grok list monad,你可以 grok 这段代码。
标签: haskell design-patterns monads