diff options
author | Louis Pilfold <louis@lpil.uk> | 2018-10-12 23:17:54 +0000 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2018-10-12 23:27:53 +0000 |
commit | 0e41165e9ce288a253c78e8d7a5f224cd9489535 (patch) | |
tree | a89cf7a4a66bba7a3595b98f3c1eb3b25ca891be /src/bool.gleam | |
parent | 82ff1afa3bcab9d880eb6508e004cd71eb1f4a48 (diff) | |
download | gleam_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.gleam | 102 |
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) +} |