~ 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