       reduceLeft:  (z, op) -> op z, @a
       reduceRight: (op, z) -> op @a, z
 
-      after:  (x) -> new T.Deep new T.Digit1(x), (-> T.Empty), new T.Digit1(@a)
-      before: (x) -> new T.Deep new T.Digit1(@a), (-> T.Empty), new T.Digit1(x)
+      after:  (x) -> new Deep new Digit1(x), (-> Empty), new Digit1(@a)
+      before: (x) -> new Deep new Digit1(@a), (-> Empty), new Digit1(x)
 
       first: -> @a
       last:  -> @a
 
-      rest: -> T.Empty
-      init: -> T.Empty
+      rest: -> Empty
+      init: -> Empty
 
       concat: (t) -> t.after @a
 



    # A finger tree with a single element.
    @Single = class
      constructor: (a) -> @a = a

      isEmpty: -> false



    # A deep finger tree.
    class Deep
      reduceLeft  = (op) -> (z, x) -> x.reduceLeft(z, op)
      reduceRight = (op) -> (x, z) -> x.reduceRight(op, z)

      asTree = (s) -> s.reduceLeft Empty, (a, b) -> a.before b
      asSeq  = (s) -> s.reduceRight ((a, b) -> Sequence.conj a, -> b), null

      constructor: (left, mid, right) ->
