我知道 monad 在 clojure 中可用,但有没有人证实它们在 clojurescript 中工作?
3 回答
单子在 clojurescript 中工作。唯一的问题是您在 clojurescript [1] 中引用宏的方式。
我所做的是将所有 tools/macro.clj 和所有 monads.clj 代码复制到一个大文件中,然后我从 clojurescript 引用该文件。
这可能不是最优雅的方式,但它确实有效。
您可以在https://github.com/cotarmanach/clojurescript-monad-macros中找到该文件 (我将其复制到我的项目中并将命名空间更改为我的项目之一)
[1] 见https://github.com/clojure/clojurescript/wiki/Differences-from-Clojure
ClojureScript 的宏是用 Clojure 编写的,并通过命名空间声明中的 require-macros 关键字引用:
(ns my.namespace (:require-macros [my.macros :as my])) :require-macros 中需要 :as 前缀选择器。需要注意的一点是,由 ClojureScript 宏生成的代码必须针对 ClojureScript 中的功能。
函数式编程方法 Monads 只需要具有更高阶函数和闭包的语言。你需要一个 ClojureScript monad 库。或者你可以继续以单子风格编写你的 ClojureScript
编辑:通过“单子风格”,我指的是编写和编写函数,这些函数接受和返回单子值并实现三个单子定律。有太多人比我更有资格解释 monads,所以我只链接到我个人最喜欢的关于 monads 的视频之一。
Chris Zheng将Fluokitten库移植到 ClojureScript的一个很棒的端口: https ://github.com/purnam/brahmin
因此, Chris 有一篇很棒的帖子来反映 Monads。
类别理论的猫库也不错https://funcool.github.io/cats/latest/
ClojureScript 中的 Monads 活得很好。