tupelo.quote

tmpl

macro

(tmpl form)
Template macro similar to clojure.core/syntax-quote, except does not prepend current namespace to all free symbols.
Value substitution is supported via `(insert ...)` and `(splice ...)` forms:
```
    (ns demo.core
      (:require [tupelo.quote :as q]))

    ; problem:  free symbols a and b are fully-qualified using current ns
    `[a b ~(+ 2 3)] => [demo.core/a
                        demo.core/b
                        5]

    (q/tmpl-fn '[a b (insert (+ 2 3))])  =>  [a b 5]

    (let [a 1 b 2]
      (q/tmpl [a b (insert (+ 2 3))]))  =>  [1 2 5]

    (is= [1 [2 3 4] 5] (q/tmpl [1 (insert (t/thru 2 4)) 5]))
    (is= [1  2 3 4  5] (q/tmpl [1 (splice (t/thru 2 4)) 5]))
``` 

tmpl-fn

(tmpl-fn form)
Template function similar to clojure.core/syntax-quote, except does not prepend current namespace to all free symbols.
Value substitution is supported via `(insert ...)` and `(splice ...)` forms:
```
    (ns demo.core
      (:require [tupelo.quote :as q]))

    ; problem:  free symbols a and b are fully-qualified using current ns
    `[a b ~(+ 2 3)] => [demo.core/a
                        demo.core/b
                        5]

    (q/tmpl-fn '[a b (insert (+ 2 3))])  =>  [a b 5]

    (let [a 1 b 2]
      (q/tmpl [a b (insert (+ 2 3))]))  =>  [1 2 5]

    (is= [1 [2 3 4] 5] (q/tmpl [1 (insert (t/thru 2 4)) 5]))
    (is= [1  2 3 4  5] (q/tmpl [1 (splice (t/thru 2 4)) 5]))
```