   (matcha/run-match (matcha/isa? :parent) :child) ; => passes
   (matcha/run-match (matcha/isa? :child) :child) ; => fails"
   [parent]
-  {:match #(core/isa? % parent)
-   :description (str "something with a parent of " parent)})
+  (make-record-matcher
+    #(core/isa? % parent)
+    (str "something with a parent of " parent)))
 
 (def
   ^{:doc

  (matcha/run-match (matcha/= 1) 1) ; => passes
  (matcha/run-match (matcha/= 1) 2) ; => fails"
  [a]
  {:match (fn [b] (core/= a b))
   :description (pr-str a)
   :describe-mismatch
   (fn [x]
     (let [[things-in-a things-in-x things-in-both] (data/diff a x)]
       (str (describe-class-mismatch x)
            (if (not= things-in-a things-in-x)
              (str

                "\n    diff:"
                "\n       +: " (pp things-in-a)
                "\n       -: " (pp things-in-x))))))})

(defn <=
  "matches based if the value given is greater-than or equal to


  (matcha/run-match matcha/empty? [1]) ; => passes
  (matcha/run-match matcha/empty? [])  ; => fails"
  (make-record-matcher
    core/empty?
    "an empty collection"))

(defn format-message
  "turns the results of a failing match into a human readable error message,
  suitable for printing with clojure.core/print or clojure.core/println"
  [result]
  (assert (clojure.core/not (:pass? result true)) (str "format message should only be used with a failing result, but it was given: " (pr-str result)))
  (str "\nExpected: " (:expected result)
