containerHasSplit = (
    specimen,
    elementPatt,
    bound,
    needInResults = false,
    needOutResults = false,
    check = identChecker,
  ) => {
    const inResults = needInResults ? [] : undefined;
    const outResults = needOutResults ? [] : undefined;
    const kind = kindOf(specimen);
    switch (kind) {
      case 'copyArray': {
        if (
          !elementsHasSplit(
            specimen,
            elementPatt,
            bound,
            inResults,
            outResults,
            check,
          )
        ) {
          // check logic already performed by elementsHasSplit
          return false;
        }
        return [inResults, outResults];
      }
      case 'copySet': {
        if (
          !elementsHasSplit(
            specimen.payload,
            elementPatt,
            bound,
            inResults,
            outResults,
            check,
          )
        ) {
          return false;
        }
        return [
          inResults && makeCopySet(inResults),
          outResults && makeCopySet(outResults),
        ];
      }
      case 'copyBag': {
        if (
          !pairsHasSplit(
            specimen.payload,
            elementPatt,
            bound,
            inResults,
            outResults,
            check,
          )
        ) {
          return false;
        }
        return [
          inResults && makeCopyBag(inResults),
          outResults && makeCopyBag(outResults),
        ];
      }
      default: {
        return check(false, X`unexpected ${q(kind)}`);
      }
    }
  }
@typedef {CopyArray | CopySet | CopyBag} Container
@param {Container} specimen
@param {Pattern} elementPatt
@param {bigint} bound Must be >= 1n
@param {boolean} [needInResults]
@param {boolean} [needOutResults]
@param {Checker} [check]
@returns {[Container | undefined, Container | undefined] | false}