BatTuple

# Module BatTuple

    module BatTuple: sig .. end

Tuples. 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.prj13` returns the first and third elements of a 3-tuple. All possible combinations are provided. Note there are no `prj` functions in Tuple2 because `first` and `second` already cover all possibilities.

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.mapn` `f g h` will apply `f`, `g`, and `h` to the three elements, respectively, of a 3-tuple. Function `map` is similar but applies the same function to all elements, which thus requires the elements to be of the same type. Tuples satisfy `BatInterfaces.Mappable`.

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 `printn` prints a tuple given a method for printing each of its elements. The simpler `print` 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.