   bound with defs, as by the requirement of lambda lifting this must
   be the set of all fns in the input program."
   [ast munged-fns-atom]
-  (if-not (pattern/def? ast)
+  (if-not (and (pattern/def? ast)
+               (not (contains? @munged-fns-atom
+                               (pattern/def->var ast))))
     ast
     (let [top-level-forms (atom [])
           new-ast         (update ast :init

    (postwalk top-ast
              (fn [{:keys [op fn args env] :as node}]
                (if (and (= op :invoke)
                         (= :var (:op fn)))
                  (if-let [arities (munged-fns (-> fn :var))]
                    (if-let [var (get munged-fns
                                      (count args)

                  (pattern/def->symbol wrapping-def)
                  (count (first raw-method))
                  (some (partial = '&) (first raw-method)))]
    (ast `(def ^:single ^:static ~new-name
            (fn* ~raw-method))
         env)))

