# Tuple

Small, ordered set of values.
 ```1: 2: 3: 4: 5: 6: ``` ``````(1, 2) ("one", "two", "three") // (a, b) // generic types ("one", 2, 3.0) // mixed types // (a + 1, b + 1) // expressions struct (1.2025f, 1.5f) // Struct Tuple of floats (Interop for C# Tuples) ``````

## Obtaining Individual Values

Deconstruct with pattern matching:

 ```1: 2: ``` ``````let (a, b) = (1, 2) let struct (c, d) = struct (1, 2) ``````

Just grab the first value from the Tuple:

 ```1: 2: ``` ``````let (e, _) = (1, 2) printfn "e: %A" e ``````

Use a Tuple to disable partial application:

 ```1: 2: 3: ``` ``````let sum a b = a + b let add2 a = sum 2 let sumNoCurry (a, b) = a + b // Does not allow currying ``````

Tuple Type Syntax: `int * float * string // e.g. (10, 10.0, "ten")`

## Interoperation with C# Tuples

It's not possible to convert between reference Tuples and struct Tuples. A Tuple must be pattern matched to get the parts and then a struct Tuple created.

 ```1: 2: ``` ``````let (aa, bb) = (1, 2) let struct (cc, dd) = struct(aa, bb) ``````