UNPKG

rivo

Version:

🤖 The ultimate library you need for composable type-level programming in TypeScript, powered by HKT.

27 lines (24 loc) • 866 B
import type { Ord, Ord$GetTypeClass, Ordering } from "."; import type { Args, Call2W, Cons, Fn } from "../../HKT"; import type { AssertOrdering, IsAny } from "../../helpers"; /** * Compare two {@link Ord} instances. * * Sig: `(o1: Ord, o2: Ord) => Ordering` * * Type safety is **not guaranteed** if `O1` and `O2` are not of the same construct. */ export type Compare<O1 extends Ord, O2 extends Ord> = AssertOrdering< IsAny<O2> extends true ? Ordering : IsAny<O1> extends true ? Ordering : Call2W<Ord$GetTypeClass<O1>["Compare"], O1, O2> extends infer U extends Ordering ? U : never >; /** * [Fn] Compare two {@link Ord} instances. * * Sig: `<O extends Cons<Ord>>(o1: O, o2: O) => Ordering` */ export default interface CompareFn<O extends Cons<Ord>> extends Fn<[O, O], Ordering> { def: ([o1, o2]: Args<this>) => Compare<typeof o1, typeof o2>; }