declare type Predicate = (p: P) => Validated; export declare type ErrorOfValidated = V extends Invalid ? E : never; declare type ErrorOfCombinedValidated = Partial<{ [K in keyof O]: ErrorOfValidated; }>; export declare type ValueOfValidated = V extends Valid ? A : never; declare type ValueOfCombinedValidated = { [K in keyof O]: ValueOfValidated; }; declare type ObjectToCombine = { [k: string]: Validated; }; export declare type CombinedValidated = Validated, ValueOfCombinedValidated>; export declare type Validated = Invalid | Valid; export declare abstract class AbstractValidated { map(f: (a: A) => B): Validated; mapError(f: (error: E) => F): Validated; flatMap(f: (a: A) => Validated): Validated; filter(pred: (a: A) => boolean, toError: (error: A) => F): Validated; test(...predicates: Array>): Validated; recover(f: (error: E) => B): Validated; orElse(alternative: Validated): Validated; abstract isValid(): this is Valid; isInvalid(): this is Invalid; abstract fold(ok: (a: A) => B, error: (error: E) => B): B; } declare function ok(): Valid; declare function ok(value: A): Valid; export declare const Validated: { ok: typeof ok; error(error: E): Invalid; sequence(validateds: Validated[]): Validated<(E | undefined)[], A[]>; combine(o: O): Validated; }>, ValueOfCombinedValidated>; }; export declare class Valid extends AbstractValidated { readonly value: A; static readonly type = "valid"; constructor(value: A); fold(ok: (a: A) => B, _error: (error: never) => B): B; isValid(): this is Valid; } export declare class Invalid extends AbstractValidated { readonly error: E; static readonly type = "invalid"; constructor(error: E); fold(_ok: (a: A) => B, error: (error: E) => B): B; isValid(): this is Valid; } export {};