I am trying to write a higher order function in clojure.spec with version 1.9.0-alpha11
and have not been able to get the validation to execute against the returned function.
Using the example in the Higher order functions section of the clojure.spec guide, I define an adder
form as:
(defn adder [x] #(+ x %))
As described in the guide, I create a spec as:
(s/fdef adder
:args (s/cat :x number?)
:ret (s/fspec :args (s/cat :y number?)
:ret number?)
:fn #(= (-> % :args :x) ((:ret %) 0)))
When I execute it in the repl, an exception is thrown instead of the desired spec validation error:
user> (def add2 (adder 2))
#'user/add2
user> (add2 2)
4
user> (add2 "s")
ClassCastException java.lang.String cannot be cast to java.lang.Number clojure.lang.Numbers.add (Numbers.java:128)
user>
I attempted to turn spec'ing on with (stest/instrument `adder)
. While this works for functions, it is not working for Higher order functions.