            (defmsg '~k ~error-message)
            (s/def ~k ~spec-form))))))
 
-(defn explain-result [check-result]
+(defn explain-result
+  "Given a result from `clojure.spec.test.alpha/check`, prints a summary of the result."
+  [check-result]
   (when (= s/*explain-out* s/explain-printer)
     (throw (ex-info "Cannot print check results with default printer. Use 'set!' or 'binding' to use Expound printer." {})))
   (s/*explain-out* check-result))
 
-(defn explain-result-str [check-result]
+(defn explain-result-str
+  "Given a result from `clojure.spec.test.alpha/check`, returns a string summarizing the result."
+  [check-result]
   (with-out-str (explain-result check-result)))
 
-(defn explain-results [check-results]
+(defn explain-results
+  "Given a sequence of results from `clojure.spec.test.alpha/check`, prints a summary of the results."
+  [check-results]
   (doseq [check-result (butlast check-results)]
     (explain-result check-result)
     (print "\n\n"))
   (explain-result (last check-results)))
 
-(defn explain-results-str [check-results]
+(defn explain-results-str
+  "Given a sequence of results from `clojure.spec.test.alpha/check`, returns a string summarizing the results."
+  [check-results]
   (with-out-str (explain-results check-results)))


#?(:clj
   (defmacro def
     "Define a spec with an optional error message.

Replaces `clojure.spec.alpha/def` but optionally takes a human-readable `error-message` (will only be used for predicates) e.g. 'should be a string'."
     ([k spec-form]
      `(s/def ~k ~spec-form))
     ([k spec-form error-message]

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

