/**
 * DataOption is an ADT which allows you to represent all the states involved in loading a
 * piece of data asynchronously which might exist.
 *
 * @since 0.9.2
 */
import { Alt1 } from 'fp-ts/Alt';
import { Alternative1 } from 'fp-ts/Alternative';
import { Applicative1 } from 'fp-ts/Applicative';
import { Apply1 } from 'fp-ts/Apply';
import { Chain1 } from 'fp-ts/Chain';
import { ChainRec1 } from 'fp-ts/ChainRec';
import * as E from 'fp-ts/Either';
import { Functor1 } from 'fp-ts/Functor';
import { Monad1 } from 'fp-ts/Monad';
import * as O from 'fp-ts/Option';
import { Pointed1 } from 'fp-ts/Pointed';
import * as D from './Data';
import { MonadRec1 } from './MonadRec';
/**
 * @since 0.9.2
 * @category Model
 */
export declare type DataOption<A> = D.Data<O.Option<A>>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const alt: <A>(second: import("fp-ts/function").Lazy<D.Data<O.Option<A>>>) => (first: D.Data<O.Option<A>>) => D.Data<O.Option<A>>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const ap: <A>(fa: D.Data<O.Option<A>>) => <B>(fab: D.Data<O.Option<(a: A) => B>>) => D.Data<O.Option<B>>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const chain: <A, B>(f: (a: A) => D.Data<O.Option<B>>) => (ma: D.Data<O.Option<A>>) => D.Data<O.Option<B>>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const chainNullableK: <A, B>(f: (a: A) => B | null | undefined) => (ma: D.Data<O.Option<A>>) => D.Data<O.Option<NonNullable<B>>>;
/**
 * @since 0.9.2
 * @category Combinator
 */
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const chainOptionK: <A, B>(f: (a: A) => O.Option<B>) => (ma: D.Data<O.Option<A>>) => D.Data<O.Option<B>>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const fromEither: <A>(e: E.Either<unknown, A>) => D.Data<O.Option<A>>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const fromData: <A>(ma: D.Data<A>) => D.Data<O.Option<A>>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const fromNullable: <A>(a: A) => D.Data<O.Option<NonNullable<A>>>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const fromNullableK: <A extends readonly unknown[], B>(f: (...a: A) => B | null | undefined) => (...a: A) => D.Data<O.Option<NonNullable<B>>>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const fromOptionK: <A extends readonly unknown[], B>(f: (...a: A) => O.Option<B>) => (...a: A) => D.Data<O.Option<B>>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const fromPredicate: {
    <A, B extends A>(refinement: import("fp-ts/Refinement").Refinement<A, B>): (a: A) => D.Data<O.Option<B>>;
    <A_1>(predicate: import("fp-ts/Predicate").Predicate<A_1>): <B_1 extends A_1>(b: B_1) => D.Data<O.Option<B_1>>;
};
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const getOrElse: <A>(onNone: import("fp-ts/function").Lazy<A>) => (fa: D.Data<O.Option<A>>) => D.Data<A>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const getOrElseE: <A>(onNone: import("fp-ts/function").Lazy<D.Data<A>>) => (fa: D.Data<O.Option<A>>) => D.Data<A>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const map: <A, B>(f: (a: A) => B) => (fa: D.Data<O.Option<A>>) => D.Data<O.Option<B>>;
/**
 * @since 0.9.2
 * @category Deconstructor
 */
export declare const match: <B, A>(onNone: () => B, onSome: (a: A) => B) => (ma: D.Data<O.Option<A>>) => D.Data<B>;
/**
 * @since 0.9.2
 * @category Deconstructor
 */
export declare const matchE: <B, A>(onNone: () => D.Data<B>, onSome: (a: A) => D.Data<B>) => (ma: D.Data<O.Option<A>>) => D.Data<B>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const some: <A>(a: A) => D.Data<O.Option<A>>;
/**
 * @since 0.9.2
 * @category Constructor
 */
export declare const zero: <A>() => D.Data<O.Option<A>>;
/**
 * @since 0.9.2
 * @category URI
 */
export declare const URI = "@typed/fp/DataOption";
/**
 * @since 0.9.2
 * @category URI
 */
export declare type URI = typeof URI;
declare module 'fp-ts/HKT' {
    interface URItoKind<A> {
        [URI]: DataOption<A>;
    }
}
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Pointed: Pointed1<URI>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Functor: Functor1<URI>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Apply: Apply1<URI>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Applicative: Applicative1<URI>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Chain: Chain1<URI>;
/**
 * @since 0.9.2
 * @category Combinator
 */
export declare const chainRec: <A, B>(f: (value: A) => DataOption<E.Either<A, B>>) => (value: A) => D.Data<O.Option<B>>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const ChainRec: ChainRec1<URI>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Monad: Monad1<URI>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const MonadRec: MonadRec1<URI>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Alt: Alt1<URI>;
/**
 * @since 0.9.2
 * @category Instance
 */
export declare const Alternative: Alternative1<URI>;
//# sourceMappingURL=DataOption.d.ts.map