有太多关于 monad 的教程说......“看!这是一个我们可以使用 monad 的案例”或“这就是 monad 的用途”。我想知道的是人们用来得出他们可以对自己说的结论的一些步骤是什么 - “Gee Whiz!看起来我们可以在这里使用 monad!”
因此,当有人告诉我......“(废话)与 monad 无关......”,这真的无助于我回答我的问题,这些问题是:
如果有人有兴趣提供帮助,我在这里开始了一个关于 monad 的很长的问题 - Map and Reduce Monad for Clojure... What about a Juxt Monad? .
回到这个问题:
我们什么时候应该使用 monad 而不是宏,反之亦然?
defmacro
而且效果很好。 如果我们有宏,为什么我们需要 Clojure 中的 monad?
最佳答案
我已经使用 Clojure 两年了,我唯一一次使用 monad 是为了证明它可以完成。我从来不需要它们来编写“真正的”代码。
Monad 在 Haskell 中更为常见,因为:
我的建议是专注于 Clojure 中的标准函数式编程。除非你看到你真的需要 monad,否则我不会花太多时间尝试引入它们。
宏是一个稍微不同的问题:它们用于编译时代码生成和语言语法的扩展(可能包括 DSL,尽管 DSL 不一定需要宏)。当以下两种情况都为真时,我使用宏:
附言如果你真的对 Clojure 的 monad 感兴趣,这里有两个我个人觉得非常好的视频:
关于macros - 在 Clojure 中,我们什么时候应该使用 monad 而不是宏,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9900114/