      (pp/write-out obj))
     (pp/write-out obj)))
 
-(def orig-pprint-map (.getMethod pp/simple-dispatch clojure.lang.IPersistentMap))
+;; these methods are private so ... have to fetch them this way
+(def orig-pprint-map    (.getMethod pp/simple-dispatch clojure.lang.IPersistentMap))
+(def orig-pprint-vector (.getMethod pp/simple-dispatch clojure.lang.IPersistentVector))
+(def orig-pprint-list   (.getMethod pp/simple-dispatch clojure.lang.ISeq))
+(def orig-pprint-set    (.getMethod pp/simple-dispatch clojure.lang.IPersistentSet))
+
 
 ;; should create a dispatch that uses the normal method for maps
 ;; and this method for annotated maps
-(defn pprint-map-with-pointer [amap]
+(defn pprint-map-with-pointer* [amap]
   (let [comments (or (-> amap meta :comments) {})
         comments? (not-empty comments)]
     (pp/pprint-logical-block

(defn annotate-paths [data path-to-annotation-map]
  (reduce #(annotate-path %1 (first %2) (second %2))
          data path-to-annotation-map))

(comment
  (def test-data
    {:cljsbuild {:assert true
                 :builds [{ :id "example-admin"
                           :source-paths ["src" "dev" "tests" "../support/src"]
                           :notify-command ["notify"]
                           :figwheel
                           { :websocket-host "localhost"

    (f data)))

(defn annotate-path-only [data path annotation]
  (path-only-data-structure data path
                            #(do
                               #_(prn path %)
                               (when (coll? %)
                                 (vary-meta % merge annotation)))))

(defn annotate-path [data path annotation]
  (update-in data path #(vary-meta % merge annotation)))
