Some progress on the DSL:
(-> '(let [[a & rest :as x] 1
b 2]
(-> a
(+ b 3)
prn))
(macro-expand-and-resolve-dsl macro/macros #{}))
=>
(clojure.core/let [x 1
a (clojure.core/nth x 0)
rest (clojure.core/drop 1 x)
b 2]
(clojure.core/prn (clojure.core/+ a b 3)))