~ chicken-core (chicken-5) 253a76debab8f58a33b0aa9c4b7b2ffc9f5cc850
commit 253a76debab8f58a33b0aa9c4b7b2ffc9f5cc850
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Mon Feb 15 22:20:20 2016 +1300
Commit: Peter Bex <peter@more-magic.net>
CommitDate: Sat Jun 18 16:43:48 2016 +0200
Specialize `not` for true/false and add hardcoded result types
This could also be accomplished by making `not` a #:predicate for false,
but the scrutiny message for predicates refers specifically to a
"predicate" returning true or false, which might be confusing for `not`.
Signed-off-by: Peter Bex <peter@more-magic.net>
diff --git a/types.db b/types.db
index d4cb270b..1215d0dc 100644
--- a/types.db
+++ b/types.db
@@ -54,7 +54,9 @@
;; scheme
(not (#(procedure #:pure #:foldable) not (*) boolean)
- (((not boolean)) (let ((#(tmp) #(1))) '#f)))
+ ((true) (false) (let ((#(tmp) #(1))) '#f))
+ ((false) (true) (let ((#(tmp) #(1))) '#t))
+ (((not boolean)) (false) (let ((#(tmp) #(1))) '#f)))
(boolean? (#(procedure #:pure #:predicate boolean) boolean? (*) boolean))
Trap