       asDigit:  -> new T.Digit3 @a, @b, @c
       norm: -> @v
 
-    makeNode = (args...) ->
-      type = switch args.length
-        when 2 then T.Node2
-        when 3 then T.Node3
-        else
-          raise new Error "Illegal number of arguments: #{args.length}"
-
-      new type args...
-
 
     # A digit in a finger tree.
     @Digit1 = class

      reduceLeft:  (z, op) -> op z, @a
      reduceRight: (op, z) -> op @a, z

      after:  (x) -> new T.Deep makeDigit(x), (-> T.Empty), makeDigit(@a)
      before: (x) -> new T.Deep makeDigit(@a), (-> T.Empty), makeDigit(x)

      first: -> @a
      last:  -> @a

      after: (x) ->
        if @l.constructor == T.Digit4
          { a, b, c, d } = @l
          new T.Deep(new T.Digit2(x, a),
                     (=> @m().after(new T.Node3(b, c, d))),
                     @r)
        else
          new T.Deep @l.after(x), @m, @r

      before: (x) ->
        if @r.constructor == T.Digit4
          { a, b, c, d } = @r
          new T.Deep(@l,
                     (=> @m().before(new T.Node3(a, b, c))),
                     new T.Digit2(d, x))
        else
          new T.Deep @l, @m, @r.before(x)

