summaryrefslogtreecommitdiff
path: root/html/notes/booleans.md
diff options
context:
space:
mode:
Diffstat (limited to 'html/notes/booleans.md')
-rw-r--r--html/notes/booleans.md32
1 files changed, 0 insertions, 32 deletions
diff --git a/html/notes/booleans.md b/html/notes/booleans.md
deleted file mode 100644
index 61b9d7e..0000000
--- a/html/notes/booleans.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Only Booleans have truthiness
-
-Like in Java, there should be no implicit conversion of values to a
-Boolean. This leads to sloppy code and subtle bugs.
-
-I believe the code base of Guix contained an example of this at some
-point: Build phases ending in a call to `system*` would return 0 or 1
-which would pass as "true" regardless.
-
-In most cases, you should know the actual type of the value you're
-receiving, and do an appropriate check, be it `zero?`, `null?`, or
-some other check. If you truly want to check if something is "any
-value other than false" then you can always do:
-
-```scheme
-
-(if (not (eq? #f value))
- (do something))
-
-```
-
-No, you cannot use `(not (not x))` because `not` obviously expects a
-Boolean argument! Duh.
-
-I'm actually serious about this. Scheme went all the way to make null
-separate from false, but then refused to go all the way and decided to
-allow non-Boolean values to function as Booleans anyway.
-
-Of course, performing a type-check on every single conditional may
-incur a serious performance penalty. If so, then the same flag that
-determines [whether returned values can be ignored](strict-mode.html)
-may also determine whether non-Booleans can be coerced into Booleans.