import type { Option, OptionL } from "."; import type { None, Some } from "./core"; import type { Args, Cons, Fn1, Fn2 } from "../HKT"; import type { EQ, GT, LT, Ord, Ord$GetConstruct, Ordering, TypeClass$$Ord } from "../typeclass"; import type { Compare } from "../typeclass/Ord/Compare"; declare module "../typeclass/Ord" { interface OrdImpl { Option: ImplOrdForGeneric, Option$$Ord$$Relaxer, Option$$Ord$$Builder>; } } interface Option$$Ord$$Relaxer extends Fn1, Option>> { def: ([o]: Args) => typeof o extends None ? Option : typeof o extends Option ? Option> : never; } interface Option$$Ord$$Builder extends Fn1>, Option$$Ord>> { def: ([oCons]: Args) => typeof oCons extends Option> ? Option$$Ord : never; } /** * Implementation of the {@link Ord} type class for {@link Option}. */ export interface Option$$Ord extends TypeClass$$Ord> { Compare: Option$$Ord$Compare; } interface Option$$Ord$Compare extends Fn2, Option, Ordering> { def: ([o1, o2]: Args) => typeof o2 extends None ? typeof o1 extends None ? EQ : GT : typeof o1 extends None ? LT : typeof o2 extends Some ? typeof o1 extends Some ? Compare : never : never; }