   (let [new-class-sym (mk-sym "flambo.function.%s" clazz)
         prefix-sym (mk-sym "%s-" clazz)]
     `(do
-       (def ~(mk-sym "%s-init" clazz) -init)
-       (def ~(mk-sym "%s-call" clazz) -call)
        (gen-class
         :name ~new-class-sym
         :extends flambo.function.AbstractFlamboFunction

  [f]
  [[] f])

(defn -call [this & xs]
  (let [fn-or-serfn (.state this)
        f (if (instance? array-of-bytes-type fn-or-serfn)
            (binding [sfn/*deserialize* kryo/deserialize]
              (deserialize-fn fn-or-serfn))
            fn-or-serfn)]
    (apply f xs)))

;; ## Functions
(defn mk-sym
  [fmt sym-name]

        :init ~'init
        :state ~'state
        :constructors {[Object] []})
       (def ~(mk-sym "%s-init" clazz) -init)
       (defn ~(mk-sym "%s-call" clazz)
         [~(vary-meta 'this assoc :tag new-class-sym) & ~'xs]
         (let [fn-or-serfn# (.state ~'this)
               f# (if (instance? array-of-bytes-type fn-or-serfn#)
                    (binding [sfn/*deserialize* kryo/deserialize]
                      (deserialize-fn fn-or-serfn#))
                    fn-or-serfn#)]
           (apply f# ~'xs)))
       (defn ~wrapper-name [f#]
         (new ~new-class-sym
              (if (serfn? f#)
