pragmatic-fp-ts
Version:
Opinionated functional programming library with easy use in mind
23 lines (20 loc) • 586 B
text/typescript
import { Comparator, getValueOr, isNil, isSome, Mappable } from "./main.ts";
export function ascend<A>(
toComparable: Mappable<A, string | number>
): Comparator<A> {
return (a: A, b: A) => {
const valA = getValueOr(null, a);
const valB = getValueOr(null, b);
const cvalA = valA && toComparable(valA);
const cvalB = valB && toComparable(valB);
if (cvalA === cvalB) {
return 0;
} else if (isSome(cvalA) && isSome(cvalB)) {
return cvalA! < cvalB! ? 1 : -1;
} else if (isNil(cvalA)) {
return -1;
} else {
return 1;
}
};
}