(defmacro defcurry [name args & body] (let [partials (map (fn [n] `(~(subvec args 0 n) (partial ~name ~@(take n args)))) (range 1 (count args)))] `(defn ~name (~args ~@body) ~@partials)))