checkRecursivelyPassableError = (
  candidate,
  passStyleOfRecur,
  check = undefined,
) => {
  if (!checkErrorLike(candidate, check)) {
    return false;
  }
  const proto = getPrototypeOf(candidate);
  const { name } = proto;
  const errConstructor = getErrorConstructor(name);
  if (errConstructor === undefined || errConstructor.prototype !== proto) {
    return (
      !!check &&
      CX(
        check,
      )`Passable Error must inherit from an error class .prototype: ${candidate}`
    );
  }
  const descs = getOwnPropertyDescriptors(candidate);
  if (!('message' in descs)) {
    return (
      !!check &&
      CX(
        check,
      )`Passable Error must have an own "message" string property: ${candidate}`
    );
  }

  return entries(descs).every(([propName, desc]) =>
    checkRecursivelyPassableErrorPropertyDesc(
      propName,
      desc,
      passStyleOfRecur,
      check,
    ),
  );
}
@param {unknown} candidate
@param {(val: any) => PassStyle} passStyleOfRecur
@param {Checker} [check]
@returns {boolean}