Packages
gleam_stdlib
0.14.0
1.0.3
1.0.2
1.0.1
1.0.0
0.71.0
0.70.0
0.69.0
0.68.1
0.68.0
0.67.1
0.67.0
0.65.0
0.64.0
0.63.2
0.63.1
0.63.0
0.62.1
0.62.0
0.61.0
0.60.0
0.59.0
0.58.0
0.57.0
0.56.0
0.55.0
0.54.0
0.53.0
0.52.0
0.51.0
0.50.0
0.49.0
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.1
0.35.0
0.34.0
0.33.1
0.33.0
0.32.1
0.32.0
0.31.0
0.30.2
0.30.1
0.30.0
0.29.2
0.29.1
0.29.0
0.28.2
0.28.1
0.28.0
0.27.0
0.26.1
0.26.0
0.25.0
0.24.0
0.23.0
0.22.3
0.22.2
0.22.1
0.22.0
0.21.0
0.20.0
0.19.3
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.18.0-rc1
0.17.1
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.4.0-rc1
0.3.1
0.3.0
0.2.0
retired
A standard library for the Gleam programming language
Current section
Files
Jump to
Current section
Files
src/gleam/int.gleam
import gleam/order.{Order}
pub type Int =
Int
/// Returns the absolute value of the input.
///
/// ## Examples
///
/// > absolute_value(-12)
/// 12
///
/// > absolute_value(10)
/// 10
///
pub fn absolute_value(num: Int) -> Int {
case num >= 0 {
True -> num
False -> num * -1
}
}
/// Parses a given string as an int if possible.
///
/// ## Examples
///
/// > parse("2")
/// Ok(2)
///
/// > parse("ABC")
/// Error(Nil)
///
pub external fn parse(String) -> Result(Int, Nil) =
"gleam_stdlib" "parse_int"
/// Prints a given int to a string.
///
/// ## Examples
///
/// > to_string(2)
/// "2"
///
pub external fn to_string(Int) -> String =
"erlang" "integer_to_binary"
/// Prints a given int to a string using the base number provided.
///
/// ## Examples
///
/// > to_base_string(2, 2)
/// "10"
///
/// > to_base_string(48, 16)
/// "30"
///
/// > to_base_string(48, 36)
/// "1C"
///
pub external fn to_base_string(Int, Int) -> String =
"erlang" "integer_to_binary"
/// Takes an int and returns its value as a float
///
/// ## Examples
///
/// > to_float(5)
/// 5.
///
/// > to_float(0)
/// 0.
///
/// > to_float(-3)
/// -3.
///
pub external fn to_float(a: Int) -> Float =
"erlang" "float"
/// Restricts an Int between a lower and upper bound
///
/// ## Examples
///
/// ```
/// > clamp(40, min: 50, max: 60)
/// 50
/// ```
///
pub fn clamp(n: Int, min min_bound: Int, max max_bound: Int) -> Int {
n
|> min(max_bound)
|> max(min_bound)
}
/// Compares two ints, returning an order.
///
/// ## Examples
///
/// > compare(2, 3)
/// Lt
///
/// > compare(4, 3)
/// Gt
///
/// > compare(3, 3)
/// Eq
///
pub fn compare(a: Int, with b: Int) -> Order {
case a == b {
True -> order.Eq
False ->
case a < b {
True -> order.Lt
False -> order.Gt
}
}
}
/// Compares two int, returning the smaller of the two.
///
/// ## Examples
///
/// > min(2, 3)
/// 2
///
pub fn min(a: Int, b: Int) -> Int {
case a < b {
True -> a
False -> b
}
}
/// Compares two int, returning the larger of the two.
///
/// ## Examples
///
/// > max(2, 3)
/// 3
///
pub fn max(a: Int, b: Int) -> Int {
case a > b {
True -> a
False -> b
}
}
/// Returns whether the value provided is even.
///
/// ## Examples
///
/// > is_even(2)
/// True
///
/// > is_even(3)
/// False
///
pub fn is_even(x: Int) -> Bool {
x % 2 == 0
}
/// Returns whether the value provided is odd.
///
/// ## Examples
///
/// > is_odd(3)
/// True
///
/// > is_odd(2)
/// False
///
pub fn is_odd(x: Int) -> Bool {
x % 2 != 0
}
/// Returns the negative of the value provided
///
/// ## Examples
///
/// > negate(1)
/// -1
///
pub fn negate(x: Int) -> Int {
-1 * x
}
/// Sums a list of Ints.
///
/// ## Example
///
/// > sum([1, 2, 3])
/// 6
///
pub fn sum(numbers: List(Int)) -> Int {
numbers
|> do_sum(0)
}
fn do_sum(numbers: List(Int), initial: Int) -> Int {
case numbers {
[] -> initial
[x, ..rest] -> do_sum(rest, x + initial)
}
}
/// Multiplies a list of Ints and returns the product.
///
/// ## Example
///
/// > product([2, 3, 4])
/// 24
///
pub fn product(numbers: List(Int)) -> Int {
case numbers {
[] -> 0
_ -> do_product(numbers, 1)
}
}
fn do_product(numbers: List(Int), initial: Int) -> Int {
case numbers {
[] -> initial
[x, ..rest] -> do_product(rest, x * initial)
}
}