在我回答的一个问题的评论中,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
类型的内容。我想学习如何以单子的思维方式有效地使用它们,类似于单子“模式”。