             (go (func t n) (dec n) func filename))))
 
 (println "Forwards..")
-(go nil 20 push-front "/tmp/forwards.dot")
+(go (finger-tree-empty.) 20 push-front "/tmp/forwards.dot")
 
 (println "Backwards..")
-(go nil 20 push-back "/tmp/backwards.dot")
+(go (finger-tree-empty.) 20 push-back "/tmp/backwards.dot")
 


; Adds a new element to the back of the finger tree
(defmulti push-back (fn [a _] (class a)))
(defmethod push-back nil [_ a]
    (finger-tree-single. a))
(defmethod push-back finger-tree-single [{r :v} a]
    (finger-tree-deep. [r] (delay nil) [a]))
(defmethod push-back finger-tree-deep [{l :l m :m r :r} a]
    (if (<= (count r) 3)
        (finger-tree-deep. l m (snoc a r))


; Adds a new element to the front of the finger tree
(defmulti push-front (fn [a _] (class a)))
(defmethod push-front finger-tree-empty [_ a]
    (finger-tree-single. a))
(defmethod push-front finger-tree-single [{r :v} a]
    (finger-tree-deep. [a] (delay (finger-tree-empty.)) [r]))
(defmethod push-front finger-tree-deep [{l :l m :m r :r} a]
    (if (<= (count l) 3)
        (finger-tree-deep. (cons a l) m r)
