export type RemoteData<T> = {
    type: "Error";
    error: Error;
} | {
    type: "Loading";
} | {
    type: "NotAsked";
} | {
    type: "Success";
    value: T;
};
type Pattern<T, TResult> = {
    _?: () => TResult;
    error?: (error: Error) => TResult;
    loading?: () => TResult;
    notAsked?: () => TResult;
    success?: (value: T) => TResult;
};
declare function notAsked<T>(): RemoteData<T>;
declare function loading<T>(): RemoteData<T>;
declare function success<T>(value: T): RemoteData<T>;
declare function error<T>(error: Error): RemoteData<T>;
declare function isSuccess<T>(remoteData: RemoteData<T>): remoteData is {
    type: "Success";
    value: T;
};
declare function isError<T>(remoteData: RemoteData<T>): remoteData is {
    type: "Error";
    error: Error;
};
declare function isLoading<T>(remoteData: RemoteData<T>): remoteData is {
    type: "Loading";
};
declare function isNotAsked<T>(remoteData: RemoteData<T>): remoteData is {
    type: "NotAsked";
};
interface CurryWithDefault {
    <T>(defaultValue: T, remoteData: RemoteData<T>): T;
    <T>(defaultValue: T): (remoteData: RemoteData<T>) => T;
}
declare const withDefault: CurryWithDefault;
interface CurriedWhen {
    <T, TResult>(pattern: Pattern<T, TResult>, remoteData: RemoteData<T>): TResult;
    <T, TResult>(pattern: Pattern<T, TResult>): (remoteData: RemoteData<T>) => TResult;
}
declare const when: CurriedWhen;
interface CurriedMap {
    <T, TResult>(fn: (value: T) => TResult, remoteData: RemoteData<T>): RemoteData<TResult>;
    <T, TResult>(fn: (value: T) => TResult): (remoteData: RemoteData<T>) => RemoteData<TResult>;
}
declare const map: CurriedMap;
interface CurriedAndThen {
    <T, TResult>(fn: (value: T) => RemoteData<TResult>, remoteData: RemoteData<T>): RemoteData<TResult>;
    <T, TResult>(fn: (value: T) => RemoteData<TResult>): (remoteData: RemoteData<T>) => RemoteData<TResult>;
}
declare const andThen: CurriedAndThen;
export { andThen, error, isError, isLoading, isNotAsked, isSuccess, loading, map, notAsked, success, when, withDefault, };
