   such as `ws-print`."
   (atom default-printer))
 
+(declare with-printer)
 (declare ws-query*)
 (declare ws-query)
 (declare ws-print)
+(declare trees-print)
 
 ;; === Helper functions
 

                     default-printer
                     false))

(defn mk-printer
  [opts]
  (cond
    (nil? opts) default-printer

    (-> opts first (= :-))
    (mk-printer-black-list (rest opts))

    :else (mk-printer-white-list opts)))

(defn set-printer!
  "Sets the printer that is applied by `with-printer` and used by print
  functions such as `ws-print`."

                                 (keys v)
                                 (meta v)))))))

(defn mk-printer
  [opts]
  (cond
    (nil? opts) default-printer

    (-> opts first (= :-))
    (mk-printer-black-list (rest opts))

    :else (mk-printer-white-list opts)))

(defmacro with-this-printer
  "Sets the printer as `prn` for the lexical scope. `prn` may be a
