 (spec/def ::pred fn?)
 (spec/def ::key any?)
 (spec/def ::desc string?)
-(spec/def ::spec #(c/or (spec/spec? %)
+(spec/def ::spec #(or (spec/spec? %)
                         (keyword? %)))
 (spec/def ::valid? boolean?)
 

      :default (first e))))

(defn- resolve-overload [state args]
  {:pre [(c/not (:dirty? state))]}
  (let [arity (count args)
        overloads (:overloads state)]
    (if-let [m (get overloads arity)]


(def-arg-spec map-arg (pred map?))

(def-arg-spec empty-arg (pred (fn [x] (and (coll? x)
                                             (empty? x)))))

