code: function combineRoots(node) {
    let newNode = clone(node);
  
    let rootNode;
    const children = [];
    const radicandArgs = [];
    for (let i = 0; i < newNode.args.length; i++) {
      const child = newNode.args[i];
      if (Node.Type.isFunction(child, 'nthRoot')) {
        radicandArgs.push(child.args[0]);
        rootNode = getRootNode(child);
      }
      else {
        children.push(child);
      }
    }
  
    if (children.length > 0) {
      if (radicandArgs.length > 0) {
        const radicandNode = radicandArgs.length === 1 ?
          radicandArgs[0] : Node.Creator.operator('*', radicandArgs);
        children.push(Node.Creator.nthRoot(radicandNode, rootNode));
      }
  
      newNode = Node.Creator.operator('*', children);
      if (!newNode.equals(node)) {
        return Node.Status.nodeChanged(
          ChangeTypes.COMBINE_UNDER_ROOT, node, newNode);
      }
    }
  
    // if there are no items moved out of the root, then nothing has changed
    return Node.Status.noChange(node);
  }
docs: Given a multiplication node, with children including nthRoots, will combine the nodes with the same radicand as a step e.g. 2 * nthRoot(2) * nthRoot(x) -> 2 * nthRoot(2 * x) Assumes that all the roots are the same (that this is occuring right after distributeNthRoot and evaluateNthRootForChildren)