resA or fn().
const sq = orElse((x: number) => ok<number>(x * x));
const residual = orElse((x: number) => err<number>(x));
expect(sq(sq(ok(2)))).toStrictEqual(ok(2));
expect(sq(residual(ok(2)))).toStrictEqual(ok(2));
expect(residual(sq(err(3)))).toStrictEqual(ok(9));
expect(residual(residual(err(3)))).toStrictEqual(err(3));
Returns
fn()ifresAis anErr, otherwise returns the successresA. The order of arguments is reversed because of that it is useful for partial applying.