@NotNull
    CompositeNode leftRotation() {
      // See: http://en.wikipedia.org/wiki/Tree_rotation
      CharSequence Q = this.tail;
      if (!(Q instanceof CompositeNode)) {
        return this; // Tail not a composite, cannot rotate.
      }
      CharSequence B = ((CompositeNode)Q).head;
      CharSequence C = ((CompositeNode)Q).tail;
      //noinspection UnnecessaryLocalVariable
      CharSequence A = this.head;
      return new CompositeNode(new CompositeNode(A, B), C);
    }
@NotNull
    CompositeNode leftRotation()