                                    (let [mw-sym (gensym "mw_sym__")]
                                      [(assoc middleware mw-spec mw-sym) mw-sym]))
             ns (-> verb-fn-sym namespace symbol the-ns)
+            ;; Seems like we should just do the *ns* binding trick once
+            ;; per namespace. Possilby as an additional map passed into
+            ;; analyze*
             ns-metadata (meta ns)
             metadata (merge (reduce-kv (fn [out k v]
                                          (assoc out

               {:arg arg :resolver-tags resolver-ks})))))

(defn- resolvers-for
  [arglist resolvers-map]
  (into {}
    (keep (fn [arg]


(defn- resolver-entry
  [arg resolver]
  (cond
    (keyword? resolver)
    (if-let [f (get standard-resolver-factories resolver)]
      [arg (f arg)]
      (throw (ex-info (format "Keyword %s does not identify a known argument resolver." resolver)
                      {:arg arg :resolver resolver})))

    (ifn? resolver)
    [arg resolver]

    :else
    (throw (ex-info (format "Argument resolver value `%s' is neither a keyword not a function." resolver)
                    {:arg arg :resolver resolver}))))

(defn- maybe-resolver-by-tag
  [arg]
