aboutsummaryrefslogtreecommitdiff
path: root/aoc2023/build/packages/gleam_stdlib/src/gleam/pair.gleam
blob: 894e6a8d9f1544c6d012100bb3761e818a73c7fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/// Returns the first element in a pair.
///
/// ## Examples
///
/// ```gleam
/// > first(#(1, 2))
/// 1
/// ```
///
pub fn first(pair: #(a, b)) -> a {
  let #(a, _) = pair
  a
}

/// Returns the second element in a pair.
///
/// ## Examples
///
/// ```gleam
/// > second(#(1, 2))
/// 2
/// ```
///
pub fn second(pair: #(a, b)) -> b {
  let #(_, a) = pair
  a
}

/// Returns a new pair with the elements swapped.
///
/// ## Examples
///
/// ```gleam
/// > swap(#(1, 2))
/// #(2, 1)
/// ```
///
pub fn swap(pair: #(a, b)) -> #(b, a) {
  let #(a, b) = pair
  #(b, a)
}

/// Returns a new pair with the first element having had `with` applied to
/// it.
///
/// ## Examples
///
/// ```gleam
/// > #(1, 2) |> map_first(fn(n) { n * 2 })
/// #(2, 2)
/// ```
///
pub fn map_first(of pair: #(a, b), with fun: fn(a) -> c) -> #(c, b) {
  let #(a, b) = pair
  #(fun(a), b)
}

/// Returns a new pair with the second element having had `with` applied to
/// it.
///
/// ## Examples
///
/// ```gleam
/// > #(1, 2) |> map_second(fn(n) { n * 2 })
/// #(1, 4)
/// ```
///
pub fn map_second(of pair: #(a, b), with fun: fn(b) -> c) -> #(a, c) {
  let #(a, b) = pair
  #(a, fun(b))
}

/// Returns a new pair with the given elements. This can also be done using the dedicated
/// syntax instead: `new(1, 2) == #(1, 2)`.
/// 
/// ## Examples
/// 
/// ```gleam
/// > new(1, 2)
/// #(1, 2)
/// ```
/// 
pub fn new(first: a, second: b) -> #(a, b) {
  #(first, second)
}