import type * as P from "@principia/prelude";
import type { LazyPromise, URI, V } from "./model";
/**
* ```haskell
* both_ :: Apply f => (f a, f b) -> f (a, b)
* ```
*
* Applies both `LazyPromise`s and collects their results into a tuple
*
* @category Apply
* @since 1.0.0
*/
export declare const both_: (fa: LazyPromise, fb: LazyPromise) => LazyPromise;
/**
* ```haskell
* both :: Apply f => f b -> f a -> f (a, b)
* ```
*
* Applies both `LazyPromise`s and collects their results into a tuple
*
* @category Apply
* @since 1.0.0
*/
export declare const both: (fb: LazyPromise) => (fa: LazyPromise) => LazyPromise;
/**
* ```haskell
* bothSeq_ :: Apply f => (f a, f b) -> f (a, b)
* ```
*
* Sequentially applies both `LazyPromise`s and collects their results into a tuple. For a parallel version, see `both_`
*
* @category Apply
* @since 1.0.0
*/
export declare const bothSeq_: (fa: LazyPromise, fb: LazyPromise) => LazyPromise;
/**
* ```haskell
* bothSeq :: Apply f => f b -> f a -> f (a, b)
* ```
*
* Sequentially applies both `LazyPromise`s and collects their results into a tuple. For a parallel version, see `both`
*
* @category Apply
* @since 1.0.0
*/
export declare const bothSeq: (fb: LazyPromise) => (fa: LazyPromise) => LazyPromise;
/**
* ```haskell
* pure :: a -> LazyPromise a
* ```
*
* Lifts a pure value into a `LazyPromise`
*
* @category Applicative
* @since 1.0.0
*/
export declare const pure: (a: A) => LazyPromise;
export declare const ApplicativePar: P.Applicative<[URI], V>;
export declare const ApplicativeSeq: P.Applicative<[URI], V>;
//# sourceMappingURL=applicative.d.ts.map