code: private R pushLeft(T first, R acc) {
          synchronized (root) {
              Connector<T, R> l = left;
              if (l == null)
                  return acc;
              left = null;
              l.rhs = null;
              T laright = l.right;
              l.right = none();
              if (l.acc == NONE) {
                  l.acc = acc;
                  l.left = first;
                  return none();
              }
              if (this.mergeable.test(laright, first)) {
                  l.acc = this.combiner.apply(l.acc, acc);
                  return l.drainLeft();
              }
              if (l.left == NONE) {
                  left = new Connector<>(null, acc, this);
                  return l.drain();
              }
          }
          return acc;
      }
docs: l + <first|acc|?>