diff options
Diffstat (limited to 'src/std/order.gleam')
-rw-r--r-- | src/std/order.gleam | 48 |
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 + } +} |