         pos-failures (filter (complement pred)
                              (:pos arg-spec))
         neg-failures (filter pred (:neg arg-spec))]
-    (if (c/and (empty? pos-failures)
+    (if (and (empty? pos-failures)
                (empty? neg-failures))
       (assoc arg-spec :valid? true)
       (merge arg-spec

(defn make-overload-fn [sym]
  (let [state-atom (atom (init-overload-state sym))]
    (fn [& args]
      (c/or (perform-special-op state-atom args)
            (perform-evaluation state-atom args)))))

(defn- reset-state [state]

(defmacro def-overload [sym arg-list & body]
  {:pre [(symbol? sym)]}
  (let [p (spec/conform ::def-overload-arg-list arg-list)]
    (if (= p ::speinvalid)
      (throw (ex-info
              "Bad def-overload arg list"
              {}))
