import { ReadonlyNonEmptyArray } from 'fp-ts/ReadonlyNonEmptyArray';
import { Semigroup } from 'fp-ts/Semigroup';
/**
 * @category Model
 * @since 0.9.4
 */
export interface Leaf {
    readonly _tag: 'Leaf';
    readonly actual: unknown;
    readonly error: string;
}
/**
 * @category Model
 * @since 0.9.4
 */
export interface Key {
    readonly _tag: 'Key';
    readonly key: string;
    readonly errors: DecodeErrors;
}
/**
 * @category Model
 * @since 0.9.4
 */
export interface MissingKeys {
    readonly _tag: 'MissingKeys';
    readonly keys: readonly [string, ...string[]];
}
/**
 * @category Model
 * @since 0.9.4
 */
export interface UnexpectedKeys {
    readonly _tag: 'UnexpectedKeys';
    readonly keys: readonly [string, ...string[]];
}
/**
 * @category Model
 * @since 0.9.4
 */
export interface Index {
    readonly _tag: 'Index';
    readonly index: number;
    readonly errors: DecodeErrors;
}
/**
 * @category Model
 * @since 0.9.4
 */
export interface MissingIndexes {
    readonly _tag: 'MissingIndexes';
    readonly indexes: readonly [number, ...number[]];
}
/**
 * @category Model
 * @since 0.9.4
 */
export interface UnexpectedIndexes {
    readonly _tag: 'UnexpectedIndexes';
    readonly indexes: readonly [number, ...number[]];
}
/**
 * @category Model
 * @since 0.9.4
 */
export interface Member {
    readonly _tag: 'Member';
    readonly index: number;
    readonly errors: DecodeErrors;
}
/**
 * @category Model
 * @since 0.9.4
 */
export interface Lazy {
    readonly _tag: 'Lazy';
    readonly id: string;
    readonly errors: DecodeErrors;
}
/**
 * @category Model
 * @since 2.2.9
 */
export interface Wrap {
    readonly _tag: 'Wrap';
    readonly error: string;
    readonly errors: DecodeErrors;
}
/**
 * @category Model
 * @since 0.9.4
 */
export declare type DecodeError = Leaf | Key | MissingKeys | UnexpectedKeys | Index | MissingIndexes | UnexpectedIndexes | Member | Lazy | Wrap;
/**
 * @since 0.9.4
 * @categeory Model
 */
export declare type DecodeErrors = ReadonlyNonEmptyArray<DecodeError>;
/**
 * @category constructors
 * @since 0.9.4
 */
export declare const leaf: (actual: unknown, error: string) => DecodeError;
/**
 * @category constructors
 * @since 0.9.4
 */
export declare const key: (key: string, errors: DecodeErrors) => DecodeError;
/**
 * @category constructors
 * @since 0.9.4
 */
export declare const missingKeys: (keys: readonly [string, ...string[]]) => DecodeError;
/**
 * @category constructors
 * @since 0.9.4
 */
export declare const unexpectedKeys: (keys: readonly [string, ...string[]]) => DecodeError;
/**
 * @category constructors
 * @since 0.9.4
 */
export declare const index: (index: number, errors: DecodeErrors) => DecodeError;
/**
 * @category constructors
 * @since 0.9.4
 */
export declare const missingIndexes: (indexes: readonly [number, ...number[]]) => DecodeError;
/**
 * @category constructors
 * @since 0.9.4
 */
export declare const unexpectedIndexes: (indexes: readonly [number, ...number[]]) => DecodeError;
/**
 * @category constructors
 * @since 0.9.4
 */
export declare const member: (index: number, errors: DecodeErrors) => DecodeError;
/**
 * @category constructors
 * @since 0.9.4
 */
export declare const lazy: (id: string, errors: DecodeErrors) => DecodeError;
/**
 * @category constructors
 * @since 2.2.9
 */
export declare const wrap: (error: string, errors: DecodeErrors) => DecodeError;
/**
 * @category destructors
 * @since 0.9.4
 */
export declare const match: <R>(patterns: {
    Leaf: (input: unknown, error: string) => R;
    Key: (key: string, errors: DecodeErrors) => R;
    MissingKeys: (keys: readonly [string, ...string[]]) => R;
    UnexpectedKeys: (keys: readonly [string, ...string[]]) => R;
    Index: (index: number, errors: DecodeErrors) => R;
    MissingIndexes: (indexes: readonly [number, ...number[]]) => R;
    UnexpectedIndexes: (keys: readonly [number, ...number[]]) => R;
    Member: (index: number, errors: DecodeErrors) => R;
    Lazy: (id: string, errors: DecodeErrors) => R;
    Wrap: (error: string, errors: DecodeErrors) => R;
}) => (e: DecodeError) => R;
/**
 * @category Typeclass Constructor
 * @since 0.9.4
 */
export declare function getSemigroup(): Semigroup<DecodeErrors>;
/**
 * @category Deconstructor
 * @since 0.9.4
 */
export declare const drawError: (error: DecodeError) => string;
/**
 * @category Deconstructor
 * @since 0.9.4
 */
export declare const drawErrors: (fa: readonly DecodeError[]) => string;
//# sourceMappingURL=DecodeError.d.ts.map