 (in-ns 'clojure.spec.test)
 ;;(alias 'stc 'clojure.spec.test.check)
 
-(defn- spec-checking-fn
+(defn spec-checking-fn
   [v f fn-spec]
+  (println "spec-checking-fn")
   (let [fn-spec (@#'s/maybe-spec fn-spec)
         conform! (fn [v role spec data args]
                    (let [conformed (s/conform spec data)]

                                 ed)))
                       conformed)))]
    (fn
     [& args]
     (if *instrument-enabled*
       (with-instrument-disabled
         (let [specs fn-spec]
           (let [cargs (when (:args specs) (conform! v :args (:args specs) args args))
                 ret (binding [*instrument-enabled* true]
                       (.applyTo ^clojure.lang.IFn f args))
                 cret (when (:ret specs) (conform! v :ret (:ret specs) ret args))]
             (when (and (:args specs) (:ret specs) (:fn specs))
               (conform! v :fn (:fn specs) {:args cargs :ret cret} args))
             ret)))
       (.applyTo ^clojure.lang.IFn f args)))))

;; old definition; https://github.com/clojure/clojure/blob/0bc837b9c25ae62185795b2bf2c7952bf6e12d9e/src/clj/clojure/spec.clj
#_(defn- spec-checking-fn
  [v f]
  (let [conform! (fn [v role spec data args]
                   (let [conformed (conform spec data)]
                     (if (= ::invalid conformed)
                       (let [ed (assoc (explain-data* spec [role] [] [] data)
                                  ::args args)]
                         (throw (ex-info
                                 (str "Call to " v " did not conform to spec:\n" (with-out-str (explain-out ed)))
                                 ed)))
                       conformed)))]
    (c/fn
     [& args]
     (if *instrument-enabled*
       (with-instrument-disabled
         (let [specs (fn-specs v)]
           (let [cargs (when (:args specs) (conform! v :args (:args specs) args args))
                 ret (binding [*instrument-enabled* true]
                       (.applyTo ^clojure.lang.IFn f args))
                 cret (when (:ret specs) (conform! v :ret (:ret specs) ret args))]
             (when (c/and (:args specs) (:ret specs) (:fn specs))
               (conform! v :fn (:fn specs) {:args cargs :ret cret} args))
             ret)))
       (.applyTo ^clojure.lang.IFn f args)))))

;; 1.9-alpha14 version
#_(defn- spec-checking-fn

                                         stacktrace-relevant-to-instrument
                                         first)
                             ed (merge (assoc (s/explain-data* spec [role] [] [] data)
                                              ::s/args args
                                              ::s/failure :instrument)
                                       (when caller
                                         {::caller (dissoc caller :class :method)}))]
                         (throw (ex-info
