 
 
 (defn rewrite-fn
-  [{:keys [methods env] :as fn-ast} wrapping-def prefix-forms-atom]
+  [{:keys [methods env] :as fn-ast}
+   wrapping-def
+   prefix-forms-atom
+   munged-fns-atom]
   (if (not (or (pattern/fn? fn-ast)
                (fn-is-multiple-arity? fn-ast)))
     ast

  (if-not (pattern/def? ast)
    ast
    (let [top-level-forms (atom [])
          new-fn-ast      (rewrite-fn (get ast :init)
                                      ast top-level-forms)]

      (-> @top-level-forms
          vec
          (conj (assoc ast :init new-fn-ast))))))


(defn reduce-fn-arities

        ;; FIXME
        ;;   Is this something I need to do? Are there cases in which
        ;;   this analysis is itself desructive? all existing fns,
        ;;   defs and vars should be preserved by this, including all
        ;;   metadata on them.
        (clobber-passes)
        (record-pass reduce-fn-arities))))
