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.

Creation. Functions `make`

take `n`

arguments and build
a `n`

-tuple.

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.