aboutsummaryrefslogtreecommitdiff
path: root/src/Bool.gleam
diff options
context:
space:
mode:
Diffstat (limited to 'src/Bool.gleam')
-rw-r--r--src/Bool.gleam62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/Bool.gleam b/src/Bool.gleam
new file mode 100644
index 0000000..ef39179
--- /dev/null
+++ b/src/Bool.gleam
@@ -0,0 +1,62 @@
+module Bool
+
+export Bool(..), not/1, compare/2, max/2, min/2
+
+import Order exposing Order(_)
+
+type Bool
+ = True
+ | False
+
+fn not(bool) =
+ case bool
+ | True => False
+ | False => True
+
+test not =
+ not(True) |> Assert.false
+ not(False) |> Assert.true
+
+fn compare(a, b) =
+ case (a, b)
+ | (True, True) => EQ
+ | (True, False) => GT
+ | (False, False) => LT
+ | (False, True) => GT
+
+test compare =
+ compare(True, True) |> Assert.equal(_, EQ)
+ compare(True, False) |> Assert.equal(_, GT)
+ compare(False, False) |> Assert.equal(_, LT)
+ compare(False, True) |> Assert.equal(_, GT)
+
+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)
+
+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)
+
+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)