~ chicken-core (chicken-5) 0b501bc5a5cc2ac76e9bb78ba48f6e9250b59dc5


commit 0b501bc5a5cc2ac76e9bb78ba48f6e9250b59dc5
Author:     Evan Hanson <evhan@foldling.org>
AuthorDate: Sat Feb 13 23:56:40 2016 +1300
Commit:     Peter Bex <peter@more-magic.net>
CommitDate: Sat Feb 13 19:04:05 2016 +0100

    Preserve type of first element in mem* procedure results
    
    If the result is a list, its first element will be the same type as the
    first procedure argument.
    
    Signed-off-by: Peter Bex <peter@more-magic.net>

diff --git a/types.db b/types.db
index b5a53336..9d565dfa 100644
--- a/types.db
+++ b/types.db
@@ -179,19 +179,19 @@
 (reverse (forall (a) (#(procedure #:clean #:enforce) reverse ((list-of a)) (list-of a)))
          ((null) (null) (let ((#(tmp) #(1))) '())))
 
-(memq (forall (a) (#(procedure #:clean #:foldable) memq (* (list-of a))
-		   (or false (list-of a))))
+(memq (forall (a b) (#(procedure #:clean #:foldable) memq (a (list-of b))
+		     (or false (pair a (list-of b)))))
       ((* null) (let ((#(tmp) #(1))) '#f))
       ((* list) (##core#inline "C_u_i_memq" #(1) #(2))))
 
-(memv (forall (a) (#(procedure #:clean #:foldable) memv (* (list-of a))
-		   (or false (list-of a))))
+(memv (forall (a b) (#(procedure #:clean #:foldable) memv (a (list-of b))
+		     (or false (pair a (list-of b)))))
       ((* null) (let ((#(tmp) #(1))) '#f))
       (((or symbol procedure immediate) list)
        (##core#inline "C_u_i_memq" #(1) #(2))))
 
-(member (forall (a) (#(procedure #:clean #:foldable) member
-                     (* (list-of a)) (or false (list-of a))))
+(member (forall (a b) (#(procedure #:clean #:foldable) member (a (list-of b))
+		       (or false (pair a (list-of b)))))
 	((* null) (let ((#(tmp) #(1))) '#f))
 	(((or symbol procedure immediate) list)
 	 (##core#inline "C_u_i_memq" #(1) #(2)))
Trap