export declare enum Type {
    valid = "valid",
    invalid = "invalid",
    initial = "initial"
}
export type Valid<T> = {
    __typeName: Type.valid;
    value: T;
};
export declare const isValid: <T>(v: Value<unknown, unknown, T, unknown>) => v is Valid<T>;
export declare const valid: <T>(value: T) => Valid<T>;
export type Invalid<E, T> = {
    __typeName: Type.invalid;
    value: T;
    error: E;
};
export declare const isInvalid: <E, T2>(v: Value<E, unknown, unknown, T2>) => v is Invalid<E, T2>;
export declare function invalid<E>(error: E): <T>(value: T) => Invalid<E, T>;
export declare function invalid<E, T>(error: E): (value: T) => Invalid<E, T>;
export declare function invalid<E, T>(error: E, value: T): Invalid<E, T>;
export type Initial<I, E> = {
    __typeName: Type.initial;
    value: I;
    error: E;
};
export declare const isInitial: <E, I>(v: Value<E, I, unknown, unknown>) => v is Initial<I, E>;
export declare const initial: <I, E>(value: I, error: E) => Initial<I, E>;
export type Value<E, I, T, T2 = T> = Invalid<E, T2> | Valid<T> | Initial<I, E>;
export declare const getError: <E>(item: Value<E, unknown, unknown, unknown>) => E | undefined;
