       asTree = (s) -> s.reduceLeft Empty, (a, b) -> a.before b
       asSeq  = (s) -> s.reduceRight ((a, b) -> Sequence.conj a, -> b), null
 
-      constructor: (@l, m, @r) -> @m = -> val = m(); (@m = -> val)()
+      constructor: (@l, @m, @r) ->
 
       isEmpty: -> false
 

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

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


            [l, x, r] = @r.split p, i2
            [deepR(@l, suspend(=> @m()), l), x, asTree(r)]

      reverse: -> new Deep @r.reverse(), suspend(=> @m().reverse()), @l.reverse()

    internal = [
      Node2
