    (fn [x]
      (let [[things-in-a things-in-x things-in-both] (data/diff a x)]
        (str (describe-class-mismatch x)
-         "\n+" (pr-str things-in-a)
-         "\n-" (pr-str things-in-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

(defn standard-describe-mismatch [x]
  (pr-str x))

(defn describe-class-mismatch [x]
  (str (pr-str x)
       (if (clojure.core/nil? x)
         ""
         (str " <" (class x) ">"))))


(defn describe-mismatch-feature [x feature-name feature-mismatch]
  (str (standard-describe-mismatch x) " with " feature-name " " feature-mismatch))

(defn on
  "combinator. Passes if the (f the-value) matches the matcher"

  (:require [clojure.string :as string]
            [clojure.core :as core]
            [clojure.test :as test]
            [clojure.data :as data]
            [clojure.pprint :as pprint]))
;; Matcher
;; Match
;;
