diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gleam/list.gleam | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/gleam/list.gleam b/src/gleam/list.gleam index 5f537b9..2d5b624 100644 --- a/src/gleam/list.gleam +++ b/src/gleam/list.gleam @@ -2311,3 +2311,55 @@ fn do_shuffle_by_pair_indexes( float.compare(a_pair.0, b_pair.0) }) } + +/// Takes a list and a comparator, and returns the maximum element in the list +/// +/// +/// ## Example +/// +/// ```gleam +/// range(1, 10) |> list.max(int.compare) +/// // -> Ok(10) +/// ``` +/// +/// ```gleam +/// ["a", "c", "b"] |> list.max(string.compare) +/// // -> Ok("c") +/// ``` +pub fn max( + over list: List(a), + with compare: fn(a, a) -> Order, +) -> Result(a, Nil) { + reduce(over: list, with: fn(acc, other) { + case compare(acc, other) { + order.Gt -> acc + _ -> other + } + }) +} + +/// Takes a list and a comparator, and returns the minimum element in the list +/// +/// +/// ## Example +/// +/// ```gleam +/// range(1, 10) |> list.int(int.compare) +/// // -> Ok(1) +/// ``` +/// +/// ```gleam +/// ["a", "c", "b"] |> list.int(string.compare) +/// // -> Ok("a") +/// ``` +pub fn min( + over list: List(a), + with compare: fn(a, a) -> Order, +) -> Result(a, Nil) { + reduce(over: list, with: fn(acc, other) { + case compare(acc, other) { + order.Lt -> acc + _ -> other + } + }) +} |