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

      via)))

(s/fdef specs
        :args (s/cat :problems :spec/problems)
        :ret :spec/specs)
(defn ^:private specs
  "Given a collection of problems, returns the specs for those problems, with duplicates removed"
  [problems]

;;;;;; internal specs ;;;;;;

(s/def ::singleton (s/coll-of any? :count 1))
(s/def :expound.spec/spec keyword?)
(s/def :expound.spec/specs (s/coll-of :expound.spec/spec))
(s/def :expound.spec.problem/via (s/coll-of :expound.spec/spec :kind vector?))
(s/def :expound.spec/problem (s/keys :req-un [:expound.spec.problem/via]))
(s/def :expound.spec/problems (s/coll-of :expound.spec/problem))

(s/def :expound.printer/show-valid-values? boolean?)
(s/def :expound.printer/value-str-fn ifn?)
