             [_#]
             (reduce
               (fn [vs# th#]
+                ;; In Clojure the module-loading will store the Vars
+                ;; themselves so we can just deref them, but in
+                ;; Clojurescript vars aren't reified at runtime, so
+                ;; module loading passes thunks
                 (~add-fn vs# (~(if clojure?
                                  `deref
                                  `(fn [x#] (x#)))


(defmacro defhook
  "Macro to generate a module extension point.
  `:writer` will be a function name that should be in the
  `:provides` section of the module.edn.
  `:reader` will be deref-able and will give a collection of the
  values passed to the writer.


(defmacro gen-module-requires
  "Generate the `require` statements to pull in all necessary
  namespaces to be able to connect the modules. That is, all the
  namespaces named in both `:extends` and `:provides`.
  It seems that this should be in a separate namespace from
  `gen-module-loads`, or the namespaces won't yet be loaded when the
  extension calls are made."
  []
  (let [modules (read-all-modules)
        provides (->> modules
