【发布时间】:2012-07-06 19:03:39
【问题描述】:
我知道 monad 可以在 clojure 中使用,但是有没有人证实它们可以在 clojurescript 中使用?
【问题讨论】:
标签: clojure monads clojurescript
我知道 monad 可以在 clojure 中使用,但是有没有人证实它们可以在 clojurescript 中使用?
【问题讨论】:
标签: clojure monads clojurescript
Monad 在 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])) :as :require-macros 中需要前缀选择器。需要注意的一点是 ClojureScript 宏生成的代码必须针对 ClojureScript 中的功能。
【讨论】:
函数式编程方法 Monads 只需要具有更高阶函数和闭包的语言。你需要一个 ClojureScript monad 库。或者您可以继续以单子风格编写您的 ClojureScript
编辑:通过“monadic 风格”,我指的是编写和组合函数,这些函数接受和返回 monadic 值并实现三个monad laws。有太多人比我更有资格解释 monad,所以我将链接到 one of my personal favorite videos on monads。
【讨论】:
Chris Zheng 将 Fluokitten 库移植到 ClojureScript:https://github.com/purnam/brahmin
克里斯因此拥有great post reflecting on Monads。
Category Theory 的猫库也不错https://funcool.github.io/cats/latest/
ClojureScript 中的 Monads 活得很好。
【讨论】: