 (defrecord finger-tree-single [v])
 (defrecord finger-tree-deep [l m r])
 
+(defn make-node-2 [a b] (node-2. a b))
 (defn make-node-3 [a b c] (node-3. a b c))
+(derive Object ::any)
 
 ; Reverse cons
 (defn snoc [a lst] (concat lst [a]))

(defn tser [lst] (take (dec (count lst)) lst))

; 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]

            r)))

; Adds a new element to the back of the finger tree
(defmulti push-back (fn [tree value] (class tree)))
(defmethod push-back finger-tree-empty [_ a]
    (finger-tree-single. a))
(defmethod push-back finger-tree-single [{r :v} a]
