ClassNotFoundException:clojure.algo.monads

ClassNotFoundException: clojure.algo.monads

我正在尝试 require clojure.algo.monads,我对 clojure 有点困惑 import/require/use

; at lein...
:main monads.core/-main
:dependencies [[org.clojure/clojure "1.6.0"]
                 [org.clojure/algo.monads "0.1.5"]])

安装依赖:lein deps

和这个要测试的简单代码

(ns monads.core
  (require clojure.algo.monads))


(defn -main [& args]
  (clojure.algo.monads)
  (println "Hello, World!"))

莱因运行

Exception in thread "main" java.lang.ClassNotFoundException: clojure.algo.monads, compiling:(monads/core.clj:6:3)
at clojure.lang.Compiler.analyze(Compiler.java:6464)
at clojure.lang.Compiler.analyze(Compiler.java:6406)
at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3665)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:6646)
...

我做错了什么?

-main 函数中的表达式 (clojure.algo.monads) 被视为对 clojure.algo.monads 的调用,它应该是特殊形式、宏或函数。但是,clojure.algo.monads 是一个名称空间。没有Java class 文件与之对应。这导致 ClassNotFoundException.

我建议您需要 clojure.algo.monads 命名空间并仅引用您要使用的有限函数或宏。这是一个例子。

user> (require '[clojure.algo.monads :refer [domonad maybe-m]])
nil

user> (defn f
        [x]
        (domonad maybe-m
                 [a x
                  b (inc x)]
                 (* a b)))
#'user/f

user> (f 3)
12

user> (f nil)
nil