UNPKG

pragmatic-fp-ts

Version:

Opinionated functional programming library with easy use in mind

23 lines (20 loc) 586 B
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; } }; }