const parse = (value: string): TernaryResult<number, string, string> =>
pipe(Num.safeParseFloat(value)).map((result) =>
Result.isErr(result)
? TernaryResult.err('NaN')
: TernaryResult.ok(result.value),
).value;
const doubled = TernaryResult.flatMap(TernaryResult.ok('3'), (text) =>
TernaryResult.map(parse(text), (num) => num * 2),
);
const warnPassthrough = TernaryResult.flatMap(
TernaryResult.warn('3', 'retry'),
parse,
);
const errPassthrough = TernaryResult.flatMap(
TernaryResult.err('oops'),
parse,
);
assert.deepStrictEqual(doubled, TernaryResult.ok(6));
assert.deepStrictEqual(warnPassthrough, TernaryResult.warn(3, 'retry'));
assert.deepStrictEqual(errPassthrough, TernaryResult.err('oops'));
Applies a function returning a TernaryResult to the Ok variant.
const parse = (value: string): TernaryResult<number, string, string> =>
pipe(Num.safeParseFloat(value)).map((result) =>
Result.isErr(result)
? TernaryResult.err('NaN')
: TernaryResult.ok(result.value),
).value;
const doubled = TernaryResult.flatMap(TernaryResult.ok('3'), (text) =>
TernaryResult.map(parse(text), (num) => num * 2),
);
const warnPassthrough = TernaryResult.flatMap(
TernaryResult.warn('3', 'retry'),
parse,
);
const errPassthrough = TernaryResult.flatMap(
TernaryResult.err('oops'),
parse,
);
assert.deepStrictEqual(doubled, TernaryResult.ok(6));
assert.deepStrictEqual(warnPassthrough, TernaryResult.warn(3, 'retry'));
assert.deepStrictEqual(errPassthrough, TernaryResult.err('oops'));
Applies a function returning a
TernaryResultto the Ok variant.