import Maybe from './Maybe'; export declare type Arg = F extends (arg: infer A) => unknown ? A : never; export declare type Return = F extends (...args: Array) => infer R ? R : never; export declare type Optional = { [K in keyof O]?: O[K]; }; export declare type Compute = A extends infer O ? { [K in keyof O]: O[K]; } : never; export declare type IsNever = [A] extends [never] ? T : F; export declare type WhenNever = [A, T] extends [T, A] ? A : IsNever; export declare type WhenUnknown = [A, T] extends [T, A] ? A : (unknown extends A ? T : A); export declare type Cata) => unknown; } & { _?: never; }> = O extends { [K in keyof O]: (...args: Array) => infer R; } ? Compute | Compute & { _(): R; }> : never; export declare function identity(value: T): T; export declare function inst(Constructor: new () => T): T; export declare function cons, T>(Constructor: new (...args: A) => A extends [] ? never : T): (...args: A) => T; export declare function isString(value: unknown): value is string; export declare function isNumber(value: unknown): value is number; export declare const isFloat: typeof isNumber; export declare function isInt(value: unknown): value is number; export declare function isBoolean(value: unknown): value is boolean; export declare function isArray(input: unknown): input is Array; export declare function isObject(input: unknown): input is { [key: string]: unknown; }; export declare function toInt(input: string): Maybe; export interface Order { isLT(): boolean; isEQ(): boolean; isGT(): boolean; fold(onLT: () => R, onEQ: () => R, onGT: () => R): R; cata(pattern: Order.Pattern): R; } export declare namespace Order { type Pattern = Cata<{ LT(): R; EQ(): R; GT(): R; }>; const LT: Order; const EQ: Order; const GT: Order; } export interface Comparable { compareTo(another: T): Order; } export declare const isComparable: (something: unknown) => something is Comparable;