# Module BatTuple

    module BatTuple: sig .. end

Tuples.

NOTE: API changes are expected in a future release.

Modules are provided for tuples with 2, 3, 4, and 5 elements. Each provides the following categories of functions.

Projection. Functions `first`, `second`, `third`, `fourth`, and `fifth` extract a single element. Also, multiple elements can be extracted. For example, `BatTuple.Tuple3.get13` returns the first and third elements of a 3-tuple. All possible combinations are provided.

Note there are no `get` functions in Tuple2 because `first` and `second` already cover all possibilities. However, `swap` is provided, which can be thought of as projecting items in a different order.

Mapping. Apply a function to one or all elements of a tuple. Functions `map1`, `map2`, etc. map a given function to the first, second, etc. element of a tuple. All elements can be mapped using `map` or `mapn`. For example, `BatTuple.Tuple3.map` `f g h` will apply `f`, `g`, and `h` to the three elements, respectively, of a 3-tuple. Function `mapn` is similar but applies the same function to all elements, which thus requires the elements to be of the same type.

Currying. Every tuple has a `curry` and `uncurry` function, which allow converting between functions that take `n` arguments to ones that take a single `n`-tuple argument.

Enumeration. Every `n`-tuple can be converted to an enum with `n` elements using its `enum` function, and can be constructed from an enum using `of_enum`. Tuples satisfy `BatEnum.Enumerable`.

Printing. Function `print` prints a tuple given a method for printing each of its elements. The simpler `printn` function can be used when all elements are of the same type.

Comparison. Every tuple has a `compare` function, which can optionally be customized by specifying methods for comparing each element. `Pervasives.compare` is used by default.

    module Tuple2: sig .. end

Pairs.

    module Tuple3: sig .. end

Triples.

    module Tuple4: sig .. end

4-Tuples.

    module Tuple5: sig .. end

5-Tuples.