   ;TODO: allow invariants functions for each param and throw when any of them fail(obviously)
   ;TODO: ignore optional params that weren't passed on call
   ;TODO: throw when required params aren't passed on call
-  (println firsta)
+  (clojure.pprint/pprint fxn_defblock);firsta)
   )
 )
 


(defmacro defxn ;def funxion
  [fname ;funxion name
   defblock; a map
   & codeblocks ;multiple forms as code
   ]
  (let [x (
            backtick/template
            ;backtick/syntax-quote-fn 
            ~defblock)
        ;e (eval x)
        ]
    (println x)
    ;(println e)
    `(defn ~fname [& all#]
       (println ~x)
       )
    )
  )

(clojure.pprint/pprint 




(foo 1)
(foo 1 2)
(defxn noes {:a ~(inc (+ 1 2)) :b firsta}
     (println "!!!" fxn_defblock)
     (:b fxn_defblock)
     )
(noes)
