 (defmethod print-finger-tree finger-tree-empty [_ _] nil)
 (defmethod print-finger-tree finger-tree-single [node parent-id]
     (do
-        (println (object-id node) " [label=\"Single\"]")
+        (println (object-id node) " [label=\"Single\\n" (extract-measure node {:monoid node}) "\"]")
         (when parent-id (println parent-id " -> " (object-id node) " [weight=4]"))
-        (print-entry (:v node) (object-id node))))
+        (print-entry (:e node) (object-id node))))
 (defmethod print-finger-tree finger-tree-deep [node parent-id]
     (do
-        (println (object-id node) " [label=\"Deep\"]")
+        (println (object-id node) " [label=\"Deep\\n" (extract-measure node {:monoid node}) "\"]")
         (when parent-id (println parent-id " -> " (object-id node) " [weight=4]"))
         (print-digits (:l node) (object-id node))
         (print-finger-tree (force (:m node)) (object-id node))

(defmulti print-entry (fn [entry parent-id] (class entry)))
(defmethod print-entry node-2 [node parent-id]
    (do
        (println (object-id node) " [label=\"Node2\"]")
        (println parent-id " -> " (object-id node) " [weight=2]")
        (print-entry (:a node) (object-id node))
        (print-entry (:b node) (object-id node))))
(defmethod print-entry node-3 [node parent-id]
    (do
        (println (object-id node) " [label=\"Node3\"]")
        (println parent-id " -> " (object-id node) " [weight=2]")
        (print-entry (:a node) (object-id node))
        (print-entry (:b node) (object-id node))
        (print-entry (:c node) (object-id node))))
(defmethod print-entry :default [entry parent-id]
    (do
        (println (object-id entry) " [label=\"" entry "\"]")
        (when parent-id (println parent-id " -> " (object-id entry) " [weight=1]"))))

        (println "digraph {")
        (print-finger-tree tree nil)
        (println "}")))))

(def count-monoid
    (monoid. (fn [_] 1) +))

(defn go [t vec func filename]
    (do
