return (value, path = new Path()) => {
    const a = aChecker(value, path);
    if (a.type === 'success') {
      return success(a.value, a.warnings);
    }

    const b = bChecker(value, path);
    if (b.type === 'success') {
      return success(b.value, b.warnings);
    }

    return unionFailure('value did not match any types in or()', path, [a, b]);
  }
checker which asserts the value matches
at least one of the two provided checkers