This is an alternative site for discovering Elm packages.
You may be looking for the
official Elm package site
instead.

Some helpers for working with 2-tuples.

**Note:** For larger chunks of data, it is best to switch to using records. So
instead of representing a 3D point as `(3,4,5)`

and wondering why there are no
helper functions, represent it as `{ x = 3, y = 4, z = 5 }`

and use all the
built-in syntax for records.

first : (a1, a2) -> a1

Extract the first value from a tuple.

```
first (3, 4) == 3
first ("john", "doe") == "john"
```

second : (a1, a2) -> a2

Extract the second value from a tuple.

```
second (3, 4) == 4
second ("john", "doe") == "doe"
```

mapFirst : (a -> b) -> (a, a2) -> (b, a2)

Transform the first value in a tuple.

```
import String
mapFirst String.reverse ("stressed", 16) == ("desserts", 16)
mapFirst String.length ("stressed", 16) == (8, 16)
```

mapSecond : (a -> b) -> (a1, a) -> (a1, b)

Transform the second value in a tuple.

```
import String
mapSecond sqrt ("stressed", 16) == ("stressed", 4)
mapSecond (\x -> x + 1) ("stressed", 16) == ("stressed", 17)
```

```
module Tuple exposing
( first, second
, mapFirst, mapSecond
)
{-| Some helpers for working with 2-tuples.
**Note:** For larger chunks of data, it is best to switch to using records. So
instead of representing a 3D point as `(3,4,5)` and wondering why there are no
helper functions, represent it as `{ x = 3, y = 4, z = 5 }` and use all the
built-in syntax for records.
@docs first, second, mapFirst, mapSecond
-}
{-| Extract the first value from a tuple.
first (3, 4) == 3
first ("john", "doe") == "john"
-}
first : (a1, a2) -> a1
first (x,_) =
x
{-| Extract the second value from a tuple.
second (3, 4) == 4
second ("john", "doe") == "doe"
-}
second : (a1, a2) -> a2
second (_,y) =
y
{-| Transform the first value in a tuple.
import String
mapFirst String.reverse ("stressed", 16) == ("desserts", 16)
mapFirst String.length ("stressed", 16) == (8, 16)
-}
mapFirst : (a -> b) -> (a, a2) -> (b, a2)
mapFirst func (x,y) =
(func x, y)
{-| Transform the second value in a tuple.
import String
mapSecond sqrt ("stressed", 16) == ("stressed", 4)
mapSecond (\x -> x + 1) ("stressed", 16) == ("stressed", 17)
-}
mapSecond : (a -> b) -> (a1, a) -> (a1, b)
mapSecond func (x,y) =
(x, func y)
```