 ;;;;;; 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?)


(s/fdef error-message
        :args (s/cat :k qualified-keyword?)
        :ret string?)
(defn error-message
  "Given a spec named `k`, return its human-readable error message"
  [k]

  (fn [explain-data]
    (print (printer-str opts explain-data))))

(s/fdef printer
        :args (s/cat :explain-data map?)
        :ret nil?)
(defn printer
  "Prints `explain-data` in a human-readable format"
  [explain-data]
  ((custom-printer {}) explain-data))

(s/fdef expound-str
        :args (s/cat :spec :expound.spec/spec
                     :form any?)
        :ret string?)
(defn expound-str
  "Given a `spec` and a `form`, either returns success message or returns a human-readable explanation as a string."
  [spec form]
  ;; expound was initially released with support
  ;; for CLJS 1.9.542 which did not include
