interface Tuple<A, B> {
    first: A;
    second: B;
}
export declare function pair<A, B>(first: A, second: B): Tuple<A, B>;
export declare function first<A, B>(tuple: Tuple<A, B>): A;
export declare function second<A, B>(tuple: Tuple<A, B>): B;
export declare function mapFirst<A, B, X>(func: (val: A) => X, tuple: Tuple<A, B>): Tuple<X, B>;
export declare function mapSecond<A, B, X>(func: (val: B) => X, tuple: Tuple<A, B>): Tuple<A, X>;
export declare function mapBoth<A, B, X, Y>(firstFunc: (val: A) => X, secondFunc: (val: B) => Y, tuple: Tuple<A, B>): Tuple<X, Y>;
export {};
