;;;; A package with a private function. mix is declared with defn-, so only ;;;; the files in this directory may use it: combine calls it here, and the ;;;; package's other file calls it and hands it out as a value. (defn- mix [a i32 b i32] i32 (+ (* a 10) b)) (defn combine [a i32 b i32] i32 (mix a b)) ;; Code these macros write is the package's own, wherever it is expanded: the ;; call to mix they answer with is accepted in the importer's file, on its own ;; and nested inside a do. (defmacro mixed [& args] `(mix ~(at args 0) ~(at args 1))) (defmacro mixed-in-do [& args] `(do (mix ~(at args 0) ~(at args 1)))) ;; What the importer writes and this macro only passes through is still the ;; importer's. (defmacro pass [& args] (at args 0))