aboutsummaryrefslogtreecommitdiff
path: root/src/bool.gleam
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2018-10-12 23:17:54 +0000
committerLouis Pilfold <louis@lpil.uk>2018-10-12 23:27:53 +0000
commit0e41165e9ce288a253c78e8d7a5f224cd9489535 (patch)
treea89cf7a4a66bba7a3595b98f3c1eb3b25ca891be /src/bool.gleam
parent82ff1afa3bcab9d880eb6508e004cd71eb1f4a48 (diff)
downloadgleam_stdlib-0e41165e9ce288a253c78e8d7a5f224cd9489535.tar.gz
gleam_stdlib-0e41165e9ce288a253c78e8d7a5f224cd9489535.zip
Lowercase module names
This change has a few benefits: - Module names will be easier to call from Erlang, Elixir, etc. - We can now import (for example) the `result` module and the `Result` type and not have ambiguity as to which we mean in the code.
Diffstat (limited to 'src/bool.gleam')
-rw-r--r--src/bool.gleam102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/bool.gleam b/src/bool.gleam
new file mode 100644
index 0000000..a4d6878
--- /dev/null
+++ b/src/bool.gleam
@@ -0,0 +1,102 @@
+import order:Order
+
+pub enum Bool =
+ | True
+ | False
+
+import Bool:*
+
+pub fn not(bool) {
+ case bool {
+ | True => False
+ | False => True
+ }
+}
+
+test not {
+ not(True)
+ |> assert:false
+
+ not(False)
+ |> assert:true
+}
+
+pub fn compare(a, b) {
+ case (a, b) {
+ | (True, True) => Order:EQ
+ | (True, False) => Order:GT
+ | (False, False) => Order:EQ
+ | (False, True) => Order:GT
+ }
+}
+
+test compare {
+ compare(True, True)
+ |> assert:equal(_, Order:EQ)
+
+ compare(True, False)
+ |> assert:equal(_, Order:GT)
+
+ compare(False, False)
+ |> assert:equal(_, Order:LT)
+
+ compare(False, True)
+ |> assert:equal(_, Order:GT)
+}
+
+pub fn max(a, b) {
+ case a {
+ | True => True
+ | False => b
+ }
+}
+
+test max {
+ max(True, True)
+ |> assert:equal(_, True)
+
+ max(True, False)
+ |> assert:equal(_, True)
+
+ max(False, False)
+ |> assert:equal(_, False)
+
+ max(False, True)
+ |> assert:equal(_, True)
+}
+
+pub fn min(a, b) {
+ case a {
+ | False => False
+ | True => b
+ }
+}
+
+test min {
+ min(True, True)
+ |> assert:equal(_, True)
+
+ min(True, False)
+ |> assert:equal(_, False)
+
+ min(False, False)
+ |> assert:equal(_, False)
+
+ min(False, True)
+ |> assert:equal(_, False)
+}
+
+pub fn to_int(bool) {
+ case bool {
+ | False => 0
+ | True => 1
+ }
+}
+
+test to_int {
+ to_int(True)
+ |> assert:equal(_, 1)
+
+ to_int(False)
+ |> assert:equal(_, 0)
+}