code: private static <K, N extends Node<K, N>> N balanceLeft(UpdateContext<? super N> currentContext, N node, N left, N right) {
          if (isRed(left) && isRed(left.left)) {
              N newRight = node.edit(currentContext, BLACK, left.right, right);
              return left.edit(currentContext, RED, left.left.blacken(currentContext), newRight);
          }
          else if (isRed(left) && isRed(left.right)) {
              N leftRight = left.right;
              N newLeft = left.edit(currentContext, BLACK, left.left, leftRight.left);
              N newRight = node.edit(currentContext, BLACK, leftRight.right, right);
              return leftRight.edit(currentContext, RED, newLeft, newRight);
          }
          else {
              return node.edit(currentContext, BLACK, left, right);
          }
      }
docs: TODO: Refactor into LEFT.balance -method