 
 	    :else 
 	    (better-of candidate best-so-far)))))
-    
+
+(defmulti seq-comparison (fn [actual expected kind]
+			   (or (some #{:in-any-order} kind) :strict-order)))
+
 (defmethod seq-comparison :in-any-order
   [actual expected kind]
 

	:else
	(rotations expected)))

(defn closer-match? [candidate best-so-far]
  (> (count (:actual-found candidate))
     (count (:actual-found best-so-far))))

(defn better-of [candidate best-so-far]
  (if (closer-match? candidate best-so-far) candidate best-so-far))


(defn tack-on-to [hashmap & kvs]
  (merge-with conj hashmap (apply (partial assoc {}) kvs)))


(defmulti seq-comparison (fn [actual expected kind]
			   (or (some #{:in-any-order} kind) :strict-order)))


(defn sequence-success? [comparison]
  (= (count (:expected-found comparison))
     (count (:expected comparison))))

(defn full-sequence-match? [actual expected kind]
  (let [comparison (seq-comparison actual expected kind)]
    (sequence-success? comparison)))

(defn in-any-order--one-permutation [actual expected kind]
  (let [starting-candidate  {:actual-found [], :expected-found [],


; Searches through particular types of actual results

(defn standardized-arguments [actual expected kind]
  ;; The choice to make these (throw Error) rather than be falsey is purely
  ;; one of implementation convenience.
