(require '[clojure.spec :as s] '[clojure.spec.test :as st]) (defn foo [^double val] val) (s/fdef foo :args (s/cat :val double?)) (st/instrument `foo) (foo 5.2) user=> (foo 5.2) ClassCastException clojure.spec.test$spec_checking_fn$fn__13069 cannot be cast to clojure.lang.IFn$DO user/eval6 (NO_SOURCE_FILE:5) user/eval6 (NO_SOURCE_FILE:5) clojure.lang.Compiler.eval (Compiler.java:6951) clojure.lang.Compiler.eval (Compiler.java:6914) clojure.core/eval (core.clj:3187) clojure.core/eval (core.clj:3183) clojure.main/repl/read-eval-print--9704/fn--9707 (main.clj:241) clojure.main/repl/read-eval-print--9704 (main.clj:241) clojure.main/repl/fn--9713 (main.clj:259) clojure.main/repl (main.clj:259) clojure.main/repl-opt (main.clj:323) clojure.main/main (main.clj:422)
Cause: spec replaces var values with instrumented functions that will not work with primitive function interfaces
Approach: Take primitive interfaces into account and make them work, or document/fail that instrumentation will not work with these.
Ubuntu 15.10Using boot 2.6.0 on openjdk version "1.8.0_91"
Running into this issue while spec'ing clojure.core/partition-all.
(require '[clojure.spec :as s] '[clojure.spec.test :as st]) (defn foo [^double val] val) (s/fdef foo :args (s/cat :val double?)) (st/instrument `foo) (foo 5.2) user=> (foo 5.2) ClassCastException clojure.spec.test$spec_checking_fn$fn__13069 cannot be cast to clojure.lang.IFn$DO user/eval6 (NO_SOURCE_FILE:5) user/eval6 (NO_SOURCE_FILE:5) clojure.lang.Compiler.eval (Compiler.java:6951) clojure.lang.Compiler.eval (Compiler.java:6914) clojure.core/eval (core.clj:3187) clojure.core/eval (core.clj:3183) clojure.main/repl/read-eval-print--9704/fn--9707 (main.clj:241) clojure.main/repl/read-eval-print--9704 (main.clj:241) clojure.main/repl/fn--9713 (main.clj:259) clojure.main/repl (main.clj:259) clojure.main/repl-opt (main.clj:323) clojure.main/main (main.clj:422)Cause: spec replaces var values with instrumented functions that will not work with primitive function interfaces
Approach: Take primitive interfaces into account and make them work, or document/fail that instrumentation will not work with these.