import type { Args, Call0, Call1, Call1W, Fn, Fn0, Fn1, GenericReturn1W, Param0 } from "./HKT"; /** * Sig: `[pred: (x: T) => boolean, onTrue: (x: T) => OnTrueResult, onFalse: (x: T) => OnFalseResult](x: T) => OnTrueResult | OnFalseResult` */ export interface IfElse< Pred extends Fn1, OnTrue extends Fn0 | Fn1>, OnFalse extends Fn0 | Fn1>, > extends Fn< [Param0], | (OnTrue extends Fn0 ? R : GenericReturn1W>) | (OnFalse extends Fn0 ? R : GenericReturn1W>) > { def: ([x]: Args) => Call1 extends true ? OnTrue extends Fn0 ? Call0 : Call1W : OnFalse extends Fn0 ? Call0 : Call1W; }