aboutsummaryrefslogtreecommitdiff
path: root/src/std/order.gleam
diff options
context:
space:
mode:
Diffstat (limited to 'src/std/order.gleam')
-rw-r--r--src/std/order.gleam48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/std/order.gleam b/src/std/order.gleam
new file mode 100644
index 0000000..4d39705
--- /dev/null
+++ b/src/std/order.gleam
@@ -0,0 +1,48 @@
+pub enum Order =
+ | Lt
+ | Eq
+ | Gt
+;
+
+pub fn reverse(order) {
+ case order {
+ | Lt -> Gt
+ | Eq -> Eq
+ | Gt -> Lt
+ }
+}
+
+pub fn to_int(order) {
+ case order {
+ | Lt -> -1
+ | Eq -> 0
+ | Gt -> 1
+ }
+}
+
+pub fn compare(a, b) {
+ case {a, b} {
+ | {Lt, Lt} -> Eq
+ | {Lt, _} -> Lt
+ | {Eq, Eq} -> Eq
+ | {Gt, Gt} -> Eq
+ | {Eq, Gt} -> Lt
+ | _ -> Gt
+ }
+}
+
+pub fn max(a, b) {
+ case {a, b} {
+ | {Gt, _} -> Gt
+ | {Eq, Lt} -> Eq
+ | _ -> b
+ }
+}
+
+pub fn min(a, b) {
+ case {a, b} {
+ | {Lt, _} -> Lt
+ | {Eq, Gt} -> Eq
+ | _ -> b
+ }
+}