~ 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