import * as Tp from "../../../Collections/Immutable/Tuple";
import * as S from "./core";
/**
 * Zips this stream with another point-wise and applies the function to the paired elements.
 *
 * The new stream will end when one of the sides ends.
 */
export declare function zipWith_<R, E, A, R1, E1, A1, B>(self: S.Stream<R, E, A>, that: S.Stream<R1, E1, A1>, f: (a: A, a1: A1) => B): S.Stream<R1 & R, E | E1, B>;
/**
 * Zips this stream with another point-wise and applies the function to the paired elements.
 *
 * The new stream will end when one of the sides ends.
 *
 * @ets_data_first zipWith_
 */
export declare function zipWith<A, R1, E1, A1, B>(that: S.Stream<R1, E1, A1>, f: (a: A, a1: A1) => B): <R, E>(self: S.Stream<R, E, A>) => S.Stream<R1 & R, E | E1, B>;
/**
 * Zips this stream with another point-wise and emits tuples of elements from both streams.
 *
 * The new stream will end when one of the sides ends.
 */
export declare function zip_<R, E, A, R1, E1, A1>(self: S.Stream<R, E, A>, that: S.Stream<R1, E1, A1>): S.Stream<R1 & R, E | E1, Tp.Tuple<[A, A1]>>;
/**
 * Zips this stream with another point-wise and emits tuples of elements from both streams.
 *
 * The new stream will end when one of the sides ends.
 *
 * @ets_data_first zip_
 */
export declare function zip<R1, E1, A1>(that: S.Stream<R1, E1, A1>): <R, E, A>(self: S.Stream<R, E, A>) => S.Stream<R1 & R, E | E1, Tp.Tuple<[A, A1]>>;
/**
 * Zips this stream with another point-wise, but keeps only the outputs of the other stream.
 *
 * The new stream will end when one of the sides ends.
 */
export declare function zipRight_<R, R1, E, E1, A, A1>(self: S.Stream<R, E, A>, that: S.Stream<R1, E1, A1>): S.Stream<R1 & R, E | E1, A1>;
/**
 * Zips this stream with another point-wise, but keeps only the outputs of the other stream.
 *
 * The new stream will end when one of the sides ends.
 *
 * @ets_data_first zipRight_
 */
export declare function zipRight<R, R1, E, E1, A, A1>(that: S.Stream<R1, E1, A1>): (self: S.Stream<R, E, A>) => S.Stream<R1 & R, E | E1, A1>;
/**
 * Zips this stream with another point-wise, but keeps only the outputs of this stream.
 *
 * The new stream will end when one of the sides ends.
 */
export declare function zipLeft_<R, R1, E, E1, A, A1>(self: S.Stream<R, E, A>, that: S.Stream<R1, E1, A1>): S.Stream<R1 & R, E | E1, A>;
/**
 * Zips this stream with another point-wise, but keeps only the outputs of this stream.
 *
 * The new stream will end when one of the sides ends.
 *
 * @ets_data_first zipLeft_
 */
export declare function zipLeft<R, R1, E, E1, A, A1>(that: S.Stream<R1, E1, A1>): (self: S.Stream<R, E, A>) => S.Stream<R1 & R, E | E1, A>;
//# sourceMappingURL=zip.d.ts.map