       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)
+      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)
 
       first: -> @a
       last:  -> @a

      after: (x) ->
        if @l.constructor == T.Digit4
          { a, b, c, d } = @l
          new T.Deep makeDigit(x, a), (=> @m().after(makeNode(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(makeNode(a, b, c))), makeDigit(d, x)
        else
          new T.Deep @l, @m, @r.before(x)


      init: -> new T.Digit3 @a, @b, @c

      norm: -> norm(@a).plus(norm(@b)).plus(norm(@c)).plus(norm(@d))


    # An empty finger tree.
