   the program.
 
   options:
-
     :entry is a symbol, presumably a namespace qualified -main, which
     is the entry point of the prorgam. It is with respect to this
     function that all other defs in all loaded namespaces will be

    @new-ast))


(defn tree-shake
  "λ Whole-AST → options → Whole-AST


  {:pre [(every? symbol? modules)
         (symbol? entry)
         (every? (partial contains? ast) modules)]}
  (let [ast      (analyze-var-dependencies ast options)
        emit-set (get (:reach-map ast) (resolve entry))]
    (trim-with-emit-set ast emit-set)))
