 ;;;;;; internal specs ;;;;;;
 
 (s/def ::singleton (s/coll-of any? :count 1))
-(s/def :spec/spec keyword?)
-(s/def :spec/specs (s/coll-of :spec/spec))
-(s/def :spec.problem/via (s/coll-of :spec/spec :kind vector?))
-(s/def :spec/problem (s/keys :req-un [:spec.problem/via]))
-(s/def :spec/problems (s/coll-of :spec/problem))
+;; TODO - rename within expound namespace, I can't take top-level spec namespace
+;; (s/def :spec/spec keyword?)
+;; (s/def :spec/specs (s/coll-of :spec/spec))
+;; (s/def :spec.problem/via (s/coll-of :spec/spec :kind vector?))
+;; (s/def :spec/problem (s/keys :req-un [:spec.problem/via]))
+;; (s/def :spec/problems (s/coll-of :spec/problem))
 
 (s/def :expound.printer/show-valid-values? boolean?)
 (s/def :expound.printer/value-str-fn ifn?)

(defn ^:private spec-w-error-message? [via pred]
  (boolean (let [last-spec (last via)]
             (and (not= ::s/unknown pred)
                  (error-message last-spec)
                  (s/get-spec last-spec)))))


                          ::s/value form)
                   nil))))

(s/fdef expound
        :args (s/cat :spec :expound.spec/spec
                     :form any?)
        :ret nil?)
(defn expound
  "Given a `spec` and a `form`, either prints a success message or prints a human-readable explanation"
  [spec form]
  (print (expound-str spec form)))

