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

(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]

;;;------- Misc -------
(defn check-valid [arg-spec]
  {:pre [(spec/valid? ::arg-spec arg-spec)]}
  (when (not (:valid? arg-spec))
    (throw (ex-info
            (str "Invalid arg-spec '" (:desc arg-spec) "'")
            arg-spec)))
