~ chicken-core (chicken-5) daf9cbdee17d203e2643b4dad4670c1885d0e97d


commit daf9cbdee17d203e2643b4dad4670c1885d0e97d
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Mon Aug 22 16:25:49 2011 +0200
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Mon Aug 22 16:25:49 2011 +0200

    enable specialization again, replaced types.db, all looks good

diff --git a/TODO b/TODO
deleted file mode 100644
index 00e9c199..00000000
--- a/TODO
+++ /dev/null
@@ -1,70 +0,0 @@
-TODO								-*- Outline -*-
-
-
-* replace "types.db" with "types.db.new"
-** rm ./xchicken
-
-* enable specialization in "common-declarations.scm" and "tweaks.scm"
-
-* "tests/runtests.sh": remove command to cp "types.db.new"
-
-* compare "-debug x" output for specialization with results from complete self-compile
-
-* test self-build
-
-* run mini-salmonella
-
-* bugs found:
-
-** irregex-core:
-
-Note: in local procedure `lp',
-  in local procedure `collect/terms',
-  in local procedure `lp',
-  in toplevel procedure `string->sre':
-  irregex-core.scm:806: in procedure call to `pair?', the predicate is called with an argument of type
-  `(pair * *)' and will always return true
-
->                         `(if ,(cadr res)
->                              ,(if (pair? (cdr res))
-
-Note: in local procedure `lp',
-  in local procedure `collect/terms',
-  in local procedure `lp',
-  in toplevel procedure `string->sre':
-  irregex-core.scm:811: in procedure call to `pair?', the predicate is called with an argument of type
-  `(pair (pair * (pair * *)) *)' and will always return true
-
->                          `(if ,(cadadr res)
->                               ,(if (pair? (cdr res))
-
-Note: in local procedure `lp',
-  in local procedure `collect/terms',
-  in local procedure `lp',
-  in toplevel procedure `string->sre':
-  irregex-core.scm:815: in procedure call to `pair?', the predicate is called with an argument of type
-  `(pair (pair * (pair * *)) *)' and will always return true
-
-                          `(if ,(cadadr res)
-                               ,(if (pair? (cdr res))
-                                    (sre-sequence (cddadr res))
-                                    'epsilon)
-                               ,(sre-alternate
-                                 (if (pair? (cdr res)) (cddr res) '())))))
-
-** compiler-syntax.scm
-
-Note: in toplevel procedure `##compiler#r-c-s':
-  compiler-syntax.scm:53: in procedure call to `symbol?', the predicate is called with an argument of type
-  `(pair * *)' and will always return false
-
-(define (r-c-s names transformer #!optional (se '()))
-  (let ((t (cons (##sys#ensure-transformer
-		  (##sys#er-transformer transformer)
-		  (car names))
-		 se)))
-    (for-each
-     (lambda (name)
-       (##sys#put! name '##compiler#compiler-syntax t) )
-     names) ) )
-     (if (symbol? names) (list names) names) ) ) )  ; <-
diff --git a/common-declarations.scm b/common-declarations.scm
index ddae44ba..9201ca4c 100644
--- a/common-declarations.scm
+++ b/common-declarations.scm
@@ -25,7 +25,6 @@
 
 
 (declare 
-  ;XXX (specialize)
   (usual-integrations))
 
 (cond-expand
diff --git a/defaults.make b/defaults.make
index ee811fd0..54da6595 100644
--- a/defaults.make
+++ b/defaults.make
@@ -272,11 +272,13 @@ CSI ?= csi$(EXE)
 
 CHICKEN_OPTIONS = -optimize-level 2 -include-path . -include-path $(SRCDIR) -inline -ignore-repository -feature chicken-bootstrap
 ifdef DEBUGBUILD
-CHICKEN_OPTIONS += -feature debugbuild -scrutinize -types $(SRCDIR)types.db
-CHICKEN_OPTIONS += -feature debugbuild
+CHICKEN_OPTIONS += -feature debugbuild -scrutinize -types $(SRCDIR)types.db -verbose
 else
 CHICKEN_OPTIONS += -no-warnings
 endif
+ifndef BUILDING_CHICKEN_BOOT
+CHICKEN_OPTIONS += -specialize
+endif
 CHICKEN_OPTIONS += $(EXTRA_CHICKEN_OPTIONS)
 CHICKEN_LIBRARY_OPTIONS = $(CHICKEN_OPTIONS) -explicit-use -no-trace
 CHICKEN_PROGRAM_OPTIONS = $(CHICKEN_OPTIONS) -no-lambda-info -local
diff --git a/rules.make b/rules.make
index 3e7fd117..95935589 100644
--- a/rules.make
+++ b/rules.make
@@ -669,7 +669,7 @@ bench: $(CHICKEN_SHARED_EXECUTABLE) $(CSI_SHARED_EXECUTABLE) $(CSC_PROGRAM)
 boot-chicken:
 	$(MAKE) -f Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) PREFIX=/nowhere CONFIG= \
 	  SRCDIR=$(SRCDIR) CHICKEN=$(CHICKEN) PROGRAM_SUFFIX=-boot-stage1 STATICBUILD=1 \
-	  C_COMPILER_OPTIMIZATION_OPTIONS= C_HACKED_APPLY= \
+	  C_COMPILER_OPTIMIZATION_OPTIONS= C_HACKED_APPLY= BUILDING_CHICKEN_BOOT=1 \
 	  confclean chicken-boot-stage1$(EXE)
 	$(MAKE) -f Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) PREFIX=/nowhere CONFIG= \
 	  SRCDIR=$(SRCDIR) CHICKEN=`pwd`/chicken-boot-stage1$(EXE) PROGRAM_SUFFIX=-boot \
diff --git a/tests/runtests.sh b/tests/runtests.sh
index 31bdf6d5..7cf08276 100644
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -23,9 +23,7 @@ FAST_OPTIONS="-O5 -d0 -b -disable-interrupts"
 
 $CHICKEN_INSTALL -init ${TEST_DIR}/test-repository
 
-#TYPESDB=../types.db
-#XXX
-TYPESDB=../types.db.new
+TYPESDB=../types.db
 cp $TYPESDB test-repository/types.db
 
 if test -n "$MSYSTEM"; then
diff --git a/tweaks.scm b/tweaks.scm
index ca4c3993..f4302d02 100644
--- a/tweaks.scm
+++ b/tweaks.scm
@@ -32,7 +32,6 @@
 (cond-expand
   ((not debugbuild)
    (declare
-     ;XXX (specialize)
      (disable-interrupts)
      (no-bound-checks)
      (no-procedure-checks)
diff --git a/types.db b/types.db
index f0799d5e..db17f7f6 100644
--- a/types.db
+++ b/types.db
@@ -57,56 +57,90 @@
 
 (equal? (procedure equal? (* *) boolean)
 	(((or fixnum symbol char eof null undefined) *) (eq? #(1) #(2)))
-	((* (or fixnum symbol char eof null undefined) (eq? #(1) #(2)))))
+	((* (or fixnum symbol char eof null undefined)) (eq? #(1) #(2))))
 
 (pair? (procedure? pair pair? (*) boolean))
 
-(cons (procedure cons (* *) pair))
-;* (cons (forall (a b) (procedure cons (a b) (pair a b))))
-
-(##sys#cons (procedure ##sys#cons (* *) pair))
-;* (##sys#cons (forall (a b) (procedure ##sys#cons (a b) (pair a b))))
-
-(car (procedure! car (pair) *) ((pair) (##core#inline "C_u_i_car" #(1))))
-;* (car (forall (a) (procedure! car ((pair a *)) a) ((pair) (##core#inline "C_u_i_car" #(1))))
-(cdr (procedure! cdr (pair) *) ((pair) (##core#inline "C_u_i_cdr" #(1))))
-;* (cdr (forall (a) (procedure! cdr ((pair * a)) a) ((pair) (##core#inline "C_u_i_cdr" #(1))))
-
-(caar (procedure! caar (pair) *))
-;* (caar (forall (a) (procedure! caar ((pair (pair a *) *)) a))
-
-;*XXX ...
-
-(cadr (procedure! cadr (pair) *))
-(cdar (procedure! cdar (pair) *))
-(cddr (procedure! cddr (pair) *))
-(caaar (procedure! caaar (pair) *))
-(caadr (procedure! caadr (pair) *))
-(cadar (procedure! cadar (pair) *))
-(caddr (procedure! caddr (pair) *))
-(cdaar (procedure! cdaar (pair) *))
-(cdadr (procedure! cdadr (pair) *))
-(cddar (procedure! cddar (pair) *))
-(cdddr (procedure! cdddr (pair) *))
-(caaaar (procedure! caaaar (pair) *))
-(caaadr (procedure! caaadr (pair) *))
-(caadar (procedure! caadar (pair) *))
-(caaddr (procedure! caaddr (pair) *))
-(cadaar (procedure! cadaar (pair) *))
-(cadadr (procedure! cadadr (pair) *))
-(caddar (procedure! caddar (pair) *))
-(cadddr (procedure! cadddr (pair) *))
-(cdaaar (procedure! cdaaar (pair) *))
-(cdaadr (procedure! cdaadr (pair) *))
-(cdadar (procedure! cdadar (pair) *))
-(cdaddr (procedure! cdaddr (pair) *))
-(cddaar (procedure! cddaar (pair) *))
-(cddadr (procedure! cddadr (pair) *))
-(cdddar (procedure! cdddar (pair) *))
-(cddddr (procedure! cddddr (pair) *))
-
-(set-car! (procedure! set-car! (pair *) undefined) ((pair *) (##sys#setslot #(1) '0 #(2))))
-(set-cdr! (procedure! set-cdr! (pair *) undefined) ((pair *) (##sys#setslot #(1) '1 #(2))))
+(cons (forall (a b) (procedure cons (a b) (pair a b))))
+
+(##sys#cons (forall (a b) (procedure ##sys#cons (a b) (pair a b))))
+
+(car (forall (a) (procedure! car ((pair a *)) a)) ((pair) (##core#inline "C_u_i_car" #(1))))
+(cdr (forall (a) (procedure! cdr ((pair * a)) a)) ((pair) (##core#inline "C_u_i_cdr" #(1))))
+
+(caar (forall (a) (procedure! caar ((pair (pair a *) *)) a))
+      (((pair (pair * *) *)) (##core#inline "C_u_i_car" (##core#inline "C_u_i_car" #(1)))))
+(cadr (forall (a) (procedure! cadr ((pair * (pair a *))) a))
+      (((pair * (pair * *))) (##core#inline "C_u_i_car" (##core#inline "C_u_i_cdr" #(1)))))
+(cdar (forall (a) (procedure! cdar ((pair (pair * a) *)) a))
+      (((pair (pair * *) *)) (##core#inline "C_u_i_cdr" (##core#inline "C_u_i_car" #(1)))))
+(cddr (forall (a) (procedure! cddr ((pair * (pair * a))) a))
+      (((pair * (pair * *))) (##core#inline "C_u_i_cdr" (##core#inline "C_u_i_cdr" #(1)))))
+
+(caaar (forall (a) (procedure! caaar ((pair (pair (pair a *) *) *)) a))
+       (((pair (pair (pair * *) *) *))
+	(##core#inline "C_u_i_car"
+		       (##core#inline "C_u_i_car" (##core#inline "C_u_i_car" #(1))))))
+
+(caadr (forall (a) (procedure! caadr ((pair * (pair (pair a *) *))) a))
+       (((pair * (pair (pair * *) *)))
+	(##core#inline "C_u_i_car"
+		       (##core#inline "C_u_i_car" (##core#inline "C_u_i_cdr" #(1))))))
+
+(cadar (forall (a) (procedure! cadar ((pair (pair * (pair a *)) *)) a))
+       (((pair (pair * (pair * *)) *))
+	(##core#inline "C_u_i_car"
+		       (##core#inline "C_u_i_cdr" (##core#inline "C_u_i_car" #(1))))))
+
+(caddr (forall (a) (procedure! caddr ((pair * (pair * (pair a *)))) a))
+       (((pair * (pair * (pair * *))))
+	(##core#inline "C_u_i_car"
+		       (##core#inline "C_u_i_cdr" (##core#inline "C_u_i_cdr" #(1))))))
+
+(cdaar (forall (a) (procedure! cdaar ((pair (pair (pair * a) *) *)) a))
+       (((pair (pair (pair * *) *) *))
+	(##core#inline "C_u_i_cdr"
+		       (##core#inline "C_u_i_car" (##core#inline "C_u_i_car" #(1))))))
+
+(cdadr (forall (a) (procedure! cdadr ((pair * (pair (pair * a) *))) a))
+       (((pair * (pair (pair * *) *)))
+	(##core#inline "C_u_i_cdr"
+		       (##core#inline "C_u_i_car" (##core#inline "C_u_i_cdr" #(1))))))
+
+(cddar (forall (a) (procedure! cddar ((pair (pair * (pair * a)) *)) a))
+       (((pair (pair * (pair * *)) *))
+	(##core#inline "C_u_i_cdr"
+		       (##core#inline "C_u_i_cdr" (##core#inline "C_u_i_car" #(1))))))
+
+(cdddr (forall (a) (procedure! cdddr ((pair * (pair * (pair * a)))) a))
+       (((pair * (pair * (pair * *))))
+	(##core#inline "C_u_i_cdr"
+		       (##core#inline "C_u_i_cdr" (##core#inline "C_u_i_cdr" #(1))))))
+
+(caaaar (forall (a) (procedure! caaaar ((pair (pair (pair (pair a *) *) *) *)) a)))
+(caaadr (forall (a) (procedure! caaadr ((pair * (pair (pair (pair a *) *) *))) a)))
+(caadar (forall (a) (procedure! caadar ((pair (pair * (pair (pair a *) *)) *)) a)))
+(caaddr (forall (a) (procedure! caaddr ((pair * (pair * (pair (pair a *) *)))) a)))
+(cadaar (forall (a) (procedure! cadaar ((pair (pair (pair * (pair a *)) *) *)) a)))
+(cadadr (forall (a) (procedure! cadadr ((pair * (pair (pair * (pair a *)) *))) a)))
+(caddar (forall (a) (procedure! caddar ((pair (pair * (pair * (pair a *))) *)) a)))
+(cadddr (forall (a) (procedure! cadddr ((pair * (pair * (pair * (pair a *))))) a)))
+(cdaaar (forall (a) (procedure! cdaaar ((pair (pair (pair (pair * a) *) *) *)) a)))
+(cdaadr (forall (a) (procedure! cdaadr ((pair * (pair (pair (pair * a) *) *))) a)))
+(cdadar (forall (a) (procedure! cdadar ((pair (pair * (pair (pair * a) *)) *)) a)))
+(cdaddr (forall (a) (procedure! cdaddr ((pair * (pair * (pair (pair * a) *)))) a)))
+(cddaar (forall (a) (procedure! cddaar ((pair (pair (pair * (pair * a)) *) *)) a)))
+(cddadr (forall (a) (procedure! cddadr ((pair * (pair (pair * (pair * a)) *))) a)))
+(cdddar (forall (a) (procedure! cdddar ((pair (pair * (pair * (pair * a))) *)) a)))
+(cddddr (forall (a) (procedure! cddddr ((pair * (pair * (pair * (pair * a))))) a)))
+
+(set-car! (procedure! set-car! (pair *) undefined) 
+	  ((pair (or fixnum char boolean eof null undefined)) (##sys#setislot #(1) '0 #(2)))
+	  ((pair *) (##sys#setslot #(1) '0 #(2))))
+
+(set-cdr! (procedure! set-cdr! (pair *) undefined)
+	  ((pair (or fixnum char boolean eof null undefined)) (##sys#setislot #(1) '1 #(2)))
+	  ((pair *) (##sys#setslot #(1) '1 #(2))))
 
 (null? (procedure? null null? (*) boolean))
 (list? (procedure? list list? (*) boolean))
@@ -115,17 +149,37 @@
 (##sys#list (procedure ##sys#list (#!rest) list))
 (length (procedure! length (list) fixnum) ((list) (##core#inline "C_u_i_length" #(1))))
 (##sys#length (procedure! ##sys#length (list) fixnum) ((list) (##core#inline "C_u_i_length" #(1))))
-(list-tail (procedure! list-tail (list fixnum) *))
-(list-ref (procedure! list-ref (list fixnum) *))
+(list-tail (forall (a) (procedure! list-tail ((list a) fixnum) (list a))))
+(list-ref (forall (a) (procedure! list-ref ((list a) fixnum) a)))
 (append (procedure append (list #!rest) *))
 (##sys#append (procedure ##sys#append (list #!rest) *))
-(reverse (procedure! reverse (list) list))
+(reverse (forall (a) (procedure! reverse ((list a)) (list a))))
 (memq (procedure memq (* list) *) ((* list) (##core#inline "C_u_i_memq" #(1) #(2))))
-(memv (procedure memv (* list) *))
-(member (procedure member (* list #!optional (procedure (* *) *)) *))
+
+(memv (procedure memv (* list) *)
+      (((or fixnum boolean char eof undefined null) list)
+       (##core#inline "C_u_i_memq" #(1) #(2))))
+
+;; this may be a bit much...
+(member (forall (a) (procedure member (* list #!optional (procedure (* *) *)) *))
+	(((or fixnum boolean char eof undefined null) list)
+	 (##core#inline "C_u_i_memq" #(1) #(2)))
+	((* (list (or fixnum boolean char eof undefined null)))
+	 (##core#inline "C_u_i_memq" #(1) #(2))))
+
 (assq (procedure assq (* list) *) ((* list) (##core#inline "C_u_i_assq" #(1) #(2))))
-(assv (procedure assv (* list) *))
-(assoc (procedure assoc (* list #!optional (procedure (* *) *)) *))
+
+(assv (procedure assv (* list) *)
+      (((or fixnum boolean char eof undefined null) list)
+       (##core#inline "C_u_i_assq" #(1) #(2)))
+      ((* (list (or fixnum boolean char eof undefined null)))
+       (##core#inline "C_u_i_assq" #(1) #(2))))
+
+(assoc (procedure assoc (* list #!optional (procedure (* *) *)) *)
+       (((or fixnum boolean char eof undefined null) list)
+	(##core#inline "C_u_i_assq" #(1) #(2)))
+       ((* (list (or fixnum boolean char eof undefined null)))
+	(##core#inline "C_u_i_assq" #(1) #(2))))
 
 (symbol? (procedure? symbol symbol? (*) boolean))
 
@@ -173,6 +227,7 @@
      ((float float) (##core#inline "C_i_flonum_min" #(1) #(2))))
 
 (+ (procedure! + (#!rest number) number)
+   (() (fixnum) '0)
    ((fixnum) (fixnum) #(1))
    ((float) (float) #(1))
    ((number) #(1))
@@ -209,6 +264,7 @@
     (##core#inline_allocate ("C_a_i_flonum_negate" 4) #(1))))
 
 (* (procedure! * (#!rest number) number)
+   (() (fixnum) '1)
    ((fixnum) (fixnum) #(1))
    ((float) (float) #(1))
    ((number) (number) #(1))
@@ -441,18 +497,19 @@
 
 ;(string-copy (procedure! string-copy (string) string)) - we use the more general version from srfi-13
 
-(string->list (procedure! string->list (string) list))
-(list->string (procedure! list->string (list) string))
+(string->list (procedure! string->list (string) (list char)))
+(list->string (procedure! list->string ((list char)) string))
 (substring (procedure! substring (string fixnum #!optional fixnum) string))
 ;(string-fill! (procedure! string-fill! (string char) string)) - s.a.
 (string (procedure! string (#!rest char) string))
 
 (vector? (procedure? vector vector? (*) boolean))
 
-(make-vector (procedure! make-vector (fixnum #!optional *) vector))
+;; not result type "(vector a)", since it may be mutated!
+(make-vector (forall (a) (procedure! make-vector (fixnum #!optional a) vector)))
 
-(vector-ref (procedure! vector-ref (vector fixnum) *))
-(##sys#vector-ref (procedure! ##sys#vector-ref (vector fixnum) *))
+(vector-ref (forall (a) (procedure! vector-ref ((vector a) fixnum) a)))
+(##sys#vector-ref (forall (a) (procedure! ##sys#vector-ref ((vector a) fixnum) a)))
 (vector-set! (procedure! vector-set! (vector fixnum *) undefined))
 (vector (procedure vector (#!rest) vector))
 (##sys#vector (procedure ##sys#vector (#!rest) vector))
@@ -462,75 +519,101 @@
 (##sys#vector-length (procedure! ##sys#vector-length (vector) fixnum)
 		     ((vector) (##sys#size #(1))))
 
-(vector->list (procedure! vector->list (vector) list))
-(##sys#vector->list (procedure! ##sys#vector->list (vector) list))
-(list->vector (procedure! list->vector (list) vector))
-(##sys#list->vector (procedure! ##sys#list->vector (list) vector))
-(vector-fill! (procedure! vector-fill! (vector *) vector))
+(vector->list (forall (a) (procedure! vector->list ((vector a)) (list a))))
+(##sys#vector->list (forall (a) (procedure! ##sys#vector->list ((vector a)) (list a))))
+(list->vector (forall (a) (procedure! list->vector ((list a)) (vector a))))
+(##sys#list->vector (forall (a) (procedure! ##sys#list->vector ((list a)) (vector a))))
+(vector-fill! (procedure! vector-fill! (vector *) undefined))
 
 (procedure? (procedure? procedure procedure? (*) boolean))
 
 (vector-copy! (procedure! vector-copy! (vector vector #!optional fixnum) undefined))
-(map (procedure! map (procedure #!rest list) list))
-(for-each (procedure! for-each (procedure #!rest list) undefined))
+(map (forall (a b) (procedure! map ((procedure (a #!rest) b) (list a) #!rest list) (list b))))
+
+(for-each
+ (forall (a) (procedure! for-each ((procedure (a #!rest) . *) (list a) #!rest list) undefined)))
+
 (apply (procedure! apply (procedure #!rest) . *))
 (##sys#apply (procedure! ##sys#apply (procedure #!rest) . *))
-(force (procedure force (*) *))
-(call-with-current-continuation (procedure! call-with-current-continuation (procedure) . *))
+
+(force (procedure force (*) *)
+       (((not (struct promise))) #(1)))
+
+(call-with-current-continuation
+ (procedure! call-with-current-continuation ((procedure (procedure) . *)) . *))
+
 (input-port? (procedure input-port? (*) boolean))
 (output-port? (procedure output-port? (*) boolean))
-(current-input-port (procedure! current-input-port (#!optional port) port))
-(current-output-port (procedure! current-output-port (#!optional port) port))
-(call-with-input-file (procedure call-with-input-file (string (procedure (port) . *) #!rest) . *))
-(call-with-output-file (procedure call-with-output-file (string (procedure (port) . *) #!rest) . *))
+
+(current-input-port
+ (procedure! current-input-port (#!optional port) port)
+ ((port) (let ((#(tmp1) #(1))) 
+	   (let ((#(tmp2) (set! ##sys#standard-input #(tmp1))))
+	     #(tmp1))))
+ (() ##sys#standard-input))
+
+(current-output-port
+ (procedure! current-output-port (#!optional port) port)
+ ((port) (let ((#(tmp1) #(1)))
+	   (let ((#(tmp2) (set! ##sys#standard-output #(tmp1))))
+	     #(tmp1))))
+ (() ##sys#standard-output))
+
+(call-with-input-file
+    (procedure call-with-input-file (string (procedure (port) . *) #!rest) . *))
+
+(call-with-output-file
+    (procedure call-with-output-file (string (procedure (port) . *) #!rest) . *))
+
 (open-input-file (procedure! open-input-file (string #!rest symbol) port))
 (open-output-file (procedure! open-output-file (string #!rest symbol) port))
 (close-input-port (procedure! close-input-port (port) undefined))
 (close-output-port (procedure! close-output-port (port) undefined))
-(load (procedure load (string #!optional procedure) undefined))
+(load (procedure load (string #!optional (procedure (*) . *)) undefined))
 (read (procedure! read (#!optional port) *))
 
 (eof-object? (procedure? eof eof-object? (*) boolean))
 
 ;;XXX if we had input/output port distinction, we could specialize these:
-(read-char (procedure! read-char (#!optional port) *)) ; result (or eof char) ?
+(read-char (procedure! read-char (#!optional port) *)) ;XXX result (or eof char) ?
 (peek-char (procedure! peek-char (#!optional port) *))
 
 (write (procedure! write (* #!optional port) undefined))
 (display (procedure! display (* #!optional port) undefined))
 (write-char (procedure! write-char (char #!optional port) undefined))
 (newline (procedure! newline (#!optional port) undefined))
-(with-input-from-file (procedure! with-input-from-file (string procedure #!rest symbol) . *))
-(with-output-to-file (procedure! with-output-to-file (string procedure #!rest symbol) . *))
-(dynamic-wind (procedure! dynamic-wind (procedure procedure procedure) . *))
+
+(with-input-from-file
+    (procedure! with-input-from-file (string (procedure () . *) #!rest symbol) . *))
+
+(with-output-to-file
+    (procedure! with-output-to-file (string (procedure () . *) #!rest symbol) . *))
+
+(dynamic-wind
+    (procedure! dynamic-wind ((procedure () . *) (procedure () . *) (procedure () . *)) . *))
+
 (values (procedure values (#!rest values) . *))
 (##sys#values (procedure ##sys#values (#!rest values) . *))
 
-(call-with-values (procedure! call-with-values ((procedure () . *) procedure) . *))
-
-;XXX match-specialization can't handle complex procedure types yet
-#;(call-with-values (procedure! call-with-values ((procedure () . *) procedure) . *)
+(call-with-values (procedure! call-with-values ((procedure () . *) procedure) . *)
   (((procedure () *) *) (let ((#(tmp1) #(1)))
 			  (let ((#(tmp2) #(2)))
 			    (#(tmp2) (#(tmp1)))))))
 
 (##sys#call-with-values
- (procedure! ##sys#call-with-values ((procedure () . *) procedure) . *))
-
-#;(##sys#call-with-values
  (procedure! ##sys#call-with-values ((procedure () . *) procedure) . *)
  (((procedure () *) *) (let ((#(tmp1) #(1)))
 			 (let ((#(tmp2) #(2)))
 			   (#(tmp2) (#(tmp1)))))))
 
-(eval (procedure eval (* #!optional *) *))
+(eval (procedure eval (* #!optional (struct environment)) *))
 (char-ready? (procedure! char-ready? (#!optional port) boolean))
 
 (imag-part (procedure! imag-part (number) number)
-	   ((or fixnum float number) (let ((#(tmp) #(1))) '0)))
+	   (((or fixnum float number)) (let ((#(tmp) #(1))) '0)))
 
 (real-part (procedure! real-part (number) number)
-	   ((or fixnum float number) #(1)))
+	   (((or fixnum float number)) #(1)))
 
 (magnitude (procedure! magnitude (number) number)
 	   ((fixnum) (fixnum)
@@ -544,9 +627,14 @@
 (denominator (procedure! denominator (number) number)
 	     ((fixnum) (fixnum) (let ((#(tmp) #(1))) '1)))
 
-(scheme-report-environment (procedure! scheme-report-environment (#!optional fixnum) *))
-(null-environment (procedure! null-environment (#!optional fixnum) *))
-(interaction-environment (procedure interaction-environment () *))
+(scheme-report-environment 
+ (procedure! scheme-report-environment (#!optional fixnum) (struct environment)))
+
+(null-environment
+ (procedure! null-environment (#!optional fixnum) (struct environment)))
+
+(interaction-environment
+ (procedure interaction-environment () (struct environment)))
 
 (port-closed? (procedure! port-closed? (port) boolean)
 	      ((port) (##sys#slot #(1) '8)))
@@ -559,8 +647,8 @@
       ((float) (float) 
        (##core#inline_allocate ("C_a_i_flonum_plus" 4) #(1) '1.0)))
 
-(argc+argv (procedure argc+argv () fixnum list))
-(argv (procedure argv () list))
+(argc+argv (procedure argc+argv () fixnum (list string) fixnum))
+(argv (procedure argv () (list string)))
 (arithmetic-shift (procedure! arithmetic-shift (number number) number))
 
 (bit-set? (procedure! bit-set? (number fixnum) boolean)
@@ -588,20 +676,19 @@
 (blob? (procedure? blob blob? (*) boolean))
 
 (blob=? (procedure! blob=? (blob blob) boolean))
-(breakpoint (procedure breakpoint (#!optional *) . *))
 (build-platform (procedure build-platform () symbol))
-(call/cc (procedure! call/cc (procedure) . *))
+(call/cc (procedure! call/cc ((procedure (*) . *)) . *))
 (case-sensitive (procedure case-sensitive (#!optional *) *))
-(char-name (procedure! char-name ((or char symbol) #!optional char) *))
+(char-name (procedure! char-name ((or char symbol) #!optional char) *)) ;XXX -> (or char symbol) ?
 (chicken-home (procedure chicken-home () string))
 (chicken-version (procedure chicken-version (#!optional *) string))
-(command-line-arguments (procedure command-line-arguments (#!optional list) list))
+(command-line-arguments (procedure command-line-arguments (#!optional (list string)) (list string)))
 (condition-predicate (procedure! condition-predicate (symbol) (procedure ((struct condition)) boolean)))
 (condition-property-accessor (procedure! condition-property-accessor (symbol symbol #!optional *) (procedure ((struct condition)) *)))
 
 (condition? (procedure? (struct condition) condition? (*) boolean))
 
-(condition->list (procedure! condition->list ((struct condition)) list))
+(condition->list (procedure! condition->list ((struct condition)) (list (pair symbol *))))
 (continuation-capture (procedure! continuation-capture ((procedure ((struct continuation)) . *)) *))
 (continuation-graft (procedure! continuation-graft ((struct continuation) (procedure () . *)) *))
 (continuation-return (procedure! continuation-return (procedure #!rest) . *)) ;XXX make return type more specific?
@@ -611,34 +698,52 @@
 (copy-read-table (procedure! copy-read-table ((struct read-table)) (struct read-table)))
 (cpu-time (procedure cpu-time () fixnum fixnum))
 
-(current-error-port (procedure! current-error-port (#!optional port) port)
-		    ((port) (set! ##sys#standard-error #(1)))
-		    (() ##sys#standard-error))
+(current-error-port
+ (procedure! current-error-port (#!optional port) port)
+ ((port) (let ((#(tmp1) #(1))) 
+	   (let ((#(tmp2) (set! ##sys#standard-error #(tmp1))))
+	     #(tmp1))))
+ (() ##sys#standard-error))
 
 (current-exception-handler
- (procedure! current-exception-handler (#!optional procedure) procedure)
- ((procedure) (set! ##sys#current-exception-handler #(1)))
+ (procedure! current-exception-handler (#!optional (procedure (*) noreturn)) procedure)
+ ((procedure) (let ((#(tmp1) #(1))) 
+		(let ((#(tmp2) (set! ##sys#current-exception-handler #(tmp1))))
+		  #(tmp1))))
  (() ##sys#current-exception-handler))
 
 (current-gc-milliseconds (procedure current-gc-milliseconds () fixnum))
 (current-milliseconds (procedure current-milliseconds () float))
-(current-read-table (procedure current-read-table () (struct read-table)))
+
+(current-read-table
+ (procedure current-read-table (#!optional (struct read-table)) (struct read-table)))
+
 (current-seconds (procedure current-seconds () float))
 (define-reader-ctor (procedure! define-reader-ctor (symbol procedure) undefined))
 (delete-file (procedure! delete-file (string) string))
 (enable-warnings (procedure enable-warnings (#!optional *) *))
-(equal=? (procedure equal=? (* *) boolean))
-(er-macro-transformer (procedure! er-macro-transformer ((procedure (* * *) *)) (struct transformer)))
+
+(equal=? (procedure equal=? (* *) boolean)
+	 (((or fixnum symbol char eof null undefined) *) (eq? #(1) #(2)))
+	 ((* (or fixnum symbol char eof null undefined)) (eq? #(1) #(2)))
+	 (((or float number) (or float number)) (= #(1) #(2))))
+
+(er-macro-transformer
+ (procedure! 
+  er-macro-transformer
+  ((procedure (* (procedure (*) *) (procedure (* *) *)) *))
+  (struct transformer)))
+
 (errno (procedure errno () fixnum))
-(error (procedure error (#!rest) noreturn))
-(##sys#error (procedure ##sys#error (#!rest) noreturn))
-(##sys#signal-hook (procedure ##sys#signal-hook (#!rest) noreturn))
+(error (procedure error (* #!rest) noreturn))
+(##sys#error (procedure ##sys#error (* #!rest) noreturn))
+(##sys#signal-hook (procedure ##sys#signal-hook (* #!rest) noreturn))
 (exit (procedure exit (#!optional fixnum) noreturn))
-(exit-handler (procedure! exit-handler (#!optional procedure) procedure))
-(expand (procedure expand (* #!optional *) *))
+(exit-handler (procedure! exit-handler (#!optional (procedure (fixnum) . *)) procedure))
+(expand (procedure expand (* #!optional list) *))
 (extension-information (procedure extension-information (symbol) *))
 (feature? (procedure feature? (symbol) boolean))
-(features (procedure features () list))
+(features (procedure features () (list symbol)))
 (file-exists? (procedure! file-exists? (string) *))
 (directory-exists? (procedure! directory-exists? (string) *))
 (fixnum-bits fixnum)
@@ -660,8 +765,8 @@
 
 (flush-output (procedure! flush-output (#!optional port) undefined))
 
-(foldl (procedure! foldl ((procedure (* *) *) * list) *))
-(foldr (procedure! foldr ((procedure (* *) *) * list) *))
+(foldl (forall (a b) (procedure! foldl ((procedure (a b) a) a (list b)) a)))
+(foldr (forall (a b) (procedure! foldr ((procedure (a b) b) b (list a)) b)))
 
 (force-finalizers (procedure force-finalizers () undefined))
 
@@ -775,25 +880,38 @@
 (fxshr (procedure fxshr (fixnum fixnum) fixnum))
 (fxxor (procedure fxxor (fixnum fixnum) fixnum))
 (gc (procedure gc (#!optional *) fixnum))
-(gensym (procedure gensym (#!optional *) symbol))
+(gensym (procedure gensym (#!optional (or string symbol)) symbol))
 
 (get (procedure! get (symbol symbol #!optional *) *)
      ((symbol symbol *) (##core#inline "C_i_getprop" #(1) #(2) #(3))))
 
-(get-call-chain (procedure! get-call-chain (#!optional fixnum *) list))
+(get-call-chain (procedure! get-call-chain (#!optional fixnum (struct thread)) (list vector)))
 (get-condition-property (procedure! get-condition-property ((struct condition) symbol symbol #!optional *) *))
 (get-environment-variable (procedure! get-environment-variable (string) *))
 (get-keyword (procedure! get-keyword (symbol list #!optional *) *))
 (get-output-string (procedure! get-output-string (port) string))
 (get-properties (procedure! get-properties (symbol list) symbol * list))
-(getter-with-setter (procedure! getter-with-setter (procedure procedure #!optional string) procedure))
-(implicit-exit-handler (procedure! implicit-exit-handler (#!optional procedure) procedure))
-(ir-macro-transformer (procedure ir-macro-transformer ((procedure (* * *) *)) (struct transformer)))
+
+(getter-with-setter
+ (procedure!
+  getter-with-setter
+  ((procedure (#!rest) *) (procedure (* #!rest) . *) #!optional string)
+  procedure))
+
+(implicit-exit-handler
+ (procedure! implicit-exit-handler (#!optional (procedure () . *)) procedure))
+
+(ir-macro-transformer
+ (procedure
+  ir-macro-transformer
+  ((procedure (* (procedure (*) *) (procedure (* *) *)) *))
+  (struct transformer)))
+
 (keyword->string (procedure! keyword->string (symbol) string))
-(keyword-style (procedure keyword-style (#!optional *) *))
+(keyword-style (procedure keyword-style (#!optional symbol) symbol))
 (keyword? (procedure keyword? (*) boolean))
 (load-library (procedure! load-library (symbol #!optional string) undefined))
-(load-relative (procedure! load-relative (string #!optional procedure) undefined))
+(load-relative (procedure! load-relative (string #!optional (procedure (*) . *)) undefined))
 (load-verbose (procedure load-verbose (#!optional *) *))
 (machine-byte-order (procedure machine-byte-order () symbol))
 (machine-type (procedure machine-type () symbol))
@@ -805,7 +923,7 @@
 (make-parameter (procedure! make-parameter (* #!optional procedure) procedure))
 (make-property-condition (procedure! make-property-condition (symbol #!rest *) (struct condition)))
 (maximum-flonum float)
-(memory-statistics (procedure memory-statistics () vector))
+(memory-statistics (procedure memory-statistics () (vector fixnum)))
 (minimum-flonum float)
 (most-negative-fixnum fixnum)
 (most-positive-fixnum fixnum)
@@ -837,23 +955,25 @@
 (register-feature! (procedure! register-feature! (#!rest symbol) undefined))
 (remprop! (procedure! remprop! (symbol symbol) undefined))
 (rename-file (procedure! rename-file (string string) string))
-(repl (procedure! repl (#!optional (procedure (*) *)) undefined))
-(repl-prompt (procedure! repl-prompt (#!optional procedure) procedure))
+(repl (procedure! repl (#!optional (procedure (*) . *)) undefined))
+(repl-prompt (procedure! repl-prompt (#!optional (procedure () string)) procedure))
 (repository-path (procedure repository-path (#!optional *) *))
-(require (procedure require (#!rest *) undefined))
-(reset (procedure reset () undefined))
-(reset-handler (procedure! reset-handler (#!optional procedure) procedure))
+(require (procedure require (#!rest (or string symbol)) undefined))
+(reset (procedure reset () noreturn))
+(reset-handler (procedure! reset-handler (#!optional (procedure () . *)) procedure))
 (return-to-host (procedure return-to-host () . *))
-(reverse-list->string (procedure! reverse-list->string (list) string))
+(reverse-list->string (procedure! reverse-list->string ((list char)) string))
 (set-finalizer! (procedure! set-finalizer! (* (procedure (*) . *)) *))
 (set-gc-report! (procedure set-gc-report! (*) undefined))
-(set-parameterized-read-syntax! (procedure! set-parameterized-read-syntax! (char procedure) undefined))
+
+(set-parameterized-read-syntax!
+ (procedure! set-parameterized-read-syntax! (char (procedure (port fixnum) . *)) undefined))
 
 (set-port-name! (procedure! set-port-name! (port string) undefined)
 		((port string) (##sys#setslot #(1) '3 #(2))))
 
-(set-read-syntax! (procedure! set-read-syntax! (char procedure) undefined))
-(set-sharp-read-syntax! (procedure! set-sharp-read-syntax! (char procedure) undefined))
+(set-read-syntax! (procedure! set-read-syntax! (char (procedure (port) . *)) undefined))
+(set-sharp-read-syntax! (procedure! set-sharp-read-syntax! (char (procedure (port) . *)) undefined))
 (setter (procedure! setter (procedure) procedure))
 (signal (procedure signal (*) . *))
 (signum (procedure! signum (number) number))
@@ -868,19 +988,22 @@
       ((float) (float)
        (##core#inline_allocate ("C_a_i_flonum_difference" 4) #(1) '1.0)))
 
-(subvector (procedure! subvector (vector fixnum #!optional fixnum) vector))
+(subvector (forall (a) (procedure! subvector ((vector a) fixnum #!optional fixnum) (vector a))))
 (symbol-escape (procedure symbol-escape (#!optional *) *))
 
 (symbol-plist (procedure! symbol-plist (symbol) list)
 	      ((symbol) (##sys#slot #(1) '2)))
 
-(syntax-error (procedure syntax-error (#!rest) noreturn))
+(syntax-error (procedure syntax-error (* #!rest) noreturn))
 (system (procedure! system (string) fixnum))
 (unregister-feature! (procedure! unregister-feature! (#!rest symbol) undefined))
-(vector-resize (procedure! vector-resize (vector fixnum) vector))
+(vector-resize (forall (a) (procedure! vector-resize ((vector a) fixnum) (vector a))))
 (void (procedure void (#!rest) undefined))
-(warning (procedure warning (#!rest) . *))
-(with-exception-handler (procedure! with-exception-handler (procedure procedure) . *))
+(warning (procedure warning (* #!rest) undefined))
+
+(with-exception-handler
+ (procedure! with-exception-handler ((procedure (*) . *) (procedure () . *)) . *))
+
 
 ;; chicken (internal)
 
@@ -908,7 +1031,7 @@
 		  (((or null pair list) *) (let ((#(tmp) #(1))) '#t)))
 (##sys#check-string (procedure! ##sys#check-string (string #!optional *) *)
 		    ((string) (let ((#(tmp) #(1))) '#t))
-		    ((string) *  (let ((#(tmp) #(1))) '#t)))
+		    ((string) * (let ((#(tmp) #(1))) '#t)))
 (##sys#check-number (procedure! ##sys#check-number (number #!optional *) *)
 		    ((number) (let ((#(tmp) #(1))) '#t))
 		    ((number *) (let ((#(tmp) #(1))) '#t)))
@@ -943,8 +1066,8 @@
 (->string (procedure ->string (*) string)
 	  ((string) #(1)))
 
-(alist-ref (procedure! alist-ref (* list #!optional (procedure (* *) *) *) *))
-(alist-update! (procedure! alist-update! (* * list #!optional (procedure (* *) *)) *))
+(alist-ref (procedure! alist-ref (* (list pair) #!optional (procedure (* *) *) *) *))
+(alist-update! (procedure! alist-update! (* * (list pair) #!optional (procedure (* *) *)) *))
 (always? deprecated)
 
 (any? (procedure any? (*) boolean)
@@ -954,20 +1077,20 @@
        ((pair) (let ((#(tmp) #(1))) '#f))
        (((not (or pair list))) (let ((#(tmp) #(1))) '#t)))
 
-(binary-search (procedure! binary-search (vector (procedure (*) *)) *))
-(butlast (procedure! butlast (pair) list))
-(chop (procedure! chop (list fixnum) list))
-(complement (procedure! complement (procedure) procedure))
+(binary-search (forall (a) (procedure! binary-search ((vector a) (procedure (a) *)) *)))
+(butlast (forall (a) (procedure! butlast ((pair a *)) (list a))))
+(chop (forall (a) (procedure! chop ((list a) fixnum) (list a))))
+(complement (procedure! complement ((procedure (#!rest) *)) (procedure (#!rest) boolean)))
 (compose (procedure! compose (#!rest procedure) procedure))
-(compress (procedure! compress (list list) list))
+(compress (forall (a) (procedure! compress (list (list a)) (list a))))
 (conc (procedure conc (#!rest) string))
 (conjoin (procedure! conjoin (#!rest (procedure (*) *)) (procedure (*) *)))
-(constantly (procedure constantly (#!rest) . *))
+(constantly (forall (a) (procedure constantly (a) (procedure (#!rest) a))))
 (disjoin (procedure! disjoin (#!rest (procedure (*) *)) (procedure (*) *)))
 (each (procedure! each (#!rest procedure) procedure))
 (flatten (procedure! flatten (pair) list))
-(flip (procedure! flip ((procedure (* *) . *)) procedure))
-(identity (procedure identity (*) *))
+(flip (procedure! flip ((procedure (* *) . *)) (procedure (* *) . *)))
+(identity (forall (a) (procedure identity (a) a)))
 (intersperse (procedure! intersperse (list *) list))
 (join (procedure! join (list list) list))
 (list->queue (procedure! list->queue (list) (struct queue)))
@@ -995,21 +1118,21 @@
 (queue-remove! (procedure! queue-remove! ((struct queue)) *))
 (queue? (procedure? (struct queue) queue? (*) boolean))
 
-(rassoc (procedure! rassoc (* list #!optional (procedure (* *) *)) *))
-(reverse-string-append (procedure! reverse-string-append (list) string))
+(rassoc (procedure! rassoc (* (list pair) #!optional (procedure (* *) *)) *))
+(reverse-string-append (procedure! reverse-string-append ((list string)) string))
 (shuffle deprecated)
 (sort (procedure! sort ((or list vector) (procedure (* *) *)) (or list vector)))
 (sort! (procedure! sort! ((or list vector) (procedure (* *) *)) (or list vector)))
 (sorted? (procedure! sorted? ((or list vector) (procedure (* *) *)) boolean))
-(topological-sort (procedure! topological-sort (list (procedure (* *) *)) list))
+(topological-sort (procedure! topological-sort ((list list) (procedure (* *) *)) list))
 (string-chomp (procedure! string-chomp (string #!optional string) string))
-(string-chop (procedure! string-chop (string fixnum) list))
+(string-chop (procedure! string-chop (string fixnum) (list string)))
 (string-compare3 (procedure! string-compare3 (string string) fixnum))
 (string-compare3-ci (procedure! string-compare3-ci (string string) fixnum))
-(string-intersperse (procedure! string-intersperse (list #!optional string) string))
-(string-split (procedure! string-split (string #!optional string *) list))
+(string-intersperse (procedure! string-intersperse ((list string) #!optional string) string))
+(string-split (procedure! string-split (string #!optional string *) (list string)))
 (string-translate (procedure! string-translate (string * #!optional *) string))
-(string-translate* (procedure! string-translate* (string list) string))
+(string-translate* (procedure! string-translate* (string (list (pair string string))) string))
 (substring-ci=? (procedure! substring-ci=? (string string #!optional fixnum fixnum fixnum) boolean))
 
 (substring-index (procedure! substring-index (string string #!optional fixnum) *)
@@ -1023,21 +1146,22 @@
 (substring=? (procedure! substring=? (string string #!optional fixnum fixnum fixnum) boolean))
 (tail? (procedure tail? (* *) boolean))
 
+
 ;; extras
 
 (format (procedure format (#!rest) *))
 (fprintf (procedure! fprintf (port string #!rest) undefined))
 (pp (procedure! pp (* #!optional port) undefined))
 (pretty-print (procedure! pretty-print (* #!optional port) undefined))
-(pretty-print-width (procedure pretty-print-width (#!optional *) *))
+(pretty-print-width (procedure pretty-print-width (#!optional fixnum) *))
 (printf (procedure! printf (string #!rest) undefined))
-(random (procedure! random (number) number))
-(randomize (procedure! randomize (#!optional number) undefined))
+(random (procedure! random (fixnum) fixnum))
+(randomize (procedure! randomize (#!optional fixnum) undefined))
 (read-buffered (procedure! read-buffered (#!optional port) string))
-(read-byte (procedure! read-byte (#!optional port) fixnum))
+(read-byte (procedure! read-byte (#!optional port) *))
 (read-file (procedure! read-file (#!optional (or port string) (procedure (port) *) fixnum) list))
 (read-line (procedure! read-line (#!optional port (or boolean fixnum)) *))
-(read-lines (procedure! read-lines (#!optional (or port string) fixnum) list))
+(read-lines (procedure! read-lines (#!optional (or port string) fixnum) (list string)))
 (read-string (procedure! read-string (#!optional * port) string))
 (read-string! (procedure! read-string! (fixnum string #!optional port fixnum) fixnum))
 (read-token (procedure! read-token ((procedure (char) *) #!optional port) string))
@@ -1050,14 +1174,15 @@
 (write-line (procedure! write-line (string #!optional port) undefined))
 (write-string (procedure! write-string (string #!optional * port) undefined))
 
+
 ;; files
 
 (delete-file* (procedure! delete-file* (string) *))
 (file-copy (procedure! file-copy (string string #!optional * fixnum) fixnum))
 (file-move (procedure! file-move (string string #!optional * fixnum) fixnum))
-(make-pathname (procedure! make-pathname (* * #!optional string string) string))
+(make-pathname (procedure! make-pathname (* #!optional string string) string))
 (directory-null? (procedure! directory-null? (string) boolean))
-(make-absolute-pathname (procedure! make-absolute-pathname (* * #!optional string string) string))
+(make-absolute-pathname (procedure! make-absolute-pathname (* #!optional string string) string))
 (create-temporary-directory (procedure! create-temporary-directory () string))
 (create-temporary-file (procedure! create-temporary-file (#!optional string) string))
 (decompose-directory (procedure! decompose-directory (string) * * *))
@@ -1073,8 +1198,11 @@
 (pathname-strip-extension (procedure! pathname-strip-extension (string) string))
 (normalize-pathname (procedure! normalize-pathname (string #!optional symbol) string))
 
+
 ;; irregex
 
+;;XXX these need to be reviewed by Alex and/or sjamaan
+
 (irregex (procedure irregex (#!rest) *))
 ;irregex-apply-match
 
@@ -1160,25 +1288,31 @@
 (string->irregex (procedure! string->irregex (string #!rest) *))
 (string->sre (procedure! string->sre (string #!rest) *))
 
+
 ;; lolevel
 
 (address->pointer (procedure! address->pointer (fixnum) pointer)
 		  ((fixnum) (##sys#address->pointer #(1))))
 
-(align-to-word (procedure align-to-word ((or number pointer locative procedure port)) (or pointer number)))
+(align-to-word
+ (procedure 
+  align-to-word
+  ((or number pointer locative procedure port)) 
+  (or pointer number)))
+
 (allocate (procedure! allocate (fixnum) (or boolean pointer)))
 (block-ref (procedure! block-ref (* fixnum) *))
 (block-set! (procedure! block-set! (* fixnum *) *))
 (extend-procedure (procedure! extend-procedure (procedure *) procedure))
 (extended-procedure? (procedure extended-procedure? (*) boolean))
-(free (procedure! free (pointer) *))
+(free (procedure! free (pointer) undefined))
 (locative->object (procedure! locative->object (locative) *))
 (locative-ref (procedure! locative-ref (locative) *))
 (locative-set! (procedure! locative-set! (locative *) *))
-(locative? (procedure locative? (*) boolean))
+(locative? (procedure? locative locative? (*) boolean))
 (make-locative (procedure! make-locative (* #!optional fixnum) locative))
 (make-pointer-vector (procedure! make-pointer-vector (fixnum #!optional pointer) pointer-vector))
-(make-record-instance (procedure make-record-instance (* #!rest) *))
+(make-record-instance (procedure make-record-instance (symbol #!rest) *))
 (make-weak-locative (procedure! make-weak-locative (* #!optional fixnum) locative))
 
 (move-memory! (procedure! move-memory! (* * #!optional fixnum fixnum fixnum) *)
@@ -1195,8 +1329,10 @@
 	      ((locative locative fixnum fixnum fixnum)
 	       (##core#inline "C_copy_ptr_memory" #(2) #(1) #(3) #(5) #(4))))
 
+(mutate-procedure!
+ (procedure! mutate-procedure (procedure (procedure (procedure) . *)) procedure))
+
 (mutate-procedure (deprecated mutate-procedure!))
-(mutate-procedure! (procedure! mutate-procedure! (procedure procedure) procedure))
 (null-pointer deprecated)
 (null-pointer? deprecated)
 
@@ -1263,7 +1399,7 @@
 (pointer-u8-set! (procedure! pointer-u8-set! (pointer fixnum) undefined))
 
 (pointer=? (procedure! pointer=? ((or pointer locative procedure port)
-				  (or pointer procedure locative port)) boolean)
+				  (or pointer locative procedure port)) boolean)
 	   ((pointer pointer) (##core#inline "C_pointer_eqp" #(1) #(2))))
 
 (pointer? (procedure? pointer pointer? (*) boolean))
@@ -1279,15 +1415,19 @@
 (tag-pointer (procedure! tag-pointer (pointer *) pointer))
 (tagged-pointer? (procedure! tagged-pointer? (* #!optional *) boolean))
 
+
 ;; ports
 
 (call-with-input-string (procedure! call-with-input-string (string (procedure (port) . *)) . *))
 (call-with-output-string (procedure! call-with-output-string ((procedure (port) . *)) string))
-(copy-port (procedure! copy-port (* * #!optional (procedure (*) *) (procedure (* *) *)) undefined)) 
+(copy-port (procedure! copy-port (* * #!optional (procedure (*) *) (procedure (* port) *)) undefined)) 
 (make-input-port (procedure! make-input-port ((procedure () char) (procedure () *) (procedure () . *) #!optional * * * *) port))
 (make-output-port (procedure! make-output-port ((procedure (string) . *) (procedure () . *) #!optional (procedure () . *)) port))
 (port-for-each (procedure! port-for-each ((procedure (*) *) (procedure () . *)) undefined))
-(port-map (procedure! port-map ((procedure (*) *) (procedure () . *)) list))
+
+(port-map
+ (forall (a b) (procedure! port-map ((procedure (a) b) (procedure () a)) (list b))))
+
 (port-fold (procedure! port-fold ((procedure (* *) *) * (procedure () *)) *))
 (make-broadcast-port (procedure! make-broadcast-port (#!rest port) port))
 (make-concatenated-port (procedure! make-concatenated-port (port #!rest port) port))
@@ -1297,6 +1437,7 @@
 (with-output-to-port (procedure! with-output-to-port (port (procedure () . *)) . *))
 (with-output-to-string (procedure! with-output-to-string ((procedure () . *)) . *))
 
+
 ;; posix
 
 (_exit (procedure _exit (fixnum) noreturn))
@@ -1312,18 +1453,21 @@
 (create-pipe (procedure create-pipe () fixnum fixnum))
 (create-session (procedure create-session () fixnum))
 (create-symbolic-link (procedure! create-symbolic-link (string string) undefined))
-(current-directory (procedure! current-directory (#!optional string) string))
+
+;; extra arg for "parameterize" - ugh, what a hack...
+(current-directory (procedure! current-directory (#!optional string *) string))
+
 (current-effective-group-id (procedure current-effective-group-id () fixnum))
 (current-effective-user-id (procedure current-effective-user-id () fixnum))
 (current-effective-user-name (procedure current-effective-user-name () string))
 (current-environment deprecated)
-(get-environment-variables (procedure get-environment-variables () list))
+(get-environment-variables (procedure get-environment-variables () (list string)))
 (current-group-id (procedure current-group-id () fixnum))
 (current-process-id (procedure current-process-id () fixnum))
 (current-user-id (procedure current-user-id () fixnum))
 (current-user-name (procedure current-user-name () string))
 (delete-directory (procedure! delete-directory (string) string))
-(directory (procedure! directory (string #!optional *) list))
+(directory (procedure! directory (string #!optional *) (list string)))
 (directory? (procedure! directory? ((or string fixnum)) boolean))
 (duplicate-fileno (procedure! duplicate-fileno (fixnum #!optional fixnum) fixnum))
 (errno/2big fixnum)
@@ -1387,9 +1531,9 @@
 (file-position (procedure! file-position ((or port fixnum)) fixnum))
 (file-read (procedure! file-read (fixnum fixnum #!optional *) list))
 (file-read-access? (procedure! file-read-access? (string) boolean))
-(file-select (procedure! file-select (list list #!optional fixnum) list list))
+(file-select (procedure! file-select ((list fixnum) (list fixnum) #!optional fixnum) * *))
 (file-size (procedure! file-size ((or string fixnum)) number))
-(file-stat (procedure! file-stat ((or string fixnum) #!optional *) vector))
+(file-stat (procedure! file-stat ((or string fixnum) #!optional *) (vector number)))
 (file-test-lock (procedure! file-test-lock (port #!optional fixnum *) boolean))
 (file-truncate (procedure! file-truncate ((or string fixnum) fixnum) undefined))
 (file-type (procedure! ((or string fixnum) #!optional * *) symbol))
@@ -1405,7 +1549,7 @@
 (glob (procedure! glob (#!rest string) list))
 (group-information (procedure! group-information (fixnum #!optional *) *))
 (initialize-groups (procedure! initialize-groups (string fixnum) undefined))
-(local-time->seconds (procedure! local-time->seconds (vector) number))
+(local-time->seconds (procedure! local-time->seconds ((vector number)) number))
 (local-timezone-abbreviation (procedure local-timezone-abbreviation () string))
 (map-file-to-memory (procedure! map-file-to-memory (* fixnum fixnum fixnum fixnum #!optional fixnum) (struct mmap)))
 (map/anonymous fixnum)
@@ -1452,12 +1596,15 @@
 (perm/ixusr fixnum)
 (pipe/buf fixnum)
 (port->fileno (procedure! port->fileno (port) fixnum))
-(process (procedure! process (string #!optional list list) port port fixnum))
-(process* (procedure! process* (string #!optional list list) port port fixnum *))
-(process-execute (procedure! process-execute (string #!optional list list) noreturn))
+(process (procedure! process (string #!optional (list string) (list string)) port port fixnum))
+(process* (procedure! process* (string #!optional (list string) (list string)) port port fixnum *))
+
+(process-execute
+ (procedure! process-execute (string #!optional (list string) (list string)) noreturn))
+
 (process-fork (procedure! process-fork (#!optional (procedure () . *)) fixnum))
 (process-group-id (procedure! process-group-id () fixnum))
-(process-run (procedure! process-run (string #!optional list) fixnum))
+(process-run (procedure! process-run (string #!optional (list string)) fixnum))
 (process-signal (procedure! process-signal (fixnum #!optional fixnum) undefined))
 (process-wait (procedure! process-wait (fixnum #!optional *) fixnum fixnum fixnum))
 (prot/exec fixnum)
@@ -1466,9 +1613,9 @@
 (prot/write fixnum)
 (read-symbolic-link (procedure! read-symbolic-link (string) string))
 (regular-file? (procedure! regular-file? ((or string fixnum)) boolean))
-(seconds->local-time (procedure! seconds->local-time (#!optional number) vector))
+(seconds->local-time (procedure! seconds->local-time (#!optional number) (vector number)))
 (seconds->string (procedure! seconds->string (#!optional number) string))
-(seconds->utc-time (procedure! seconds->utc-time (#!optional number) vector))
+(seconds->utc-time (procedure! seconds->utc-time (#!optional number) (vector number)))
 (seek/cur fixnum)
 (seek/end fixnum)
 (seek/set fixnum)
@@ -1478,7 +1625,7 @@
 (set-groups! (procedure! set-groups! (list) undefined))
 (set-root-directory! (procedure! set-root-directory! (string) undefined))
 (set-signal-handler! (procedure! set-signal-handler! (fixnum (procedure (fixnum) . *)) undefined))
-(set-signal-mask! (procedure! set-signal-mask! (list) undefined))
+(set-signal-mask! (procedure! set-signal-mask! ((list fixnum)) undefined))
 (setenv (procedure! setenv (string string) undefined))
 (signal-handler (procedure! signal-handler (fixnum) (procedure (fixnum) . *)))
 (signal-mask (procedure signal-mask () fixnum))
@@ -1526,82 +1673,147 @@
 (unmap-file-from-memory (procedure! unmap-file-from-memory ((struct mmap) #!optional fixnum) undefined))
 (unsetenv (procedure! unsetenv (string) undefined))
 (user-information (procedure! user-information ((or string fixnum) #!optional *) *))
-(utc-time->seconds (procedure! utc-time->seconds (vector) number))
+(utc-time->seconds (procedure! utc-time->seconds ((vector number)) number))
 (with-input-from-pipe (procedure! with-input-from-pipe (string (procedure () . *) #!optional symbol) . *))
 (with-output-to-pipe (procedure! with-output-to-pipe (string (procedure () . *) #!optional symbol) . *))
 
+
 ;; srfi-1
 
-(alist-cons (procedure alist-cons (* * *) list))
-(alist-copy (procedure! alist-copy (list) list))
-(alist-delete (procedure! alist-delete (* list #!optional (procedure (* *) *)) list))
-(alist-delete! (procedure! alist-delete! (* list #!optional (procedure (* *) *)) undefined))
-(any (procedure! any ((procedure (* #!rest) *) list #!rest list) *))
+(alist-cons (forall (a b c) (procedure alist-cons (a b (list c)) (pair a (pair b (list c))))))
+(alist-copy (forall (a) (procedure! alist-copy ((list a)) (list a))))
+(alist-delete (forall (a b) (procedure! alist-delete (a (list b) #!optional (procedure (a b) *)) list)))
+(alist-delete! (forall (a b) (procedure! alist-delete! (a (list b) #!optional (procedure (a b) *)) undefined)))
+(any (forall (a) (procedure! any ((procedure (a #!rest) *) (list a) #!rest list) *)))
 (append! (procedure! append! (#!rest list) list))
-(append-map (procedure! append-map ((procedure (#!rest) *) list #!rest list) pair))
-(append-map! (procedure! append-map! ((procedure (#!rest) *) list #!rest list) pair))
+
+(append-map
+ (forall (a b) (procedure! append-map ((procedure (a #!rest) (list b)) (list a) #!rest list)
+			   (list b))))
+
+(append-map!
+ (forall (a b) (procedure! append-map! ((procedure (a #!rest) (list b)) (list a) #!rest list)
+			   (list b))))
+
 (append-reverse (procedure! append-reverse (list list) list))
 (append-reverse! (procedure! append-reverse! (list list) list))
-(break (procedure! break ((procedure (*) *) list) list list))
-(break! (procedure! break! ((procedure (*) *) list) list list))
-(car+cdr (procedure! car+cdr (pair) * *))
+(break (forall (a) (procedure! break ((procedure (a) *) (list a)) (list a) (list a))))
+(break! (forall (a) (procedure! break! ((procedure (a) *) (list a)) (list a) (list a))))
+(car+cdr (forall (a b) (procedure! car+cdr ((pair a b)) a b)))
 (circular-list (procedure circular-list (#!rest) list))
 
 (circular-list? (procedure circular-list? (*) boolean)
 		((null) (let ((#(tmp) #(1))) '#f)))
 
-(concatenate (procedure! concatenate (list) list))
-(concatenate! (procedure! concatenate! (list) list))
-(cons* (procedure cons* (* #!rest) pair))
-(count (procedure! count ((procedure (*) *) list #!rest list) fixnum))
-(delete (procedure! delete (* list #!optional (procedure (* *) *)) list))
-(delete! (procedure! delete! (* list #!optional (procedure (* *) *)) list))
-(delete-duplicates (procedure! delete-duplicates (list #!optional (procedure (* *) *)) list))
-(delete-duplicates! (procedure! delete-duplicates! (list #!optional (procedure (* *) *)) list))
+(concatenate (procedure! concatenate ((list list)) list))
+(concatenate! (procedure! concatenate! ((list list)) list))
+(cons* (forall (a) (procedure cons* (a #!rest) (pair a *))))
+(count (forall (a) (procedure! count ((procedure (a #!rest) *) (list a) #!rest list) fixnum)))
+(delete (forall (a b) (procedure! delete (a (list b) #!optional (procedure (a *) *)) (list b))))
+(delete! (forall (a b) (procedure! delete! (a (list b) #!optional (procedure (a *) *)) (list b))))
+
+(delete-duplicates
+ (forall (a) (procedure! delete-duplicates ((list a) #!optional (procedure (a *) *)) (list a))))
+
+(delete-duplicates!
+ (forall (a) (procedure! delete-duplicates! ((list a) #!optional (procedure (a *) *)) (list a))))
+
 (dotted-list? (procedure dotted-list? (*) boolean))
-(drop (procedure! drop (list fixnum) list))
-(drop-right (procedure! drop-right (list fixnum) list))
-(drop-right! (procedure! drop-right! (list fixnum) list))
-(drop-while (procedure! drop-while ((procedure (*) *) list) list))
+(drop (forall (a) (procedure! drop ((list a) fixnum) (list a))))
+(drop-right (forall (a) (procedure! drop-right ((list a) fixnum) (list a))))
+(drop-right! (forall (a) (procedure! drop-right! ((list a) fixnum) (list a))))
+(drop-while (forall (a) (procedure! drop-while ((procedure (a) *) (list a)) (list a))))
 (eighth (procedure! eighth (pair) *))
-(every (procedure! every ((procedure (* #!rest) *) list #!rest list) *))
+
+(every
+ (forall (a) (procedure! every ((procedure (a #!rest) *) (list a) #!rest list) *)))
+
 (fifth (procedure! fifth (pair) *))
-(filter (procedure! filter ((procedure (*) *) list) list))
-(filter! (procedure! filter! ((procedure (*) *) list) list))
-(filter-map (procedure! filter-map ((procedure (* #!rest) *) list #!rest list) list))
-(find (procedure! find ((procedure (*) *) list) *))
-(find-tail (procedure! find-tail ((procedure (*) *) list) *))
+(filter (forall (a) (procedure! filter ((procedure (a) *) (list a)) (list a))))
+(filter! (forall (a) (procedure! filter! ((procedure (a) *) (list a)) (list a))))
+
+(filter-map
+ (forall (a b) (procedure! filter-map ((procedure (a #!rest) b) (list a) #!rest list) (list b))))
 
-(first (procedure! first (pair) *)
+(find (forall (a) (procedure! find ((procedure (a) *) (list a)) *)))
+(find-tail (forall (a) (procedure! find-tail ((procedure (a) *) (list a)) *)))
+
+(first (forall (a) (procedure! first ((pair a *)) a))
        ((pair) (##core#inline "C_u_i_car" #(1))))
 
-(fold (procedure! fold ((procedure (* #!rest) *) * #!rest list) *))
-(fold-right (procedure! fold-right ((procedure (* #!rest) *) * #!rest list) *))
-(fourth (procedure! fourth (pair) *))
-(iota (procedure! iota (fixnum #!optional fixnum fixnum) list))
+(fold (procedure! fold ((procedure (* #!rest) *) * #!rest list) *)) ;XXX
+(fold-right (procedure! fold-right ((procedure (* #!rest) *) * #!rest list) *)) ;XXX
+
+(fourth (forall (a) (procedure! fourth ((pair * (pair * (pair * (pair a *))))) a))
+	(((pair * (pair * (pair * (pair * *)))))
+	 (##core#inline "C_u_i_car" 
+			(##core#inline "C_u_i_cdr"
+				       (##core#inline "C_u_i_cdr"
+						      (##core#inline "C_u_i_cdr" #(1)))))))
+
+(iota (procedure! iota (fixnum #!optional fixnum fixnum) (list number)))
 (last (procedure! last (pair) *))
 (last-pair (procedure! last-pair (pair) *))
 (length+ (procedure! length+ (list) *))
-(list-copy (procedure! list-copy (list) list))
-(list-index (procedure! list-index ((procedure (* #!rest) *) list #!rest list) *))
-(list-tabulate (procedure! list-tabulate (fixnum (procedure (fixnum) *)) list))
+(list-copy (forall (a) (procedure! list-copy ((list a)) (list a))))
+(list-index (forall (a) (procedure! list-index ((procedure (a #!rest) *) (list a) #!rest list) *)))
+(list-tabulate (forall (a) (procedure! list-tabulate (fixnum (procedure (fixnum) a)) (list a))))
 (list= (procedure! list= (#!rest list) boolean))
-(lset-adjoin (procedure! lset-adjoin ((procedure (* *) *) list #!rest) list))
-(lset-diff+intersection (procedure! lset-diff+intersection ((procedure (* *) *) list #!rest list) list))
-(lset-diff+intersection! (procedure! lset-diff+intersection! ((procedure (* *) *) list #!rest list) list))
-(lset-difference (procedure! lset-difference ((procedure (* *) *) list #!rest list) list))
-(lset-difference! (procedure! lset-difference! ((procedure (* *) *) list #!rest list) list))
-(lset-intersection (procedure! lset-intersection ((procedure (* *) *) list #!rest list) list))
-(lset-intersection! (procedure! lset-intersection! ((procedure (* *) *) list #!rest list) list))
-(lset-union (procedure! lset-union ((procedure (* *) *) list #!rest list) list))
-(lset-union! (procedure! lset-union! ((procedure (* *) *) list #!rest list) list))
-(lset-xor (procedure! lset-xor ((procedure (* *) *) list #!rest list) list))
-(lset-xor! (procedure! lset-xor! ((procedure (* *) *) list #!rest list) list))
-(lset<= (procedure! lset<= ((procedure (* *) *) list #!rest list) boolean))
-(lset= (procedure! lset= ((procedure (* *) *) list #!rest list) boolean))
-(make-list (procedure! make-list (fixnum #!optional *) list))
-(map! (procedure! map! ((procedure (*) *) list #!rest list) list))
-(map-in-order (procedure! map-in-order ((procedure (*) *) list #!rest list) list))
+
+(lset-adjoin 
+ (forall (a) (procedure! lset-adjoin ((procedure (a a) *) (list a) #!rest a) (list a))))
+
+(lset-diff+intersection
+ (forall (a)
+	 (procedure! lset-diff+intersection ((procedure (a a) *) (list a) #!rest (list a))
+		     (list a))))
+
+(lset-diff+intersection! 
+ (forall (a)
+	 (procedure! lset-diff+intersection! ((procedure (a a) *) (list a) #!rest (list a))
+		     (list a))))
+
+(lset-difference
+ (forall (a) (procedure! lset-difference ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
+
+(lset-difference!
+ (forall (a) (procedure! lset-difference! ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
+
+(lset-intersection
+ (forall (a) (procedure! lset-intersection ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
+
+(lset-intersection!
+ (forall (a) (procedure! lset-intersection! ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
+
+(lset-union
+ (forall (a) (procedure! lset-union ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
+
+(lset-union!
+ (forall (a) (procedure! lset-union! ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
+
+(lset-xor
+ (forall (a) (procedure! lset-xor ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
+
+(lset-xor!
+ (forall (a) (procedure! lset-xor! ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
+
+(lset<=
+ (forall (a) (procedure! lset<= ((procedure (a a) *) (list a) #!rest (list a)) boolean)))
+
+(lset=
+ (forall (a) (procedure! lset= ((procedure (a a) *) (list a) #!rest (list a)) boolean)))
+
+;; see note about "make-vector", above
+(make-list (forall (a) (procedure! make-list (fixnum #!optional a) list)))
+
+(map!
+ (forall (a b) (procedure! map! ((procedure (a #!rest) b) (list a) #!rest list) (list b))))
+
+(map-in-order
+ (forall 
+  (a b)
+  (procedure! map-in-order ((procedure (a #!rest) b) (list a) #!rest list) (list b))))
+
 (ninth (procedure! ninth (pair) *))
 
 (not-pair? (procedure not-pair? (*) boolean)
@@ -1613,50 +1825,67 @@
 	    ((list) (let ((#(tmp) #(1))) '#f))
 	    ((null) (let ((#(tmp) #(1))) '#t)))
 
-(pair-fold (procedure! pair-fold (procedure * list #!rest list) *))
-(pair-fold-right (procedure! pair-fold-right (procedure * list #!rest list) *))
-(pair-for-each (procedure! pair-for-each ((procedure (#!rest) . *) list #!rest list) undefined))
-(partition (procedure! partition ((procedure (*) *) list) list list))
-(partition! (procedure! partition! ((procedure (*) *) list) list list))
+(pair-fold (procedure! pair-fold (procedure * list #!rest list) *)) ;XXX do this
+(pair-fold-right (procedure! pair-fold-right (procedure * list #!rest list) *)) ;XXX
+(pair-for-each (procedure! pair-for-each ((procedure (#!rest) . *) list #!rest list) undefined)) ;XXX
+(partition (forall (a) (procedure! partition ((procedure (a) *) (list a)) (list a) (list a))))
+(partition! (forall (a) (procedure! partition! ((procedure (a) *) (list a)) (list a) (list a))))
 
 (proper-list? (procedure proper-list? (*) boolean)
 	      ((null) (let ((#(tmp) #(1))) '#t)))
 
-(reduce (procedure! reduce ((procedure (* *) *) * list) *))
-(reduce-right (procedure! reduce-right ((procedure (* *) *) * list) *))
-(remove (procedure! remove ((procedure (*) *) list) list))
-(remove! (procedure! remove! ((procedure (*) *) list) list))
-(reverse! (procedure! reverse! (list) list))
-(second (procedure! second (pair) *))
+(reduce (procedure! reduce ((procedure (* *) *) * list) *)) ;XXX
+(reduce-right (procedure! reduce-right ((procedure (* *) *) * list) *)) ;XXX
+(remove (forall (a) (procedure! remove ((procedure (a) *) (list a)) (list a))))
+(remove! (forall (a) (procedure! remove! ((procedure (a) *) (list a)) (list a))))
+(reverse! (forall (a) (procedure! reverse! ((list a)) (list a))))
+
+(second (forall (a) (procedure! second ((pair * (pair a *))) a))
+	(((pair * (pair * *))) (##core#inline "C_u_i_car" (##core#inline "C_u_i_cdr" #(1)))))
+
 (seventh (procedure! seventh (pair) *))
 (sixth (procedure! sixth (pair) *))
-(span (procedure! span ((procedure (*) *) list) list list))
-(span! (procedure! span! ((procedure (*) *) list) list list))
-(split-at (procedure! split-at (list fixnum) list list))
-(split-at! (procedure! split-at! (list fixnum) list list))
-(take (procedure! take (list fixnum) list))
-(take! (procedure! take! (list fixnum) list))
-(take-right (procedure! take-right (list fixnum) list))
-(take-while (procedure! take-while ((procedure (*) *) list) list))
-(take-while! (procedure! take-while! ((procedure (*) *) list) list))
+(span (forall (a) (procedure! span ((procedure (a) *) (list a)) (list a) (list a))))
+(span! (forall (a) (procedure! span! ((procedure (a) *) (list a)) (list a) (list a))))
+(split-at (forall (a) (procedure! split-at ((list a) fixnum) (list a) (list a))))
+(split-at! (forall (a) (procedure! split-at! ((list a) fixnum) (list a) (list a))))
+(take (forall (a) (procedure! take ((list a) fixnum) (list a))))
+(take! (forall (a) (procedure! take! ((list a) fixnum) (list a))))
+(take-right (forall (a) (procedure! take-right ((list a) fixnum) (list a))))
+(take-while (forall (a) (procedure! take-while ((procedure (a) *) (list a)) (list a))))
+(take-while! (forall (a) (procedure! take-while! ((procedure (a) *) (list a)) (list a))))
 (tenth (procedure! tenth (pair) *))
-(third (procedure! third (pair) *))
-(unfold (procedure! unfold ((procedure (*) *) (procedure (*) *) (procedure (*) *) * #!optional (procedure (*) *)) *))
-(unfold-right (procedure! unfold-right ((procedure (*) *) (procedure (*) *) (procedure (*) *) * #!optional (procedure (*) *)) *))
-(unzip1 (procedure! unzip1 (list) list))
-(unzip2 (procedure! unzip2 (list) list list))
-(unzip3 (procedure! unzip3 (list) list list list))
-(unzip4 (procedure! unzip4 (list) list list list list))
-(unzip5 (procedure! unzip5 (list) list list list list list))
-(xcons (procedure xcons (* *) pair))
-(zip (procedure! zip (list #!rest list) list))
+
+(third (forall (a) (procedure! third ((pair * (pair * (pair a *)))) a))
+       (((pair * (pair * (pair * *))))
+	(##core#inline "C_u_i_car" 
+		       (##core#inline "C_u_i_cdr" (##core#inline "C_u_i_cdr" #(1))))))
+
+(unfold (procedure! unfold ((procedure (*) *) (procedure (*) *) (procedure (*) *) * #!optional (procedure (*) *)) *)) ;XXX
+(unfold-right (procedure! unfold-right ((procedure (*) *) (procedure (*) *) (procedure (*) *) * #!optional (procedure (*) *)) *)) ;XXX
+(unzip1 (forall (a) (procedure! unzip1 ((list (pair a *))) (list a))))
+(unzip2 (forall (a b) (procedure! unzip2 ((list (pair a (pair b *)))) (list a) (list b))))
+
+(unzip3
+ (forall (a b c) (procedure! unzip3 ((list (pair a (pair b (pair c *))))) (list a) (list b) (list c))))
+
+(unzip4 (procedure! unzip4 (list) list list list list)) ; yeah
+(unzip5 (procedure! unzip5 (list) list list list list list)) ; yeah, too
+(xcons (forall (a b) (procedure xcons (a b) (pair b a))))
+(zip (forall (a) (procedure! zip ((list a) #!rest list) (list (pair a *)))))
+
 
 ;; srfi-13
 
 (check-substring-spec (procedure! check-substring-spec (* string fixnum fixnum) undefined))
 (kmp-step (procedure! kmp-step (string vector char fixnum (procedure (char char) *) fixnum) fixnum))
 (make-kmp-restart-vector (procedure! make-kmp-restart-vector (string #!optional (procedure (* *) *) fixnum fixnum) vector))
-(string-any (procedure! string-any (* string #!optional fixnum fixnum) boolean))
+
+(string-any
+ (procedure!
+  string-any
+  ((or char (struct char-set) (procedure (char) *)) string #!optional fixnum fixnum)
+  boolean))
 
 (string-append/shared (procedure! string-append/shared (#!rest string) string)
 		      ((string string) (##sys#string-append #(1) #(2))))
@@ -1681,10 +1910,10 @@
 
 (string-compare (procedure! string-compare (string string (procedure (fixnum) *) (procedure (fixnum) *) (procedure (fixnum) *) #!optional fixnum fixnum fixnum fixnum) *))
 (string-compare-ci (procedure! string-compare (string string (procedure (fixnum) *) (procedure (fixnum) *) (procedure (fixnum) *) #!optional fixnum fixnum fixnum fixnum) *))
-(string-concatenate (procedure! string-concatenate (list) string))
-(string-concatenate-reverse (procedure! string-concatenate-reverse (list #!optional string fixnum) string))
-(string-concatenate-reverse/shared (procedure! string-concatenate-reverse/shared (list #!optional string fixnum) string))
-(string-concatenate/shared (procedure! string-concatenate/shared (list) string))
+(string-concatenate (procedure! string-concatenate ((list string)) string))
+(string-concatenate-reverse (procedure! string-concatenate-reverse ((list string) #!optional string fixnum) string))
+(string-concatenate-reverse/shared (procedure! string-concatenate-reverse/shared ((list string) #!optional string fixnum) string))
+(string-concatenate/shared (procedure! string-concatenate/shared ((list string)) string))
 (string-contains (procedure! string-contains (string string #!optional fixnum fixnum fixnum fixnum) (or fixnum boolean)))
 (string-contains-ci (procedure! string-contains-ci (string string #!optional fixnum fixnum fixnum fixnum) (or fixnum boolean)))
 (string-copy (procedure! string-copy (string #!optional fixnum fixnum) string))
@@ -1695,15 +1924,39 @@
 (string-downcase! (procedure! string-downcase! (string #!optional fixnum fixnum) string))
 (string-drop (procedure! string-drop (string fixnum) string))
 (string-drop-right (procedure! string-drop-right (string fixnum) string))
-(string-every (procedure! string-every (* string #!optional fixnum fixnum) boolean))
+
+(string-every
+ (procedure!
+  string-every
+  ((or char (struct char-set) (procedure (char) *)) string #!optional fixnum fixnum) 
+  boolean))
+
 (string-fill! (procedure! string-fill! (string char #!optional fixnum fixnum) string))
-(string-filter (procedure! string-filter (* string #!optional fixnum fixnum) string))
-(string-fold (procedure! string-fold ((procedure (char *) *) * string #!optional fixnum fixnum) *))
-(string-fold-right (procedure! string-fold-right ((procedure (char *) *) * string #!optional fixnum fixnum) *))
+
+(string-filter
+ (procedure! 
+  string-filter
+  ((or char (struct char-set) (procedure (char) *)) string #!optional fixnum fixnum) 
+  string))
+
+(string-fold (procedure! string-fold ((procedure (char *) *) * string #!optional fixnum fixnum) *)) ;XXX
+
+(string-fold-right (procedure! string-fold-right ((procedure (char *) *) * string #!optional fixnum fixnum) *)) ;XXX
 (string-for-each (procedure! string-for-each ((procedure (char) . *) string #!optional fixnum fixnum) undefined))
 (string-for-each-index (procedure! string-for-each-index ((procedure (fixnum) . *) string #!optional fixnum fixnum) undefined))
-(string-index (procedure! string-index (string * #!optional fixnum fixnum) (or fixnum boolean)))
-(string-index-right (procedure! string-index-right (string * #!optional fixnum fixnum) (or fixnum boolean)))
+
+(string-index
+ (procedure! 
+  string-index
+  (string (or char (struct char-set) (procedure (char) *)) #!optional fixnum fixnum)
+  (or fixnum boolean)))
+
+(string-index-right
+ (procedure! 
+  string-index-right
+  (string (or char (struct char-set) (procedure (char) *)) #!optional fixnum fixnum)
+  (or fixnum boolean)))
+
 (string-join (procedure! string-join (list #!optional string symbol) string))
 (string-kmp-partial-search (procedure! string-kmp-partial-search (string vector string fixnum #!optional (procedure (char char) *) fixnum fixnum fixnum) fixnum))
 (string-map (procedure! string-map ((procedure (char) char) string #!optional fixnum fixnum) string))
@@ -1723,8 +1976,19 @@
 (string-replace (procedure! string-replace (string string fixnum fixnum #!optional fixnum fixnum) string))
 (string-reverse (procedure! string-reverse (string #!optional fixnum fixnum) string))
 (string-reverse! (procedure! string-reverse! (string #!optional fixnum fixnum) string))
-(string-skip (procedure! string-skip (string * #!optional fixnum fixnum) (or fixnum boolean)))
-(string-skip-right (procedure! string-skip-right (string * #!optional fixnum fixnum) (or fixnum boolean)))
+
+(string-skip
+ (procedure! 
+  string-skip
+  (string (or char (struct char-set) (procedure (char) *)) #!optional fixnum fixnum)
+  (or fixnum boolean)))
+
+(string-skip-right
+ (procedure! 
+  string-skip-right
+  (string (or char (struct char-set) (procedure (char) *)) #!optional fixnum fixnum)
+  (or fixnum boolean)))
+
 (string-suffix-ci? (procedure! string-suffix-ci? (string string #!optional fixnum fixnum fixnum fixnum) boolean))
 (string-suffix-length (procedure! string-suffix-length (string string #!optional fixnum fixnum fixnum fixnum) fixnum))
 (string-suffix-length-ci (procedure! string-suffix-length-ci (string string #!optional fixnum fixnum fixnum fixnum) fixnum))
@@ -1734,12 +1998,30 @@
 (string-take-right (procedure! string-take-right (string fixnum) string))
 (string-titlecase (procedure! string-titlecase (string #!optional fixnum fixnum) string))
 (string-titlecase! (procedure! string-titlecase! (string #!optional fixnum fixnum) string))
-(string-tokenize (procedure! string-tokenize (string #!optional * fixnum fixnum) list))
-(string-trim (procedure! string-trim (string #!optional * fixnum fixnum) string))
-(string-trim-both (procedure! string-trim-both (string #!optional * fixnum fixnum) string))
-(string-trim-right (procedure! string-trim-right (string #!optional * fixnum fixnum) string))
-(string-unfold (procedure! string-unfold (procedure procedure procedure * #!optional * procedure) string))
-(string-unfold-right (procedure! string-unfold-right (procedure procedure procedure * #!optional * procedure) string))
+
+(string-tokenize
+ (procedure! string-tokenize (string #!optional (struct char-set) fixnum fixnum) list))
+
+(string-trim
+ (procedure! 
+  string-trim
+  (string #!optional (or char (struct char-set) (procedure (char) *)) fixnum fixnum) 
+  string))
+
+(string-trim-both
+ (procedure! 
+  string-trim-both
+  (string #!optional (or char (struct char-set) (procedure (char) *)) fixnum fixnum) 
+  string))
+
+(string-trim-right
+ (procedure! 
+  string-trim-right
+  (string #!optional (or char (struct char-set) (procedure (char) *)) fixnum fixnum) 
+  string))
+
+(string-unfold (procedure! string-unfold (procedure procedure procedure * #!optional * procedure) string)) ;XXX
+(string-unfold-right (procedure! string-unfold-right (procedure procedure procedure * #!optional * procedure) string)) ;XXX
 (string-upcase (procedure! string-upcase (string #!optional fixnum fixnum) string))
 (string-upcase! (procedure! string-upcase! (string #!optional fixnum fixnum) string))
 (string-xcopy! (procedure! string-xcopy! (string string string fixnum #!optional fixnum fixnum fixnum) string))
@@ -1766,6 +2048,7 @@
 (substring/shared (procedure! substring/shared (string fixnum #!optional fixnum) string))
 (xsubstring (procedure! xsubstring (string fixnum #!optional fixnum fixnum fixnum) string))
 
+
 ;; srfi-14
 
 (->char-set (procedure ->char-set (*) (struct char-set))
@@ -1839,6 +2122,7 @@
 (ucs-range->char-set (procedure! ucs-range->char-set (fixnum fixnum #!optional * (struct char-set)) (struct char-set)))
 (ucs-range->char-set! (procedure! ucs-range->char-set! (fixnum fixnum #!optional * (struct char-set)) (struct char-set)))
 
+
 ;; srfi-18
 
 (abandoned-mutex-exception? (procedure abandoned-mutex-exception? (*) boolean))
@@ -1917,6 +2201,7 @@
 (uncaught-exception-reason (procedure! uncaught-exception-reason ((struct condition)) *))
 (uncaught-exception? (procedure uncaught-exception? (*) boolean))
 
+
 ;; srfi-4
 
 (blob->f32vector (procedure! blob->f32vector (blob) (struct f32vector)))
@@ -1961,14 +2246,14 @@
 
 (f64vector? (procedure? (struct f64vector) f64vector? (*) boolean))
 
-(list->f32vector (procedure! list->f32vector (list) (struct f32vector)))
-(list->f64vector (procedure! list->f64vector (list) (struct f64vector)))
-(list->s16vector (procedure! list->s16vector (list) (struct s16vector)))
-(list->s32vector (procedure! list->s32vector (list) (struct s32vector)))
-(list->s8vector (procedure! list->s8vector (list) (struct s8vector)))
-(list->u16vector (procedure! list->u16vector (list) (struct u16vector)))
-(list->u32vector (procedure! list->u32vector (list) (struct u32vector)))
-(list->u8vector (procedure! list->u8vector (list) (struct u8vector)))
+(list->f32vector (procedure! list->f32vector ((list number)) (struct f32vector)))
+(list->f64vector (procedure! list->f64vector ((list number)) (struct f64vector)))
+(list->s16vector (procedure! list->s16vector ((list fixnum)) (struct s16vector)))
+(list->s32vector (procedure! list->s32vector ((list number)) (struct s32vector)))
+(list->s8vector (procedure! list->s8vector ((list fixnum)) (struct s8vector)))
+(list->u16vector (procedure! list->u16vector ((list fixnum)) (struct u16vector)))
+(list->u32vector (procedure! list->u32vector ((list number)) (struct u32vector)))
+(list->u8vector (procedure! list->u8vector ((list fixnum)) (struct u8vector)))
 (make-f32vector (procedure! make-f32vector (fixnum #!optional * * *) (struct f32vector)))
 (make-f64vector (procedure! make-f64vector (fixnum #!optional * * *) (struct f64vector)))
 (make-s16vector (procedure! make-s16vector (fixnum #!optional * * *) (struct s16vector)))
@@ -1983,7 +2268,7 @@
 (s16vector (procedure! s16vector (#!rest fixnum) (struct s16vector)))
 (s16vector->blob (procedure! s16vector->blob ((struct s16vector)) blob))
 (s16vector->blob/shared (procedure! s16vector->blob/shared ((struct s16vector)) blob))
-(s16vector->list (procedure! s16vector->list ((struct s16vector)) list))
+(s16vector->list (procedure! s16vector->list ((struct s16vector)) (list fixnum)))
 
 (s16vector-length (procedure! s16vector-length ((struct s16vector)) fixnum)
 		  (((struct s16vector)) (##core#inline "C_u_i_16vector_length" #(1))))
@@ -1996,7 +2281,7 @@
 (s32vector (procedure! s32vector (#!rest number) (struct s32vector)))
 (s32vector->blob (procedure! s32vector->blob ((struct 32vector)) blob))
 (s32vector->blob/shared (procedure! s32vector->blob/shared ((struct s32vector)) blob))
-(s32vector->list (procedure! s32vector->list ((struct s32vector)) list))
+(s32vector->list (procedure! s32vector->list ((struct s32vector)) (list number)))
 
 (s32vector-length (procedure! s32vector-length ((struct s32vector)) fixnum)
 		  (((struct s32vector)) (##core#inline "C_u_i_32vector_length" #(1))))
@@ -2009,7 +2294,7 @@
 (s8vector (procedure! s8vector (#!rest fixnum) (struct s8vector)))
 (s8vector->blob (procedure! s8vector->blob ((struct s8vector)) blob))
 (s8vector->blob/shared (procedure! s8vector->blob/shared ((struct s8vector)) blob))
-(s8vector->list (procedure! s8vector->list ((struct s8vector)) list))
+(s8vector->list (procedure! s8vector->list ((struct s8vector)) (list fixnum)))
 
 (s8vector-length (procedure! s8vector-length ((struct s8vector)) fixnum)
 		 (((struct s8vector)) (##core#inline "C_u_i_8vector_length" #(1))))
@@ -2030,7 +2315,7 @@
 (u16vector (procedure! u16vector (#!rest fixnum) (struct u16vector)))
 (u16vector->blob (procedure! u16vector->blob ((struct u16vector)) blob))
 (u16vector->blob/shared (procedure! u16vector->blob/shared ((struct u16vector)) blob))
-(u16vector->list (procedure! u16vector->list ((struct u16vector)) list))
+(u16vector->list (procedure! u16vector->list ((struct u16vector)) (list fixnum)))
 
 (u16vector-length (procedure! u16vector-length ((struct u16vector)) fixnum)
 		  (((struct u16vector)) (##core#inline "C_u_i_16vector_length" #(1))))
@@ -2043,7 +2328,7 @@
 (u32vector (procedure! u32vector (#!rest number) (struct u32vector)))
 (u32vector->blob (procedure! u32vector->blob ((struct u32vector)) blob))
 (u32vector->blob/shared (procedure! u32vector->blob/shared ((struct u32vector)) blob))
-(u32vector->list (procedure! u32vector->list ((struct u32vector)) list))
+(u32vector->list (procedure! u32vector->list ((struct u32vector)) (list number)))
 
 (u32vector-length (procedure! u32vector-length ((struct u32vector)) fixnum)
 		  (((struct u32vector)) (##core#inline "C_u_i_32vector_length" #(1))))
@@ -2056,7 +2341,7 @@
 (u8vector (procedure! u8vector (#!rest fixnum) (struct u8vector)))
 (u8vector->blob (procedure! u8vector->blob ((struct u8vector)) blob))
 (u8vector->blob/shared (procedure! u8vector->blob/shared ((struct u8vector)) blob))
-(u8vector->list (procedure! u8vector->list ((struct u8vector)) list))
+(u8vector->list (procedure! u8vector->list ((struct u8vector)) (list fixnum)))
 
 (u8vector-length (procedure! u8vector-length ((struct u8vector)) fixnum)
 		 (((struct u8vector)) (##core#inline "C_u_i_8vector_length" #(1))))
@@ -2068,15 +2353,16 @@
 
 (write-u8vector (procedure! write-u8vector ((struct u8vector) #!optional port fixnum fixnum) undefined))
 
+
 ;; srfi-69
 
-(alist->hash-table (procedure! alist->hash-table (list #!rest) (struct hash-table)))
+(alist->hash-table (procedure! alist->hash-table ((list pair) #!rest) (struct hash-table)))
 (eq?-hash (procedure! eq?-hash (* #!optional fixnum) fixnum))
 (equal?-hash (procedure! equal?-hash (* #!optional fixnum) fixnum))
 (eqv?-hash (procedure! eqv?-hash (* #!optional fixnum) fixnum))
 (hash (procedure! hash (* #!optional fixnum) fixnum))
 (hash-by-identity (procedure! hash-by-identity (* #!optional fixnum) fixnum))
-(hash-table->alist (procedure! hash-table->alist ((struct hash-table)) list))
+(hash-table->alist (procedure! hash-table->alist ((struct hash-table)) (list pair)))
 (hash-table-clear! (procedure! hash-table-clear! ((struct hash-table)) undefined))
 (hash-table-copy (procedure! hash-table-copy ((struct hash-table)) (struct hash-table)))
 (hash-table-delete! (procedure! hash-table-delete! ((struct hash-table) *) boolean))
@@ -2137,6 +2423,7 @@
 (string-hash-ci (procedure! string-hash-ci (string #!optional fixnum fixnum fixnum) number))
 (string-ci-hash (procedure! string-ci-hash (string #!optional fixnum fixnum fixnum) number))
 
+
 ;; tcp
 
 (tcp-abandon-port (procedure! tcp-abandon-port (port) undefined))
@@ -2161,6 +2448,7 @@
 (tcp-read-timeout (procedure! tcp-read-timeout (#!optional number) number))
 (tcp-write-timeout (procedure! tcp-write-timeout (#!optional number) number))
 
+
 ;; utils
 
 (for-each-argv-line deprecated)
@@ -2169,6 +2457,6 @@
 (system* (procedure! system* (string #!rest) undefined))
 (qs (procedure! qs (string) string))
 (compile-file (procedure! compile-file (string #!rest) (or boolean string)))
-(compile-file-options (procedure! compile-file-options (#!optional list) list))
+(compile-file-options (procedure! compile-file-options (#!optional (list string)) (list string)))
 (scan-input-lines (procedure! scan-input-lines (* #!optional port) *))
 (yes-or-no? (procedure! yes-or-no? (string #!rest) *))
diff --git a/types.db.new b/types.db.new
deleted file mode 100644
index db17f7f6..00000000
--- a/types.db.new
+++ /dev/null
@@ -1,2462 +0,0 @@
-;;;; types.db - Type-information for core library functions -*- Scheme -*-
-;
-; Copyright (c)2009-2011, The Chicken Team
-; All rights reserved.
-;
-; Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
-; conditions are met:
-;
-;   Redistributions of source code must retain the above copyright notice, this list of conditions and the following
-;     disclaimer. 
-;   Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
-;     disclaimer in the documentation and/or other materials provided with the distribution. 
-;   Neither the name of the author nor the names of its contributors may be used to endorse or promote
-;     products derived from this software without specific prior written permission. 
-;
-; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
-; OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-; AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
-; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND ON ANY
-; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-; OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-; POSSIBILITY OF SUCH DAMAGE.
-
-
-;;; Notes:
-;
-; - numeric types are disjoint, "fixnum" or "float" will not match "number" in the
-;   rewrite rules
-; - for a description of the type-specifier syntax, see "scrutinizer.scm" (top of file)
-; - in templates, "#(INTEGER)" refers to the INTEGERth argument (starting from 1)
-; - in templates, "#(INTEGER ...)" refers to the INTEGERth argument (starting from 1) and
-;   all remaining arguments
-; - in templates "#(SYMBOL)" binds X to a temporary gensym'd variable, further references
-;   to "#(SYMBOL)" allow backreferences to this generated identifier
-; - a type of the form "(procedure! ...)" is internally treated like "(procedure ..."
-;   but declares the procedure as "argument-type enforcing"
-; - a type of the form "(procedure? TYPE  ...)" is internally treated like "(procedure ..."
-;   but declares the procedure as a predicate over TYPE.
-; - a type of the form "(procedure!? TYPE ...)" or "(procedure?! TYPE ...)" is the obvious.
-; - types in specializations are currently not validated
-
-
-;; scheme
-
-(not (procedure not (*) boolean)
-     (((not boolean)) (let ((#(tmp) #(1))) '#t)))
-
-(boolean? (procedure? boolean boolean? (*) boolean))
-
-(eq? (procedure eq? (* *) boolean))
-
-(eqv? (procedure eqv? (* *) boolean)
-      (((not float) *) (eq? #(1) #(2)))
-      ((* (not float)) (eq? #(1) #(2))))
-
-(equal? (procedure equal? (* *) boolean)
-	(((or fixnum symbol char eof null undefined) *) (eq? #(1) #(2)))
-	((* (or fixnum symbol char eof null undefined)) (eq? #(1) #(2))))
-
-(pair? (procedure? pair pair? (*) boolean))
-
-(cons (forall (a b) (procedure cons (a b) (pair a b))))
-
-(##sys#cons (forall (a b) (procedure ##sys#cons (a b) (pair a b))))
-
-(car (forall (a) (procedure! car ((pair a *)) a)) ((pair) (##core#inline "C_u_i_car" #(1))))
-(cdr (forall (a) (procedure! cdr ((pair * a)) a)) ((pair) (##core#inline "C_u_i_cdr" #(1))))
-
-(caar (forall (a) (procedure! caar ((pair (pair a *) *)) a))
-      (((pair (pair * *) *)) (##core#inline "C_u_i_car" (##core#inline "C_u_i_car" #(1)))))
-(cadr (forall (a) (procedure! cadr ((pair * (pair a *))) a))
-      (((pair * (pair * *))) (##core#inline "C_u_i_car" (##core#inline "C_u_i_cdr" #(1)))))
-(cdar (forall (a) (procedure! cdar ((pair (pair * a) *)) a))
-      (((pair (pair * *) *)) (##core#inline "C_u_i_cdr" (##core#inline "C_u_i_car" #(1)))))
-(cddr (forall (a) (procedure! cddr ((pair * (pair * a))) a))
-      (((pair * (pair * *))) (##core#inline "C_u_i_cdr" (##core#inline "C_u_i_cdr" #(1)))))
-
-(caaar (forall (a) (procedure! caaar ((pair (pair (pair a *) *) *)) a))
-       (((pair (pair (pair * *) *) *))
-	(##core#inline "C_u_i_car"
-		       (##core#inline "C_u_i_car" (##core#inline "C_u_i_car" #(1))))))
-
-(caadr (forall (a) (procedure! caadr ((pair * (pair (pair a *) *))) a))
-       (((pair * (pair (pair * *) *)))
-	(##core#inline "C_u_i_car"
-		       (##core#inline "C_u_i_car" (##core#inline "C_u_i_cdr" #(1))))))
-
-(cadar (forall (a) (procedure! cadar ((pair (pair * (pair a *)) *)) a))
-       (((pair (pair * (pair * *)) *))
-	(##core#inline "C_u_i_car"
-		       (##core#inline "C_u_i_cdr" (##core#inline "C_u_i_car" #(1))))))
-
-(caddr (forall (a) (procedure! caddr ((pair * (pair * (pair a *)))) a))
-       (((pair * (pair * (pair * *))))
-	(##core#inline "C_u_i_car"
-		       (##core#inline "C_u_i_cdr" (##core#inline "C_u_i_cdr" #(1))))))
-
-(cdaar (forall (a) (procedure! cdaar ((pair (pair (pair * a) *) *)) a))
-       (((pair (pair (pair * *) *) *))
-	(##core#inline "C_u_i_cdr"
-		       (##core#inline "C_u_i_car" (##core#inline "C_u_i_car" #(1))))))
-
-(cdadr (forall (a) (procedure! cdadr ((pair * (pair (pair * a) *))) a))
-       (((pair * (pair (pair * *) *)))
-	(##core#inline "C_u_i_cdr"
-		       (##core#inline "C_u_i_car" (##core#inline "C_u_i_cdr" #(1))))))
-
-(cddar (forall (a) (procedure! cddar ((pair (pair * (pair * a)) *)) a))
-       (((pair (pair * (pair * *)) *))
-	(##core#inline "C_u_i_cdr"
-		       (##core#inline "C_u_i_cdr" (##core#inline "C_u_i_car" #(1))))))
-
-(cdddr (forall (a) (procedure! cdddr ((pair * (pair * (pair * a)))) a))
-       (((pair * (pair * (pair * *))))
-	(##core#inline "C_u_i_cdr"
-		       (##core#inline "C_u_i_cdr" (##core#inline "C_u_i_cdr" #(1))))))
-
-(caaaar (forall (a) (procedure! caaaar ((pair (pair (pair (pair a *) *) *) *)) a)))
-(caaadr (forall (a) (procedure! caaadr ((pair * (pair (pair (pair a *) *) *))) a)))
-(caadar (forall (a) (procedure! caadar ((pair (pair * (pair (pair a *) *)) *)) a)))
-(caaddr (forall (a) (procedure! caaddr ((pair * (pair * (pair (pair a *) *)))) a)))
-(cadaar (forall (a) (procedure! cadaar ((pair (pair (pair * (pair a *)) *) *)) a)))
-(cadadr (forall (a) (procedure! cadadr ((pair * (pair (pair * (pair a *)) *))) a)))
-(caddar (forall (a) (procedure! caddar ((pair (pair * (pair * (pair a *))) *)) a)))
-(cadddr (forall (a) (procedure! cadddr ((pair * (pair * (pair * (pair a *))))) a)))
-(cdaaar (forall (a) (procedure! cdaaar ((pair (pair (pair (pair * a) *) *) *)) a)))
-(cdaadr (forall (a) (procedure! cdaadr ((pair * (pair (pair (pair * a) *) *))) a)))
-(cdadar (forall (a) (procedure! cdadar ((pair (pair * (pair (pair * a) *)) *)) a)))
-(cdaddr (forall (a) (procedure! cdaddr ((pair * (pair * (pair (pair * a) *)))) a)))
-(cddaar (forall (a) (procedure! cddaar ((pair (pair (pair * (pair * a)) *) *)) a)))
-(cddadr (forall (a) (procedure! cddadr ((pair * (pair (pair * (pair * a)) *))) a)))
-(cdddar (forall (a) (procedure! cdddar ((pair (pair * (pair * (pair * a))) *)) a)))
-(cddddr (forall (a) (procedure! cddddr ((pair * (pair * (pair * (pair * a))))) a)))
-
-(set-car! (procedure! set-car! (pair *) undefined) 
-	  ((pair (or fixnum char boolean eof null undefined)) (##sys#setislot #(1) '0 #(2)))
-	  ((pair *) (##sys#setslot #(1) '0 #(2))))
-
-(set-cdr! (procedure! set-cdr! (pair *) undefined)
-	  ((pair (or fixnum char boolean eof null undefined)) (##sys#setislot #(1) '1 #(2)))
-	  ((pair *) (##sys#setslot #(1) '1 #(2))))
-
-(null? (procedure? null null? (*) boolean))
-(list? (procedure? list list? (*) boolean))
-
-(list (procedure list (#!rest) list))
-(##sys#list (procedure ##sys#list (#!rest) list))
-(length (procedure! length (list) fixnum) ((list) (##core#inline "C_u_i_length" #(1))))
-(##sys#length (procedure! ##sys#length (list) fixnum) ((list) (##core#inline "C_u_i_length" #(1))))
-(list-tail (forall (a) (procedure! list-tail ((list a) fixnum) (list a))))
-(list-ref (forall (a) (procedure! list-ref ((list a) fixnum) a)))
-(append (procedure append (list #!rest) *))
-(##sys#append (procedure ##sys#append (list #!rest) *))
-(reverse (forall (a) (procedure! reverse ((list a)) (list a))))
-(memq (procedure memq (* list) *) ((* list) (##core#inline "C_u_i_memq" #(1) #(2))))
-
-(memv (procedure memv (* list) *)
-      (((or fixnum boolean char eof undefined null) list)
-       (##core#inline "C_u_i_memq" #(1) #(2))))
-
-;; this may be a bit much...
-(member (forall (a) (procedure member (* list #!optional (procedure (* *) *)) *))
-	(((or fixnum boolean char eof undefined null) list)
-	 (##core#inline "C_u_i_memq" #(1) #(2)))
-	((* (list (or fixnum boolean char eof undefined null)))
-	 (##core#inline "C_u_i_memq" #(1) #(2))))
-
-(assq (procedure assq (* list) *) ((* list) (##core#inline "C_u_i_assq" #(1) #(2))))
-
-(assv (procedure assv (* list) *)
-      (((or fixnum boolean char eof undefined null) list)
-       (##core#inline "C_u_i_assq" #(1) #(2)))
-      ((* (list (or fixnum boolean char eof undefined null)))
-       (##core#inline "C_u_i_assq" #(1) #(2))))
-
-(assoc (procedure assoc (* list #!optional (procedure (* *) *)) *)
-       (((or fixnum boolean char eof undefined null) list)
-	(##core#inline "C_u_i_assq" #(1) #(2)))
-       ((* (list (or fixnum boolean char eof undefined null)))
-	(##core#inline "C_u_i_assq" #(1) #(2))))
-
-(symbol? (procedure? symbol symbol? (*) boolean))
-
-(symbol-append (procedure! symbol-append (#!rest symbol) symbol))
-(symbol->string (procedure! symbol->string (symbol) string))
-(string->symbol (procedure! string->symbol (string) symbol))
-
-(number? (procedure? number number? (*) boolean))
-
-;;XXX predicate?
-(integer? (procedure integer? (*) boolean)
-	  ((fixnum) (let ((#(tmp) #(1))) '#t))
-	  ((float) (##core#inline "C_u_i_fpintegerp" #(1))))
-
-(exact? (procedure? fixnum exact? (*) boolean))
-(real? (procedure? number real? (*) boolean))
-(complex? (procedure? number complex? (*) boolean))
-(inexact? (procedure? float inexact? (*) boolean))
-
-;;XXX predicate?
-(rational? (procedure rational? (*) boolean)
-	   ((fixnum) (let ((#(tmp) #(1))) '#t)))
-
-(zero? (procedure! zero? (number) boolean) 
-       ((fixnum) (eq? #(1) '0))
-       ((number) (##core#inline "C_u_i_zerop" #(1))))
-
-(odd? (procedure! odd? (number) boolean) ((fixnum) (fxodd? #(1))))
-(even? (procedure! even? (number) boolean) ((fixnum) (fxeven? #(1))))
-
-(positive? (procedure! positive? (number) boolean)
-	   ((fixnum) (##core#inline "C_fixnum_greaterp" #(1) '0))
-	   ((number) (##core#inline "C_u_i_positivep" #(1))))
-
-(negative? (procedure! negative? (number) boolean)
-	   ((fixnum) (##core#inline "C_fixnum_lessp" #(1) '0))
-	   ((number) (##core#inline "C_u_i_negativep" #(1))))
-
-(max (procedure! max (#!rest number) number)
-     ((fixnum fixnum) (fxmax #(1) #(2)))
-     ((float float) (##core#inline "C_i_flonum_max" #(1) #(2))))
-
-(min (procedure! min (#!rest number) number)
-     ((fixnum fixnum) (fxmin #(1) #(2)))
-     ((float float) (##core#inline "C_i_flonum_min" #(1) #(2))))
-
-(+ (procedure! + (#!rest number) number)
-   (() (fixnum) '0)
-   ((fixnum) (fixnum) #(1))
-   ((float) (float) #(1))
-   ((number) #(1))
-   ((float fixnum) (float)
-    (##core#inline_allocate 
-     ("C_a_i_flonum_plus" 4) 
-     #(1) 
-     (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(2))))
-   ((fixnum float)
-    (float)
-    (##core#inline_allocate 
-     ("C_a_i_flonum_plus" 4) 
-     (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(1))
-     #(2)))
-   ((float float) (float)
-    (##core#inline_allocate ("C_a_i_flonum_plus" 4) #(1) #(2))))
-
-(- (procedure! - (number #!rest number) number)
-   ((fixnum) (fixnum)
-    (##core#inline "C_u_fixnum_negate" #(1)))
-   ((float fixnum) (float)
-    (##core#inline_allocate 
-     ("C_a_i_flonum_difference" 4) 
-     #(1) 
-     (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(2))))
-   ((fixnum float) (float)
-    (##core#inline_allocate 
-     ("C_a_i_flonum_difference" 4) 
-     (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(1))
-     #(2)))
-   ((float float) (float)
-    (##core#inline_allocate ("C_a_i_flonum_difference" 4) #(1) #(2)))
-   ((float) (float) 
-    (##core#inline_allocate ("C_a_i_flonum_negate" 4) #(1))))
-
-(* (procedure! * (#!rest number) number)
-   (() (fixnum) '1)
-   ((fixnum) (fixnum) #(1))
-   ((float) (float) #(1))
-   ((number) (number) #(1))
-   ((float fixnum) (float)
-    (##core#inline_allocate 
-     ("C_a_i_flonum_times" 4) 
-     #(1) 
-     (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(2))))
-   ((fixnum float) (float)
-    (##core#inline_allocate 
-     ("C_a_i_flonum_times" 4) 
-     (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(1))
-     #(2)))
-   ((float float) (float)
-    (##core#inline_allocate ("C_a_i_flonum_times" 4) #(1) #(2))))
-
-(/ (procedure! / (number #!rest number) number)
-   ((float fixnum) (float)
-    (##core#inline_allocate 
-     ("C_a_i_flonum_quotient_checked" 4) 
-     #(1) 
-     (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(2))))
-   ((fixnum float) (float)
-    (##core#inline_allocate 
-     ("C_a_i_flonum_quotient_checked" 4) 
-     (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(1))
-     #(2)))
-   ((float float) (float)
-    (##core#inline_allocate ("C_a_i_flonum_quotient_checked" 4) #(1) #(2))))
-
-(= (procedure! = (#!rest number) boolean)
-   ((fixnum fixnum) (eq? #(1) #(2)))
-   ((float fixnum) (##core#inline
-		    "C_flonum_equalp"
-		    #(1) 
-		    (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(2))))
-   ((fixnum float) (##core#inline
-		    "C_flonum_equalp"
-		    (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(1))
-		    #(2)))
-   ((float float) (##core#inline "C_flonum_equalp" #(1) #(2))))
-
-(> (procedure! > (#!rest number) boolean)
-   ((fixnum fixnum) (fx> #(1) #(2)))
-   ((float fixnum) (##core#inline
-		    "C_flonum_greaterp"
-		    #(1) 
-		    (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(2))))
-   ((fixnum float) (##core#inline
-		    "C_flonum_greaterp"
-		    (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(1))
-		    #(2)))
-   ((float float) (##core#inline "C_flonum_greaterp" #(1) #(2))))
-
-(< (procedure! < (#!rest number) boolean)
-   ((fixnum fixnum) (fx< #(1) #(2)))
-   ((float fixnum) (##core#inline
-		    "C_flonum_lessp"
-		    #(1) 
-		    (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(2))))
-   ((fixnum float) (##core#inline
-		    "C_flonum_lessp"
-		    (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(1))
-		    #(2)))
-   ((float float) (##core#inline "C_flonum_lessp" #(1) #(2))))
-
-(>= (procedure! >= (#!rest number) boolean)
-    ((fixnum fixnum) (fx>= #(1) #(2)))
-    ((float fixnum) (##core#inline
-		     "C_flonum_greater_or_equal_p"
-		     #(1) 
-		     (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(2))))
-    ((fixnum float) (##core#inline
-		     "C_flonum_greater_or_equal_p"
-		     (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(1))
-		     #(2)))
-    ((float float) (##core#inline "C_flonum_greater_or_equal_p" #(1) #(2))))
-
-(<= (procedure! <= (#!rest number) boolean)
-    ((fixnum fixnum) (fx<= #(1) #(2)))
-    ((float fixnum) (##core#inline
-		     "C_flonum_less_or_equal_p"
-		     #(1) 
-		     (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(2))))
-    ((fixnum float) (##core#inline
-		     "C_flonum_less_or_equal_p"
-		     (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(1))
-		     #(2)))
-    ((float float) (##core#inline "C_flonum_less_or_equal_p" #(1) #(2))))
-
-(quotient (procedure! quotient (number number) number)
-	  ;;XXX flonum/mixed case
-	  ((fixnum fixnum) (fixnum)
-	   (##core#inline "C_fixnum_divide" #(1) #(2))))
-
-(remainder (procedure! remainder (number number) number)
-	   ;;XXX flonum/mixed case
-	   ((fixnum fixnum) (fixnum)
-	    (##core#inline "C_fixnum_modulo" #(1) #(2))))
-
-(modulo (procedure! modulo (number number) number))
-
-(gcd (procedure! gcd (#!rest number) number) ((* *) (##sys#gcd #(1) #(2))))
-(lcm (procedure! lcm (#!rest number) number) ((* *) (##sys#lcm #(1) #(2))))
-
-(abs (procedure! abs (number) number)
-     ((fixnum) (fixnum)
-      (##core#inline "C_fixnum_abs" #(1)))
-     ((float) (float)
-      (##core#inline_allocate ("C_a_i_flonum_abs" 4) #(1))))
-
-(floor (procedure! floor (number) number)
-       ((fixnum) (fixnum) #(1))
-       ((float) (float)
-	(##core#inline_allocate ("C_a_i_flonum_floor" 4) #(1))))
-
-(ceiling (procedure! ceiling (number) number)
-	 ((fixnum) (fixnum) #(1))
-	 ((float) (float)
-	  (##core#inline_allocate ("C_a_i_flonum_ceiling" 4) #(1))))
-
-(truncate (procedure! truncate (number) number)
-	  ((fixnum) (fixnum) #(1))
-	  ((float) (float)
-	   (##core#inline_allocate ("C_a_i_flonum_truncate" 4) #(1))))
-
-(round (procedure! round (number) number)
-       ((fixnum) (fixnum) #(1))
-       ((float) (float)
-	(##core#inline_allocate ("C_a_i_flonum_round" 4) #(1))))
-
-(exact->inexact (procedure! exact->inexact (number) float)
-		((float) #(1))
-		((fixnum) (##core#inline_allocate ("C_a_i_fix_to_flo" 4) #(1))))
-
-(inexact->exact (procedure! inexact->exact (number) fixnum) ((fixnum) #(1)))
-
-(exp (procedure! exp (number) float)
-     ((float) (##core#inline_allocate ("C_a_i_flonum_exp" 4) #(1))))
-
-(log (procedure! log (number) float)
-     ((float) (##core#inline_allocate ("C_a_i_flonum_log" 4) #(1))))
-
-(expt (procedure! expt (number number) number)
-      ((float float) (float)
-       (##core#inline_allocate ("C_a_i_flonum_expt" 4) #(1) #(2))))
-
-(sqrt (procedure! sqrt (number) float)
-      ((float) (##core#inline_allocate ("C_a_i_flonum_sqrt" 4) #(1))))
-
-(sin (procedure! sin (number) float)
-     ((float) (##core#inline_allocate ("C_a_i_flonum_sin" 4) #(1))))
-
-(cos (procedure! cos (number) float)
-     ((float) (##core#inline_allocate ("C_a_i_flonum_cos" 4) #(1))))
-
-(tan (procedure! tan (number) float)
-     ((float) (##core#inline_allocate ("C_a_i_flonum_tan" 4) #(1))))
-
-(asin (procedure! asin (number) float) 
-      ((float) (##core#inline_allocate ("C_a_i_flonum_asin" 4) #(1))))
-
-(acos (procedure! acos (number) float)
-      ((float) (##core#inline_allocate ("C_a_i_flonum_acos" 4) #(1))))
-
-(atan (procedure! atan (number #!optional number) float)
-      ((float) (##core#inline_allocate ("C_a_i_flonum_atan" 4) #(1)))
-      ((float float) (##core#inline_allocate ("C_a_i_flonum_atan2" 4) #(1))))
-
-(number->string (procedure! number->string (number #!optional number) string)
-		((fixnum) (##sys#fixnum->string #(1))))
-
-(string->number (procedure! string->number (string #!optional number) (or number boolean)))
-
-(char? (procedure? char char? (*) boolean))
-
-;; we could rewrite these, but this is done by the optimizer anyway (safe)
-(char=? (procedure! char=? (char char) boolean))
-(char>? (procedure! char>? (char char) boolean))
-(char<? (procedure! char<? (char char) boolean))
-(char>=? (procedure! char>=? (char char) boolean))
-(char<=? (procedure! char<=? (char char) boolean))
-
-(char-ci=? (procedure! char-ci=? (char char) boolean))
-(char-ci<? (procedure! char-ci<? (char char) boolean))
-(char-ci>? (procedure! char-ci>? (char char) boolean))
-(char-ci>=? (procedure! char-ci>=? (char char) boolean))
-(char-ci<=? (procedure! char-ci<=? (char char) boolean))
-(char-alphabetic? (procedure! char-alphabetic? (char) boolean))
-(char-whitespace? (procedure! char-whitespace? (char) boolean))
-(char-numeric? (procedure! char-numeric? (char) boolean))
-(char-upper-case? (procedure! char-upper-case? (char) boolean))
-(char-lower-case? (procedure! char-lower-case? (char) boolean))
-(char-upcase (procedure! char-upcase (char) char))
-(char-downcase (procedure! char-downcase (char) char))
-
-(char->integer (procedure! char->integer (char) fixnum))
-(integer->char (procedure! integer->char (fixnum) char))
-
-(string? (procedure? string string? (*) boolean))
-
-(string=? (procedure! string=? (string string) boolean)
-	  ((string string) (##core#inline "C_u_i_string_equal_p" #(1) #(2))))
-
-(string>? (procedure! string>? (string string) boolean))
-(string<? (procedure! string<? (string string) boolean))
-(string>=? (procedure! string>=? (string string) boolean))
-(string<=? (procedure! string<=? (string string) boolean))
-(string-ci=? (procedure! string-ci=? (string string) boolean))
-(string-ci<? (procedure! string-ci<? (string string) boolean))
-(string-ci>? (procedure! string-ci>? (string string) boolean))
-(string-ci>=? (procedure! string-ci>=? (string string) boolean))
-(string-ci<=? (procedure! string-ci<=? (string string) boolean))
-
-(make-string (procedure! make-string (fixnum #!optional char) string)
-	     ((fixnum char) (##sys#make-string #(1) #(2)))
-	     ((fixnum) (##sys#make-string #(1) '#\space)))
-
-(string-length (procedure! string-length (string) fixnum)
-	       ((string) (##sys#size #(1))))
-
-(string-ref (procedure! string-ref (string fixnum) char)
-	    ((string fixnum) (##core#inline "C_subchar" #(1) #(2))))
-
-(string-set! (procedure! string-set! (string fixnum char) undefined)
-	     ((string fixnum char) (##core#inline "C_setsubchar" #(1) #(2) #(3))))
-
-(string-append (procedure! string-append (#!rest string) string)
-	       ((string string) (##sys#string-append #(1) #(2))))
-
-;(string-copy (procedure! string-copy (string) string)) - we use the more general version from srfi-13
-
-(string->list (procedure! string->list (string) (list char)))
-(list->string (procedure! list->string ((list char)) string))
-(substring (procedure! substring (string fixnum #!optional fixnum) string))
-;(string-fill! (procedure! string-fill! (string char) string)) - s.a.
-(string (procedure! string (#!rest char) string))
-
-(vector? (procedure? vector vector? (*) boolean))
-
-;; not result type "(vector a)", since it may be mutated!
-(make-vector (forall (a) (procedure! make-vector (fixnum #!optional a) vector)))
-
-(vector-ref (forall (a) (procedure! vector-ref ((vector a) fixnum) a)))
-(##sys#vector-ref (forall (a) (procedure! ##sys#vector-ref ((vector a) fixnum) a)))
-(vector-set! (procedure! vector-set! (vector fixnum *) undefined))
-(vector (procedure vector (#!rest) vector))
-(##sys#vector (procedure ##sys#vector (#!rest) vector))
-
-(vector-length (procedure! vector-length (vector) fixnum)
-	       ((vector) (##sys#size #(1))))
-(##sys#vector-length (procedure! ##sys#vector-length (vector) fixnum)
-		     ((vector) (##sys#size #(1))))
-
-(vector->list (forall (a) (procedure! vector->list ((vector a)) (list a))))
-(##sys#vector->list (forall (a) (procedure! ##sys#vector->list ((vector a)) (list a))))
-(list->vector (forall (a) (procedure! list->vector ((list a)) (vector a))))
-(##sys#list->vector (forall (a) (procedure! ##sys#list->vector ((list a)) (vector a))))
-(vector-fill! (procedure! vector-fill! (vector *) undefined))
-
-(procedure? (procedure? procedure procedure? (*) boolean))
-
-(vector-copy! (procedure! vector-copy! (vector vector #!optional fixnum) undefined))
-(map (forall (a b) (procedure! map ((procedure (a #!rest) b) (list a) #!rest list) (list b))))
-
-(for-each
- (forall (a) (procedure! for-each ((procedure (a #!rest) . *) (list a) #!rest list) undefined)))
-
-(apply (procedure! apply (procedure #!rest) . *))
-(##sys#apply (procedure! ##sys#apply (procedure #!rest) . *))
-
-(force (procedure force (*) *)
-       (((not (struct promise))) #(1)))
-
-(call-with-current-continuation
- (procedure! call-with-current-continuation ((procedure (procedure) . *)) . *))
-
-(input-port? (procedure input-port? (*) boolean))
-(output-port? (procedure output-port? (*) boolean))
-
-(current-input-port
- (procedure! current-input-port (#!optional port) port)
- ((port) (let ((#(tmp1) #(1))) 
-	   (let ((#(tmp2) (set! ##sys#standard-input #(tmp1))))
-	     #(tmp1))))
- (() ##sys#standard-input))
-
-(current-output-port
- (procedure! current-output-port (#!optional port) port)
- ((port) (let ((#(tmp1) #(1)))
-	   (let ((#(tmp2) (set! ##sys#standard-output #(tmp1))))
-	     #(tmp1))))
- (() ##sys#standard-output))
-
-(call-with-input-file
-    (procedure call-with-input-file (string (procedure (port) . *) #!rest) . *))
-
-(call-with-output-file
-    (procedure call-with-output-file (string (procedure (port) . *) #!rest) . *))
-
-(open-input-file (procedure! open-input-file (string #!rest symbol) port))
-(open-output-file (procedure! open-output-file (string #!rest symbol) port))
-(close-input-port (procedure! close-input-port (port) undefined))
-(close-output-port (procedure! close-output-port (port) undefined))
-(load (procedure load (string #!optional (procedure (*) . *)) undefined))
-(read (procedure! read (#!optional port) *))
-
-(eof-object? (procedure? eof eof-object? (*) boolean))
-
-;;XXX if we had input/output port distinction, we could specialize these:
-(read-char (procedure! read-char (#!optional port) *)) ;XXX result (or eof char) ?
-(peek-char (procedure! peek-char (#!optional port) *))
-
-(write (procedure! write (* #!optional port) undefined))
-(display (procedure! display (* #!optional port) undefined))
-(write-char (procedure! write-char (char #!optional port) undefined))
-(newline (procedure! newline (#!optional port) undefined))
-
-(with-input-from-file
-    (procedure! with-input-from-file (string (procedure () . *) #!rest symbol) . *))
-
-(with-output-to-file
-    (procedure! with-output-to-file (string (procedure () . *) #!rest symbol) . *))
-
-(dynamic-wind
-    (procedure! dynamic-wind ((procedure () . *) (procedure () . *) (procedure () . *)) . *))
-
-(values (procedure values (#!rest values) . *))
-(##sys#values (procedure ##sys#values (#!rest values) . *))
-
-(call-with-values (procedure! call-with-values ((procedure () . *) procedure) . *)
-  (((procedure () *) *) (let ((#(tmp1) #(1)))
-			  (let ((#(tmp2) #(2)))
-			    (#(tmp2) (#(tmp1)))))))
-
-(##sys#call-with-values
- (procedure! ##sys#call-with-values ((procedure () . *) procedure) . *)
- (((procedure () *) *) (let ((#(tmp1) #(1)))
-			 (let ((#(tmp2) #(2)))
-			   (#(tmp2) (#(tmp1)))))))
-
-(eval (procedure eval (* #!optional (struct environment)) *))
-(char-ready? (procedure! char-ready? (#!optional port) boolean))
-
-(imag-part (procedure! imag-part (number) number)
-	   (((or fixnum float number)) (let ((#(tmp) #(1))) '0)))
-
-(real-part (procedure! real-part (number) number)
-	   (((or fixnum float number)) #(1)))
-
-(magnitude (procedure! magnitude (number) number)
-	   ((fixnum) (fixnum)
-	    (##core#inline "C_fixnum_abs" #(1)))
-	   ((float) (float)
-	    (##core#inline_allocate ("C_a_i_flonum_abs" 4) #(1))))
-
-(numerator (procedure! numerator (number) number)
-	   ((fixnum) (fixnum) #(1)))
-	   
-(denominator (procedure! denominator (number) number)
-	     ((fixnum) (fixnum) (let ((#(tmp) #(1))) '1)))
-
-(scheme-report-environment 
- (procedure! scheme-report-environment (#!optional fixnum) (struct environment)))
-
-(null-environment
- (procedure! null-environment (#!optional fixnum) (struct environment)))
-
-(interaction-environment
- (procedure interaction-environment () (struct environment)))
-
-(port-closed? (procedure! port-closed? (port) boolean)
-	      ((port) (##sys#slot #(1) '8)))
-
-;; chicken
-
-(abort (procedure abort (*) noreturn))
-
-(add1 (procedure! add1 (number) number)
-      ((float) (float) 
-       (##core#inline_allocate ("C_a_i_flonum_plus" 4) #(1) '1.0)))
-
-(argc+argv (procedure argc+argv () fixnum (list string) fixnum))
-(argv (procedure argv () (list string)))
-(arithmetic-shift (procedure! arithmetic-shift (number number) number))
-
-(bit-set? (procedure! bit-set? (number fixnum) boolean)
-	  ((fixnum fixnum) (##core#inline "C_u_i_bit_setp" #(1) #(2))))
-
-(bitwise-and (procedure! bitwise-and (#!rest number) number)
-	     ((fixnum fixnum) (fixnum)
-	      (##core#inline "C_fixnum_and" #(1) #(2))))
-
-(bitwise-ior (procedure! bitwise-ior (#!rest number) number)
-	     ((fixnum fixnum) (fixnum)
-	      (##core#inline "C_fixnum_or" #(1) #(2))))
-
-(bitwise-not (procedure! bitwise-not (number) number))
-
-(bitwise-xor (procedure! bitwise-xor (#!rest number) number)
-	     ((fixnum fixnum) (fixnum) 
-	      (##core#inline "C_fixnum_xor" #(1) #(2))))
-
-(blob->string (procedure! blob->string (blob) string))
-
-(blob-size (procedure! blob-size (blob) fixnum)
-	   ((blob) (##sys#size #(1))))
-
-(blob? (procedure? blob blob? (*) boolean))
-
-(blob=? (procedure! blob=? (blob blob) boolean))
-(build-platform (procedure build-platform () symbol))
-(call/cc (procedure! call/cc ((procedure (*) . *)) . *))
-(case-sensitive (procedure case-sensitive (#!optional *) *))
-(char-name (procedure! char-name ((or char symbol) #!optional char) *)) ;XXX -> (or char symbol) ?
-(chicken-home (procedure chicken-home () string))
-(chicken-version (procedure chicken-version (#!optional *) string))
-(command-line-arguments (procedure command-line-arguments (#!optional (list string)) (list string)))
-(condition-predicate (procedure! condition-predicate (symbol) (procedure ((struct condition)) boolean)))
-(condition-property-accessor (procedure! condition-property-accessor (symbol symbol #!optional *) (procedure ((struct condition)) *)))
-
-(condition? (procedure? (struct condition) condition? (*) boolean))
-
-(condition->list (procedure! condition->list ((struct condition)) (list (pair symbol *))))
-(continuation-capture (procedure! continuation-capture ((procedure ((struct continuation)) . *)) *))
-(continuation-graft (procedure! continuation-graft ((struct continuation) (procedure () . *)) *))
-(continuation-return (procedure! continuation-return (procedure #!rest) . *)) ;XXX make return type more specific?
-
-(continuation? (procedure? (struct continuation) continuation? (*) boolean))
-
-(copy-read-table (procedure! copy-read-table ((struct read-table)) (struct read-table)))
-(cpu-time (procedure cpu-time () fixnum fixnum))
-
-(current-error-port
- (procedure! current-error-port (#!optional port) port)
- ((port) (let ((#(tmp1) #(1))) 
-	   (let ((#(tmp2) (set! ##sys#standard-error #(tmp1))))
-	     #(tmp1))))
- (() ##sys#standard-error))
-
-(current-exception-handler
- (procedure! current-exception-handler (#!optional (procedure (*) noreturn)) procedure)
- ((procedure) (let ((#(tmp1) #(1))) 
-		(let ((#(tmp2) (set! ##sys#current-exception-handler #(tmp1))))
-		  #(tmp1))))
- (() ##sys#current-exception-handler))
-
-(current-gc-milliseconds (procedure current-gc-milliseconds () fixnum))
-(current-milliseconds (procedure current-milliseconds () float))
-
-(current-read-table
- (procedure current-read-table (#!optional (struct read-table)) (struct read-table)))
-
-(current-seconds (procedure current-seconds () float))
-(define-reader-ctor (procedure! define-reader-ctor (symbol procedure) undefined))
-(delete-file (procedure! delete-file (string) string))
-(enable-warnings (procedure enable-warnings (#!optional *) *))
-
-(equal=? (procedure equal=? (* *) boolean)
-	 (((or fixnum symbol char eof null undefined) *) (eq? #(1) #(2)))
-	 ((* (or fixnum symbol char eof null undefined)) (eq? #(1) #(2)))
-	 (((or float number) (or float number)) (= #(1) #(2))))
-
-(er-macro-transformer
- (procedure! 
-  er-macro-transformer
-  ((procedure (* (procedure (*) *) (procedure (* *) *)) *))
-  (struct transformer)))
-
-(errno (procedure errno () fixnum))
-(error (procedure error (* #!rest) noreturn))
-(##sys#error (procedure ##sys#error (* #!rest) noreturn))
-(##sys#signal-hook (procedure ##sys#signal-hook (* #!rest) noreturn))
-(exit (procedure exit (#!optional fixnum) noreturn))
-(exit-handler (procedure! exit-handler (#!optional (procedure (fixnum) . *)) procedure))
-(expand (procedure expand (* #!optional list) *))
-(extension-information (procedure extension-information (symbol) *))
-(feature? (procedure feature? (symbol) boolean))
-(features (procedure features () (list symbol)))
-(file-exists? (procedure! file-exists? (string) *))
-(directory-exists? (procedure! directory-exists? (string) *))
-(fixnum-bits fixnum)
-(fixnum-precision fixnum)
-
-(fixnum? (procedure? fixnum fixnum? (*) boolean))
-
-(flonum-decimal-precision fixnum)
-(flonum-epsilon float)
-(flonum-maximum-decimal-exponent fixnum)
-(flonum-maximum-exponent fixnum)
-(flonum-minimum-decimal-exponent fixnum)
-(flonum-minimum-exponent fixnum)
-(flonum-precision fixnum)
-(flonum-print-precision (procedure! (#!optional fixnum) fixnum))
-(flonum-radix fixnum)
-
-(flonum? (procedure? float flonum? (*) boolean))
-
-(flush-output (procedure! flush-output (#!optional port) undefined))
-
-(foldl (forall (a b) (procedure! foldl ((procedure (a b) a) a (list b)) a)))
-(foldr (forall (a b) (procedure! foldr ((procedure (a b) b) b (list a)) b)))
-
-(force-finalizers (procedure force-finalizers () undefined))
-
-(fp- (procedure! fp- (float float) float)
-     ((float float) (##core#inline_allocate ("C_a_i_flonum_difference" 4) #(1) #(2)) ))
-
-(fp* (procedure! fp* (float float) float)
-     ((float float) (##core#inline_allocate ("C_a_i_flonum_times" 4) #(1) #(2)) ))
-
-(fp/ (procedure! fp/ (float float) float)
-     ((float float) (##core#inline_allocate ("C_a_i_flonum_quotient" 4) #(1) #(2)) ))
-
-(fp+ (procedure! fp+ (float float) float)
-     ((float float) (##core#inline_allocate ("C_a_i_flonum_plus" 4) #(1) #(2)) ))
-
-(fp< (procedure! fp< (float float) boolean)
-     ((float float) (##core#inline "C_flonum_lessp" #(1) #(2)) ))
-
-(fp<= (procedure! fp<= (float float) boolean)
-      ((float float) (##core#inline "C_flonum_less_or_equal_p" #(1) #(2)) ))
-
-(fp= (procedure! fp= (float float) boolean)
-     ((float float) (##core#inline "C_flonum_equalp" #(1) #(2)) ))
-
-(fp> (procedure! fp> (float float) boolean)
-     ((float float) (##core#inline "C_flonum_greaterp" #(1) #(2)) ))
-
-(fp>= (procedure! fp>= (float float) boolean)
-      ((float float) (##core#inline "C_flonum_greater_or_equal_p" #(1) #(2)) ))
-
-(fpabs (procedure! fpabs (float) float)
-       ((float) (##core#inline_allocate ("C_a_i_flonum_abs" 4) #(1) )))
-
-(fpacos (procedure! fpacos (float) float)
-       ((float) (##core#inline_allocate ("C_a_i_flonum_acos" 4) #(1) )))
-
-(fpasin (procedure! fpasin (float) float)
-	((float) (##core#inline_allocate ("C_a_i_flonum_asin" 4) #(1) )))
-
-(fpatan (procedure! fpatan (float) float)
-	((float) (##core#inline_allocate ("C_a_i_flonum_atan" 4) #(1) )))
-
-(fpatan2 (procedure! fpatan2 (float float) float)
-	 ((float float) (##core#inline_allocate ("C_a_i_flonum_atan2" 4)
-						#(1) #(2))))
-(fpceiling (procedure! fpceiling (float) float)
-	   ((float) (##core#inline_allocate ("C_a_i_flonum_ceiling" 4) #(1) )))
-
-(fpcos (procedure! fpcos (float) float)
-       ((float) (##core#inline_allocate ("C_a_i_flonum_cos" 4) #(1) )))
-
-(fpexp (procedure! fpexp (float) float)
-       ((float) (##core#inline_allocate ("C_a_i_flonum_exp" 4) #(1) )))
-
-(fpexpt (procedure! fpexpt (float float) float)
-	((float float) (##core#inline_allocate ("C_a_i_flonum_expt" 4)
-					       #(1) #(2))))
-
-(fpfloor (procedure! fpfloor (float) float)
-	 ((float) (##core#inline_allocate ("C_a_i_flonum_floor" 4) #(1) )))
-
-(fpinteger? (procedure! fpinteger? (float) boolean)
-	    ((float) (##core#inline "C_u_i_flonum_intergerp" #(1) )))
-
-(fplog (procedure! fplog (float) float)
-       ((float) (##core#inline_allocate ("C_a_i_flonum_log" 4) #(1) )))
-
-(fpmax (procedure! fpmax (float float) float)
-       ((float float) (##core#inline "C_i_flonum_max" #(1) #(2))))
-
-(fpmin (procedure! fpmin (float float) float)
-       ((float float) (##core#inline "C_i_flonum_min" #(1) #(2))))
-
-(fpneg (procedure! fpneg (float) float)
-       ((float) (##core#inline_allocate ("C_a_i_flonum_negate" 4) #(1) )))
-
-(fpround (procedure! fpround (float) float)
-	 ((float) (##core#inline_allocate ("C_a_i_flonum_round" 4) #(1) )))
-
-(fpsin (procedure! fpsin (float) float)
-       ((float) (##core#inline_allocate ("C_a_i_flonum_sin" 4) #(1) )))
-
-(fpsqrt (procedure! fpsqrt (float) float)
-	((float) (##core#inline_allocate ("C_a_i_flonum_sqrt" 4) #(1) )))
-
-(fptan (procedure! fptan (float) float)
-       ((float) (##core#inline_allocate ("C_a_i_flonum_tan" 4) #(1) )))
-
-(fptruncate (procedure! fptruncate (float) float)
-	    ((float) (##core#inline_allocate ("C_a_i_flonum_truncate" 4) #(1) )))
-
-(fx- (procedure fx- (fixnum fixnum) fixnum))
-(fx* (procedure fx* (fixnum fixnum) fixnum))
-(fx/ (procedure fx/ (fixnum fixnum) fixnum))
-(fx+ (procedure fx+ (fixnum fixnum) fixnum))
-(fx< (procedure fx< (fixnum fixnum) boolean))
-(fx<= (procedure fx<= (fixnum fixnum) boolean))
-(fx= (procedure fx= (fixnum fixnum) boolean))
-(fx> (procedure fx> (fixnum fixnum) boolean))
-(fx>= (procedure fx>= (fixnum fixnum) boolean))
-(fxand (procedure fxand (fixnum fixnum) fixnum))
-(fxeven? (procedure fxeven? (fixnum) boolean))
-(fxior (procedure fxior (fixnum fixnum) fixnum))
-(fxmax (procedure fxmax (fixnum fixnum) fixnum))
-(fxmin (procedure fxmin (fixnum fixnum) fixnum))
-(fxmod (procedure fxmod (fixnum fixnum) fixnum))
-(fxneg (procedure fxneg (fixnum) fixnum))
-(fxnot (procedure fxnot (fixnum) fixnum))
-(fxodd? (procedure fxodd? (fixnum) boolean))
-(fxshl (procedure fxshl (fixnum fixnum) fixnum))
-(fxshr (procedure fxshr (fixnum fixnum) fixnum))
-(fxxor (procedure fxxor (fixnum fixnum) fixnum))
-(gc (procedure gc (#!optional *) fixnum))
-(gensym (procedure gensym (#!optional (or string symbol)) symbol))
-
-(get (procedure! get (symbol symbol #!optional *) *)
-     ((symbol symbol *) (##core#inline "C_i_getprop" #(1) #(2) #(3))))
-
-(get-call-chain (procedure! get-call-chain (#!optional fixnum (struct thread)) (list vector)))
-(get-condition-property (procedure! get-condition-property ((struct condition) symbol symbol #!optional *) *))
-(get-environment-variable (procedure! get-environment-variable (string) *))
-(get-keyword (procedure! get-keyword (symbol list #!optional *) *))
-(get-output-string (procedure! get-output-string (port) string))
-(get-properties (procedure! get-properties (symbol list) symbol * list))
-
-(getter-with-setter
- (procedure!
-  getter-with-setter
-  ((procedure (#!rest) *) (procedure (* #!rest) . *) #!optional string)
-  procedure))
-
-(implicit-exit-handler
- (procedure! implicit-exit-handler (#!optional (procedure () . *)) procedure))
-
-(ir-macro-transformer
- (procedure
-  ir-macro-transformer
-  ((procedure (* (procedure (*) *) (procedure (* *) *)) *))
-  (struct transformer)))
-
-(keyword->string (procedure! keyword->string (symbol) string))
-(keyword-style (procedure keyword-style (#!optional symbol) symbol))
-(keyword? (procedure keyword? (*) boolean))
-(load-library (procedure! load-library (symbol #!optional string) undefined))
-(load-relative (procedure! load-relative (string #!optional (procedure (*) . *)) undefined))
-(load-verbose (procedure load-verbose (#!optional *) *))
-(machine-byte-order (procedure machine-byte-order () symbol))
-(machine-type (procedure machine-type () symbol))
-
-(make-blob (procedure! make-blob (fixnum) blob)
-	   ((fixnum) (##sys#make-blob #(1))))
-
-(make-composite-condition (procedure! make-composite-condition (#!rest (struct condition)) (struct condition)))
-(make-parameter (procedure! make-parameter (* #!optional procedure) procedure))
-(make-property-condition (procedure! make-property-condition (symbol #!rest *) (struct condition)))
-(maximum-flonum float)
-(memory-statistics (procedure memory-statistics () (vector fixnum)))
-(minimum-flonum float)
-(most-negative-fixnum fixnum)
-(most-positive-fixnum fixnum)
-(on-exit (procedure! on-exit ((procedure () . *)) undefined))
-(open-input-string (procedure! open-input-string (string #!rest) port))
-(open-output-string (procedure open-output-string (#!rest) port))
-(parentheses-synonyms (procedure parentheses-synonyms (#!optional *) *))
-
-(port-name (procedure! port-name (#!optional port) *)
-	   ((port) (##sys#slot #(1) '3)))
-
-(port-position (procedure! port-position (#!optional port) fixnum))
-
-(port? (procedure? port port? (*) boolean))
-
-(print (procedure print (#!rest *) undefined))
-(print-call-chain (procedure! print-call-chain (#!optional port fixnum * string) undefined))
-(print-error-message (procedure! print-error-message (* #!optional port string) undefined))
-(print* (procedure print* (#!rest) undefined))
-(procedure-information (procedure! procedure-information (procedure) *))
-(program-name (procedure! program-name (#!optional string) string))
-(promise? (procedure? (struct promise) promise? (*) boolean))
-
-(put! (procedure! put! (symbol symbol *) undefined)
-      ((symbol symbol *)
-       (##core#inline_allocate ("C_a_i_putprop" 8) #(1) #(2) #(3))))
-
-(quit (procedure quit (#!optional *) noreturn))
-(register-feature! (procedure! register-feature! (#!rest symbol) undefined))
-(remprop! (procedure! remprop! (symbol symbol) undefined))
-(rename-file (procedure! rename-file (string string) string))
-(repl (procedure! repl (#!optional (procedure (*) . *)) undefined))
-(repl-prompt (procedure! repl-prompt (#!optional (procedure () string)) procedure))
-(repository-path (procedure repository-path (#!optional *) *))
-(require (procedure require (#!rest (or string symbol)) undefined))
-(reset (procedure reset () noreturn))
-(reset-handler (procedure! reset-handler (#!optional (procedure () . *)) procedure))
-(return-to-host (procedure return-to-host () . *))
-(reverse-list->string (procedure! reverse-list->string ((list char)) string))
-(set-finalizer! (procedure! set-finalizer! (* (procedure (*) . *)) *))
-(set-gc-report! (procedure set-gc-report! (*) undefined))
-
-(set-parameterized-read-syntax!
- (procedure! set-parameterized-read-syntax! (char (procedure (port fixnum) . *)) undefined))
-
-(set-port-name! (procedure! set-port-name! (port string) undefined)
-		((port string) (##sys#setslot #(1) '3 #(2))))
-
-(set-read-syntax! (procedure! set-read-syntax! (char (procedure (port) . *)) undefined))
-(set-sharp-read-syntax! (procedure! set-sharp-read-syntax! (char (procedure (port) . *)) undefined))
-(setter (procedure! setter (procedure) procedure))
-(signal (procedure signal (*) . *))
-(signum (procedure! signum (number) number))
-(software-type (procedure software-type () symbol))
-(software-version (procedure software-version () symbol))
-(string->blob (procedure! string->blob (string) blob))
-(string->keyword (procedure! string->keyword (string) symbol))
-(string->uninterned-symbol (procedure! string->uninterned-symbol (string) symbol))
-(strip-syntax (procedure strip-syntax (*) *))
-
-(sub1 (procedure! sub1 (number) number)
-      ((float) (float)
-       (##core#inline_allocate ("C_a_i_flonum_difference" 4) #(1) '1.0)))
-
-(subvector (forall (a) (procedure! subvector ((vector a) fixnum #!optional fixnum) (vector a))))
-(symbol-escape (procedure symbol-escape (#!optional *) *))
-
-(symbol-plist (procedure! symbol-plist (symbol) list)
-	      ((symbol) (##sys#slot #(1) '2)))
-
-(syntax-error (procedure syntax-error (* #!rest) noreturn))
-(system (procedure! system (string) fixnum))
-(unregister-feature! (procedure! unregister-feature! (#!rest symbol) undefined))
-(vector-resize (forall (a) (procedure! vector-resize ((vector a) fixnum) (vector a))))
-(void (procedure void (#!rest) undefined))
-(warning (procedure warning (* #!rest) undefined))
-
-(with-exception-handler
- (procedure! with-exception-handler ((procedure (*) . *) (procedure () . *)) . *))
-
-
-;; chicken (internal)
-
-(##sys#foreign-char-argument (procedure! ##sys#foreign-char-argument (char) char)
-			     ((char) #(1)))
-(##sys#foreign-fixnum-argument (procedure! ##sys#foreign-fixnum-argument (fixnum) fixnum)
-			       ((fixnum) #(1)))
-(##sys#foreign-flonum-argument (procedure! ##sys#foreign-flonum-argument (number) number)
-			       ((float) #(1)))
-(##sys#foreign-string-argument (procedure! ##sys#foreign-string-argument (string) string)
-			       ((string) #(1)))
-(##sys#foreign-symbol-argument (procedure! ##sys#foreign-symbol-argument (symbol) symbol)
-			       ((symbol) #(1)))
-(##sys#foreign-pointer-argument (procedure! ##sys#foreign-pointer-argument (pointer) pointer)
-				((pointer) #(1)))
-
-(##sys#check-blob (procedure! ##sys#check-blob (blob #!optional *) *)
-		  ((blob) (let ((#(tmp) #(1))) '#t))
-		  ((blob *) (let ((#(tmp) #(1))) '#t)))
-(##sys#check-pair (procedure! ##sys#check-pair (pair #!optional *) *)
-		  ((pair) (let ((#(tmp) #(1))) '#t))
-		  ((pair *) (let ((#(tmp) #(1))) '#t)))
-(##sys#check-list (procedure! ##sys#check-list (list #!optional *) *)
-		  (((or null pair list)) (let ((#(tmp) #(1))) '#t))
-		  (((or null pair list) *) (let ((#(tmp) #(1))) '#t)))
-(##sys#check-string (procedure! ##sys#check-string (string #!optional *) *)
-		    ((string) (let ((#(tmp) #(1))) '#t))
-		    ((string) * (let ((#(tmp) #(1))) '#t)))
-(##sys#check-number (procedure! ##sys#check-number (number #!optional *) *)
-		    ((number) (let ((#(tmp) #(1))) '#t))
-		    ((number *) (let ((#(tmp) #(1))) '#t)))
-(##sys#check-exact (procedure! ##sys#check-exact (fixnum #!optional *) *)
-		   ((fixnum) (let ((#(tmp) #(1))) '#t))
-		   ((fixnum *) (let ((#(tmp) #(1))) '#t)))
-(##sys#check-inexact (procedure! ##sys#check-inexact (float #!optional *) *)
-		     ((float) (let ((#(tmp) #(1))) '#t))
-		     ((float *) (let ((#(tmp) #(1))) '#t)))
-(##sys#check-symbol (procedure! ##sys#check-symbol (symbol #!optional *) *)
-		    ((symbol) (let ((#(tmp) #(1))) '#t))
-		    ((symbol *) (let ((#(tmp) #(1))) '#t)))
-(##sys#check-vector (procedure! ##sys#check-vector (vector #!optional *) *)
-		    ((vector) (let ((#(tmp) #(1))) '#t))
-		    ((vector *) (let ((#(tmp) #(1))) '#t)))
-(##sys#check-char (procedure! ##sys#check-char (char #!optional *) *)
-		  ((char) (let ((#(tmp) #(1))) '#t))
-		  ((char *) (let ((#(tmp) #(1))) '#t)))
-(##sys#check-boolean (procedure! ##sys#check-boolean (boolean #!optional *) *)
-		     ((boolean) (let ((#(tmp) #(1))) '#t))
-		     ((boolean *) (let ((#(tmp) #(1))) '#t)))
-(##sys#check-locative (procedure! ##sys#check-locative (locative #!optional *) *)
-		      ((locative) (let ((#(tmp) #(1))) '#t))
-		      ((locative *) (let ((#(tmp) #(1))) '#t)))
-(##sys#check-closure (procedure! ##sys#check-closure (procedure #!optional *) *)
-		     ((procedure) (let ((#(tmp) #(1))) '#t))
-		     ((procedure *) (let ((#(tmp) #(1))) '#t)))
-
-
-;; data-structures
-
-(->string (procedure ->string (*) string)
-	  ((string) #(1)))
-
-(alist-ref (procedure! alist-ref (* (list pair) #!optional (procedure (* *) *) *) *))
-(alist-update! (procedure! alist-update! (* * (list pair) #!optional (procedure (* *) *)) *))
-(always? deprecated)
-
-(any? (procedure any? (*) boolean)
-      ((*) (let ((#(tmp) #(1))) '#t)))
-
-(atom? (procedure atom? (*) boolean)
-       ((pair) (let ((#(tmp) #(1))) '#f))
-       (((not (or pair list))) (let ((#(tmp) #(1))) '#t)))
-
-(binary-search (forall (a) (procedure! binary-search ((vector a) (procedure (a) *)) *)))
-(butlast (forall (a) (procedure! butlast ((pair a *)) (list a))))
-(chop (forall (a) (procedure! chop ((list a) fixnum) (list a))))
-(complement (procedure! complement ((procedure (#!rest) *)) (procedure (#!rest) boolean)))
-(compose (procedure! compose (#!rest procedure) procedure))
-(compress (forall (a) (procedure! compress (list (list a)) (list a))))
-(conc (procedure conc (#!rest) string))
-(conjoin (procedure! conjoin (#!rest (procedure (*) *)) (procedure (*) *)))
-(constantly (forall (a) (procedure constantly (a) (procedure (#!rest) a))))
-(disjoin (procedure! disjoin (#!rest (procedure (*) *)) (procedure (*) *)))
-(each (procedure! each (#!rest procedure) procedure))
-(flatten (procedure! flatten (pair) list))
-(flip (procedure! flip ((procedure (* *) . *)) (procedure (* *) . *)))
-(identity (forall (a) (procedure identity (a) a)))
-(intersperse (procedure! intersperse (list *) list))
-(join (procedure! join (list list) list))
-(list->queue (procedure! list->queue (list) (struct queue)))
-(list-of? (procedure! list-of? ((procedure (*) *)) (procedure (list) boolean)))
-(make-queue (procedure make-queue () (struct queue)))
-(merge (procedure! merge (list list (procedure (* *) *)) list))
-(merge! (procedure! merge! (list list (procedure (* *) *)) list))
-(never? deprecated)
-(none? deprecated)
-(o (procedure! o (#!rest (procedure (*) *)) (procedure (*) *)))
-(queue->list (procedure! queue->list ((struct queue)) list))
-(queue-add! (procedure! queue-add! ((struct queue) *) undefined))
-
-(queue-empty? (procedure! queue-empty? ((struct queue)) boolean)
-	      (((struct queue)) (##core#inline "C_i_nullp" (##sys#slot #(1) '1))))
-
-(queue-first (procedure! queue-first ((struct queue)) *))
-(queue-last (procedure! queue-last ((struct queue)) *))
-
-(queue-length (procedure! queue-length ((struct queue)) fixnum)
-	      (((struct queue)) (##sys#slot #(1) '3)))
-
-(queue-push-back! (procedure! queue-push-back! ((struct queue) *) undefined))
-(queue-push-back-list! (procedure! queue-push-back-list! ((struct queue) list) undefined))
-(queue-remove! (procedure! queue-remove! ((struct queue)) *))
-(queue? (procedure? (struct queue) queue? (*) boolean))
-
-(rassoc (procedure! rassoc (* (list pair) #!optional (procedure (* *) *)) *))
-(reverse-string-append (procedure! reverse-string-append ((list string)) string))
-(shuffle deprecated)
-(sort (procedure! sort ((or list vector) (procedure (* *) *)) (or list vector)))
-(sort! (procedure! sort! ((or list vector) (procedure (* *) *)) (or list vector)))
-(sorted? (procedure! sorted? ((or list vector) (procedure (* *) *)) boolean))
-(topological-sort (procedure! topological-sort ((list list) (procedure (* *) *)) list))
-(string-chomp (procedure! string-chomp (string #!optional string) string))
-(string-chop (procedure! string-chop (string fixnum) (list string)))
-(string-compare3 (procedure! string-compare3 (string string) fixnum))
-(string-compare3-ci (procedure! string-compare3-ci (string string) fixnum))
-(string-intersperse (procedure! string-intersperse ((list string) #!optional string) string))
-(string-split (procedure! string-split (string #!optional string *) (list string)))
-(string-translate (procedure! string-translate (string * #!optional *) string))
-(string-translate* (procedure! string-translate* (string (list (pair string string))) string))
-(substring-ci=? (procedure! substring-ci=? (string string #!optional fixnum fixnum fixnum) boolean))
-
-(substring-index (procedure! substring-index (string string #!optional fixnum) *)
-		 ((* *) (##sys#substring-index #(1) #(2) '0))
-		 ((* * *) (##sys#substring-index #(1) #(2) #(3))))
-
-(substring-index-ci (procedure! substring-index-ci (string string #!optional fixnum) *)
-		    ((* *) (##sys#substring-index-ci #(1) #(2) '0))
-		    ((* * *) (##sys#substring-index-ci #(1) #(2) #(3))))
-
-(substring=? (procedure! substring=? (string string #!optional fixnum fixnum fixnum) boolean))
-(tail? (procedure tail? (* *) boolean))
-
-
-;; extras
-
-(format (procedure format (#!rest) *))
-(fprintf (procedure! fprintf (port string #!rest) undefined))
-(pp (procedure! pp (* #!optional port) undefined))
-(pretty-print (procedure! pretty-print (* #!optional port) undefined))
-(pretty-print-width (procedure pretty-print-width (#!optional fixnum) *))
-(printf (procedure! printf (string #!rest) undefined))
-(random (procedure! random (fixnum) fixnum))
-(randomize (procedure! randomize (#!optional fixnum) undefined))
-(read-buffered (procedure! read-buffered (#!optional port) string))
-(read-byte (procedure! read-byte (#!optional port) *))
-(read-file (procedure! read-file (#!optional (or port string) (procedure (port) *) fixnum) list))
-(read-line (procedure! read-line (#!optional port (or boolean fixnum)) *))
-(read-lines (procedure! read-lines (#!optional (or port string) fixnum) (list string)))
-(read-string (procedure! read-string (#!optional * port) string))
-(read-string! (procedure! read-string! (fixnum string #!optional port fixnum) fixnum))
-(read-token (procedure! read-token ((procedure (char) *) #!optional port) string))
-(sprintf (procedure! sprintf (string #!rest) string))
-
-(write-byte (procedure! write-byte (fixnum #!optional port) undefined)
-	    ((fixnum port) (##sys#write-char-0 (integer->char #(1)) #(2)))
-	    ((fixnum) (##sys#write-char-0 (integer->char #(1)) ##sys#standard-output)))
-
-(write-line (procedure! write-line (string #!optional port) undefined))
-(write-string (procedure! write-string (string #!optional * port) undefined))
-
-
-;; files
-
-(delete-file* (procedure! delete-file* (string) *))
-(file-copy (procedure! file-copy (string string #!optional * fixnum) fixnum))
-(file-move (procedure! file-move (string string #!optional * fixnum) fixnum))
-(make-pathname (procedure! make-pathname (* #!optional string string) string))
-(directory-null? (procedure! directory-null? (string) boolean))
-(make-absolute-pathname (procedure! make-absolute-pathname (* #!optional string string) string))
-(create-temporary-directory (procedure! create-temporary-directory () string))
-(create-temporary-file (procedure! create-temporary-file (#!optional string) string))
-(decompose-directory (procedure! decompose-directory (string) * * *))
-(decompose-pathname (procedure! decompose-pathname (string) * * *))
-(absolute-pathname? (procedure! absolute-pathname? (string) boolean))
-(pathname-directory (procedure! pathname-directory (string) *))
-(pathname-extension (procedure! pathname-extension (string) *))
-(pathname-file (procedure! pathname-file (string) *))
-(pathname-replace-directory (procedure! pathname-replace-directory (string string) string))
-(pathname-replace-extension (procedure! pathname-replace-extension (string string) string))
-(pathname-replace-file (procedure! pathname-replace-file (string string) string))
-(pathname-strip-directory (procedure! pathname-strip-directory (string) string))
-(pathname-strip-extension (procedure! pathname-strip-extension (string) string))
-(normalize-pathname (procedure! normalize-pathname (string #!optional symbol) string))
-
-
-;; irregex
-
-;;XXX these need to be reviewed by Alex and/or sjamaan
-
-(irregex (procedure irregex (#!rest) *))
-;irregex-apply-match
-
-(irregex-dfa (procedure! irregex-dfa ((struct regexp)) *)
-	     (((struct regexp)) (##sys#slot #(1) '1)))
-
-(irregex-dfa/extract (procedure! irregex-dfa/extract ((struct regexp)) *)
-		     (((struct regexp)) (##sys#slot #(1) '3)))
-
-(irregex-dfa/search (procedure! irregex-dfa/search ((struct regexp)) *)
-		    (((struct regexp)) (##sys#slot #(1) '2)))
-
-(irregex-extract (procedure! irregex-extract (* string #!optional fixnum fixnum) list))
-(irregex-flags (procedure! irregex-flags ((struct regexp)) *)
-	       (((struct regexp)) (##sys#slot #(1) '5)))
-
-(irregex-fold (procedure! irregex-fold (* (procedure (fixnum (struct regexp-match) *) *) * string #!optional (procedure (fixnum *) *) fixnum fixnum) *))
-
-(irregex-fold/chunked (procedure! irregex-fold/chunked (* (procedure (* fixnum (struct regexp-match) *) *) * procedure * #!optional (procedure (* fixnum *) *) fixnum fixnum) *))
-
-(irregex-lengths (procedure! irregex-lengths ((struct regexp)) *)
-		 (((struct regexp)) (##sys#slot #(1) '7)))
-
-(irregex-match (procedure! irregex-match (* string) *))
-;irregex-match?
-
-(irregex-match-data? (procedure? (struct regexp-match) irregex-match-data? (*) boolean))
-
-(irregex-match-end (procedure irregex-match-end (* #!optional *) *))
-;irregex-match-end-chunk
-(irregex-match-end-index (procedure! irregex-match-end-index ((struct regexp-match) #!optional *) fixnum))
-
-(irregex-match-names (procedure! irregex-match-names ((struct regexp-match)) list)
-		     (((struct regexp-match)) (##sys#slot #(1) '2)))
-
-(irregex-match-num-submatches (procedure! irregex-match-num-submatches ((struct regexp-match)) fixnum))
-(irregex-match-start (procedure irregex-match-start (* #!optional *) *))
-;irregex-match-start-chunk
-(irregex-match-start-index (procedure! irregex-match-start-index ((struct regexp-match) #!optional *) fixnum))
-(irregex-match-string (procedure irregex-match-string (*) *))
-(irregex-match-subchunk (procedure! irregex-match-subchunk ((struct regexp-match) #!optional *) *))
-(irregex-match-substring (procedure irregex-match-substring (* #!optional *) *))
-(irregex-match/chunked (procedure! irregex-match/chunked (* * * #!optional fixnum) *))
-
-(irregex-names (procedure! irregex-names ((struct regexp)) *)
-	       (((struct regexp)) (##sys#slot #(1) '8)))
-
-(irregex-new-matches (procedure irregex-new-matches (*) *))
-
-(irregex-nfa (procedure! irregex-nfa ((struct regexp)) *)
-	     (((struct regexp)) (##sys#slot #(1) '4)))
-
-(irregex-num-submatches (procedure! irregex-num-submatches ((struct regexp))
-				   fixnum)
-			(((struct regexp)) (##sys#slot #(1) '6)))
-
-(irregex-opt (procedure! irregex-opt (list) *))
-(irregex-quote (procedure! irregex-quote (string) string))
-(irregex-replace (procedure! irregex-replace (* string #!rest) *))
-(irregex-replace/all (procedure! irregex-replace/all (* string #!rest) *))
-(irregex-reset-matches! (procedure irregex-reset-matches! (*) *))
-(irregex-search (procedure! irregex-search (* string #!optional fixnum fixnum) *))
-(irregex-search/matches (procedure! irregex-search/matches (* string fixnum fixnum *) *))
-(irregex-split (procedure! irregex-split (* string #!optional fixnum fixnum) list))
-(irregex-search/chunked (procedure! irregex-search/chunked (* procedure * #!optional fixnum fixnum *) *))
-(irregex-match-valid-index? 
- (procedure! irregex-match-valid-index? ((struct regexp-match) *) boolean))
-
-(irregex? (procedure? (struct regexp) irregex? (*) boolean))
-
-(make-irregex-chunker
- (procedure! make-irregex-chunker 
-	    ((procedure (*) *)
-	     (procedure (*) *)
-	     #!optional
-	     (procedure (*) *)
-	     (procedure (*) *)
-	     (procedure (* fixnum * fixnum) string)
-	     (procedure (* fixnum * fixnum) *))
-	    *))
-(maybe-string->sre (procedure maybe-string->sre (*) *))
-(sre->irregex (procedure sre->irregex (#!rest) *))
-(string->irregex (procedure! string->irregex (string #!rest) *))
-(string->sre (procedure! string->sre (string #!rest) *))
-
-
-;; lolevel
-
-(address->pointer (procedure! address->pointer (fixnum) pointer)
-		  ((fixnum) (##sys#address->pointer #(1))))
-
-(align-to-word
- (procedure 
-  align-to-word
-  ((or number pointer locative procedure port)) 
-  (or pointer number)))
-
-(allocate (procedure! allocate (fixnum) (or boolean pointer)))
-(block-ref (procedure! block-ref (* fixnum) *))
-(block-set! (procedure! block-set! (* fixnum *) *))
-(extend-procedure (procedure! extend-procedure (procedure *) procedure))
-(extended-procedure? (procedure extended-procedure? (*) boolean))
-(free (procedure! free (pointer) undefined))
-(locative->object (procedure! locative->object (locative) *))
-(locative-ref (procedure! locative-ref (locative) *))
-(locative-set! (procedure! locative-set! (locative *) *))
-(locative? (procedure? locative locative? (*) boolean))
-(make-locative (procedure! make-locative (* #!optional fixnum) locative))
-(make-pointer-vector (procedure! make-pointer-vector (fixnum #!optional pointer) pointer-vector))
-(make-record-instance (procedure make-record-instance (symbol #!rest) *))
-(make-weak-locative (procedure! make-weak-locative (* #!optional fixnum) locative))
-
-(move-memory! (procedure! move-memory! (* * #!optional fixnum fixnum fixnum) *)
-	      ((pointer pointer fixnum)
-	       (##core#inline "C_copy_ptr_memory" #(2) #(1) #(3) '0 '0))
-	      ((pointer pointer fixnum fixnum)
-	       (##core#inline "C_copy_ptr_memory" #(2) #(1) #(3) '0 #(4)))
-	      ((pointer pointer fixnum fixnum fixnum)
-	       (##core#inline "C_copy_ptr_memory" #(2) #(1) #(3) #(5) #(4)))
-	      ((locative locative fixnum)
-	       (##core#inline "C_copy_ptr_memory" #(2) #(1) #(3) '0 '0))
-	      ((locative locative fixnum fixnum)
-	       (##core#inline "C_copy_ptr_memory" #(2) #(1) #(3) '0 #(4)))
-	      ((locative locative fixnum fixnum fixnum)
-	       (##core#inline "C_copy_ptr_memory" #(2) #(1) #(3) #(5) #(4))))
-
-(mutate-procedure!
- (procedure! mutate-procedure (procedure (procedure (procedure) . *)) procedure))
-
-(mutate-procedure (deprecated mutate-procedure!))
-(null-pointer deprecated)
-(null-pointer? deprecated)
-
-(number-of-bytes (procedure number-of-bytes (*) fixnum)
-		 (((or blob string)) (##sys#size #(1)))
-		 (((or port procedure symbol pair vector locative float pointer-vector))
-		  ;; would be applicable to all structure types, but we can't specify
-		  ;; "(struct *)" (yet)
-		  (##core#inline "C_w2b" (##sys#size #(1)))))
-
-(number-of-slots (procedure number-of-slots (*) fixnum)
-		 (((or vector symbol pair)) (##sys#size #(1))))
-
-(object->pointer (procedure object->pointer (*) *))
-(object-become! (procedure object-become! (list) *))
-(object-copy (procedure object-copy (*) *))
-(object-evict (procedure! object-evict (* #!optional (procedure (fixnum) pointer)) *))
-(object-evict-to-location (procedure! object-evict-to-location (* (or pointer locative procedure port) #!optional fixnum) * pointer))
-(object-evicted? (procedure object-evicted? (*) boolean))
-(object-release (procedure! object-release (* #!optional (procedure (pointer) *)) *))
-(object-size (procedure object-size (*) fixnum))
-(object-unevict (procedure object-unevict (* #!optional *) *))
-(pointer+ (procedure! pointer+ ((or pointer procedure port locative) fixnum) pointer))
-
-(pointer->address (procedure! pointer->address ((or pointer procedure port locative)) number)
-		  ((pointer) (##sys#pointer->address #(1))))
-
-(pointer->object (procedure! pointer->object (pointer) *)
-		 ((pointer) (##core#inline "C_pointer_to_object" #(1))))
-
-(pointer-like? (procedure pointer-like? (*) boolean)
-	       (((or pointer locative procedure port)) (let ((#(tmp) #(1))) '#t)))
-
-(pointer-f32-ref (procedure! pointer-f32-ref (pointer) number))
-(pointer-f32-set! (procedure! pointer-f32-set! (pointer number) undefined))
-(pointer-f64-ref (procedure! pointer-f64-ref (pointer) number))
-(pointer-f64-set! (procedure! pointer-f64-set! (pointer number) undefined))
-(pointer-vector (procedure! pointer-vector (#!rest pointer-vector) boolean))
-
-(pointer-vector? (procedure? pointer-vector pointer-vector? (*) boolean))
-
-(pointer-vector-fill! (procedure! pointer-vector-fill! (pointer-vector pointer) undefined))
-
-(pointer-vector-length (procedure! pointer-vector-length (pointer-vector) fixnum)
-		       ((pointer-vector) (##sys#slot #(1) '1)))
-
-(pointer-vector-ref (procedure! pointer-vector-ref (pointer-vector fixnum) pointer))
-(pointer-vector-set! (procedure! pointer-vector-set! (pointer-vector fixnum pointer) undefined))
-(pointer-s16-ref (procedure! pointer-s16-ref (pointer) fixnum))
-(pointer-s16-set! (procedure! pointer-s16-set! (pointer fixnum) undefined))
-(pointer-s32-ref (procedure! pointer-s32-ref (pointer) number))
-(pointer-s32-set! (procedure! pointer-s32-set! (pointer number) undefined))
-(pointer-s8-ref (procedure! pointer-s8-ref (pointer) fixnum))
-(pointer-s8-set! (procedure! pointer-s8-set! (pointer fixnum) undefined))
-
-(pointer-tag (procedure! pointer-tag ((or pointer locative procedure port)) (or boolean number))
-	     (((or locative procedure port)) (let ((#(tmp) #(1))) '#f)))
-
-(pointer-u16-ref (procedure! pointer-u16-ref (pointer) fixnum))
-(pointer-u16-set! (procedure! pointer-u16-set! (pointer fixnum) undefined))
-(pointer-u32-ref (procedure! pointer-u32-ref (pointer) number))
-(pointer-u32-set! (procedure! pointer-u32-set! (pointer number) undefined))
-(pointer-u8-ref (procedure! pointer-u8-ref (pointer) fixnum))
-(pointer-u8-set! (procedure! pointer-u8-set! (pointer fixnum) undefined))
-
-(pointer=? (procedure! pointer=? ((or pointer locative procedure port)
-				  (or pointer locative procedure port)) boolean)
-	   ((pointer pointer) (##core#inline "C_pointer_eqp" #(1) #(2))))
-
-(pointer? (procedure? pointer pointer? (*) boolean))
-
-(procedure-data (procedure! procedure-data (procedure) *))
-(record->vector (procedure record->vector (*) vector))
-(record-instance? (procedure record-instance? (*) boolean))
-(record-instance-length (procedure record-instance-length (*) fixnum))
-(record-instance-slot (procedure! record-instance-slot (* fixnum) *))
-(record-instance-slot-set! (procedure! record-instance-slot-set! (* fixnum *) undefined))
-(record-instance-type (procedure record-instance-type (*) *))
-(set-procedure-data! (procedure! set-procedure-data! (procedure *) undefined))
-(tag-pointer (procedure! tag-pointer (pointer *) pointer))
-(tagged-pointer? (procedure! tagged-pointer? (* #!optional *) boolean))
-
-
-;; ports
-
-(call-with-input-string (procedure! call-with-input-string (string (procedure (port) . *)) . *))
-(call-with-output-string (procedure! call-with-output-string ((procedure (port) . *)) string))
-(copy-port (procedure! copy-port (* * #!optional (procedure (*) *) (procedure (* port) *)) undefined)) 
-(make-input-port (procedure! make-input-port ((procedure () char) (procedure () *) (procedure () . *) #!optional * * * *) port))
-(make-output-port (procedure! make-output-port ((procedure (string) . *) (procedure () . *) #!optional (procedure () . *)) port))
-(port-for-each (procedure! port-for-each ((procedure (*) *) (procedure () . *)) undefined))
-
-(port-map
- (forall (a b) (procedure! port-map ((procedure (a) b) (procedure () a)) (list b))))
-
-(port-fold (procedure! port-fold ((procedure (* *) *) * (procedure () *)) *))
-(make-broadcast-port (procedure! make-broadcast-port (#!rest port) port))
-(make-concatenated-port (procedure! make-concatenated-port (port #!rest port) port))
-(with-error-output-to-port (procedure! with-error-output-to-port (port (procedure () . *)) . *))
-(with-input-from-port (procedure! with-input-from-port (port (procedure () . *)) . *))
-(with-input-from-string (procedure! with-input-from-string (string (procedure () . *)) . *))
-(with-output-to-port (procedure! with-output-to-port (port (procedure () . *)) . *))
-(with-output-to-string (procedure! with-output-to-string ((procedure () . *)) . *))
-
-
-;; posix
-
-(_exit (procedure _exit (fixnum) noreturn))
-(call-with-input-pipe (procedure! call-with-input-pipe (string (procedure (port) . *) #!optional symbol) . *))
-(call-with-output-pipe (procedure! call-with-output-pipe (string (procedure (port) . *) #!optional symbol) . *))
-(change-directory (procedure! change-directory (string) string))
-(change-file-mode (procedure! change-file-mode (string fixnum) undefined))
-(change-file-owner (procedure! change-file-owner (string fixnum fixnum) undefined))
-(close-input-pipe (procedure! close-input-pipe (port) fixnum))
-(close-output-pipe (procedure! close-output-pipe (port) fixnum))
-(create-directory (procedure! create-directory (string #!optional *) string))
-(create-fifo (procedure! create-fifo (string #!optional fixnum) undefined))
-(create-pipe (procedure create-pipe () fixnum fixnum))
-(create-session (procedure create-session () fixnum))
-(create-symbolic-link (procedure! create-symbolic-link (string string) undefined))
-
-;; extra arg for "parameterize" - ugh, what a hack...
-(current-directory (procedure! current-directory (#!optional string *) string))
-
-(current-effective-group-id (procedure current-effective-group-id () fixnum))
-(current-effective-user-id (procedure current-effective-user-id () fixnum))
-(current-effective-user-name (procedure current-effective-user-name () string))
-(current-environment deprecated)
-(get-environment-variables (procedure get-environment-variables () (list string)))
-(current-group-id (procedure current-group-id () fixnum))
-(current-process-id (procedure current-process-id () fixnum))
-(current-user-id (procedure current-user-id () fixnum))
-(current-user-name (procedure current-user-name () string))
-(delete-directory (procedure! delete-directory (string) string))
-(directory (procedure! directory (string #!optional *) (list string)))
-(directory? (procedure! directory? ((or string fixnum)) boolean))
-(duplicate-fileno (procedure! duplicate-fileno (fixnum #!optional fixnum) fixnum))
-(errno/2big fixnum)
-(errno/acces fixnum)
-(errno/again fixnum)
-(errno/badf fixnum)
-(errno/busy fixnum)
-(errno/child fixnum)
-(errno/deadlk fixnum)
-(errno/dom fixnum)
-(errno/exist fixnum)
-(errno/fault fixnum)
-(errno/fbig fixnum)
-(errno/ilseq fixnum)
-(errno/intr fixnum)
-(errno/inval fixnum)
-(errno/io fixnum)
-(errno/isdir fixnum)
-(errno/mfile fixnum)
-(errno/mlink fixnum)
-(errno/nametoolong fixnum)
-(errno/nfile fixnum)
-(errno/nodev fixnum)
-(errno/noent fixnum)
-(errno/noexec fixnum)
-(errno/nolck fixnum)
-(errno/nomem fixnum)
-(errno/nospc fixnum)
-(errno/nosys fixnum)
-(errno/notdir fixnum)
-(errno/notempty fixnum)
-(errno/notty fixnum)
-(errno/nxio fixnum)
-(errno/perm fixnum)
-(errno/pipe fixnum)
-(errno/range fixnum)
-(errno/rofs fixnum)
-(errno/spipe fixnum)
-(errno/srch fixnum)
-(errno/wouldblock fixnum)
-(errno/xdev fixnum)
-(fcntl/dupfd fixnum)
-(fcntl/getfd fixnum)
-(fcntl/getfl fixnum)
-(fcntl/setfd fixnum)
-(fcntl/setfl fixnum)
-(file-access-time (procedure! file-access-time ((or string fixnum)) number))
-(file-change-time (procedure! file-change-time ((or string fixnum)) number))
-(file-close (procedure! file-close (fixnum) undefined))
-(file-control (procedure! file-control (fixnum fixnum #!optional fixnum) fixnum))
-(file-creation-mode (procedure! file-creation-mode (#!optional fixnum) fixnum))
-(file-execute-access? (procedure! file-execute-access? (string) boolean))
-(file-link (procedure! file-link (string string) undefined))
-(file-lock (procedure! file-lock (port #!optional fixnum *) (struct lock)))
-(file-lock/blocking (procedure! file-lock/blocking (port #!optional fixnum *) (struct lock)))
-(file-mkstemp (procedure! file-mkstemp (string) fixnum string))
-(file-modification-time (procedure! file-modification-time ((or string fixnum)) number))
-(file-open (procedure! file-open (string fixnum #!optional fixnum) fixnum))
-(file-owner (procedure! file-owner ((or string fixnum)) fixnum))
-(file-permissions (procedure! file-permissions ((or string fixnum)) fixnum))
-(file-position (procedure! file-position ((or port fixnum)) fixnum))
-(file-read (procedure! file-read (fixnum fixnum #!optional *) list))
-(file-read-access? (procedure! file-read-access? (string) boolean))
-(file-select (procedure! file-select ((list fixnum) (list fixnum) #!optional fixnum) * *))
-(file-size (procedure! file-size ((or string fixnum)) number))
-(file-stat (procedure! file-stat ((or string fixnum) #!optional *) (vector number)))
-(file-test-lock (procedure! file-test-lock (port #!optional fixnum *) boolean))
-(file-truncate (procedure! file-truncate ((or string fixnum) fixnum) undefined))
-(file-type (procedure! ((or string fixnum) #!optional * *) symbol))
-(file-unlock (procedure! file-unlock ((struct lock)) undefined))
-(file-write (procedure! file-write (fixnum * #!optional fixnum) fixnum))
-(file-write-access? (procedure! file-write-access? (string) boolean))
-(fileno/stderr fixnum)
-(fileno/stdin fixnum)
-(fileno/stdout fixnum)
-(find-files (procedure! find-files (string #!rest) list))
-(get-groups (procedure get-groups () list))
-(get-host-name (procedure get-host-name () string))
-(glob (procedure! glob (#!rest string) list))
-(group-information (procedure! group-information (fixnum #!optional *) *))
-(initialize-groups (procedure! initialize-groups (string fixnum) undefined))
-(local-time->seconds (procedure! local-time->seconds ((vector number)) number))
-(local-timezone-abbreviation (procedure local-timezone-abbreviation () string))
-(map-file-to-memory (procedure! map-file-to-memory (* fixnum fixnum fixnum fixnum #!optional fixnum) (struct mmap)))
-(map/anonymous fixnum)
-(map/file fixnum)
-(map/fixed fixnum)
-(map/private fixnum)
-(map/shared fixnum)
-(memory-mapped-file-pointer (procedure! memory-mapped-file-pointer ((struct mmap)) pointer))
-(memory-mapped-file? (procedure memory-mapped-file? (*) boolean))
-(open-input-file* (procedure! open-input-file* (fixnum #!optional symbol) port))
-(open-input-pipe (procedure! open-input-pipe (string #!optional symbol) port))
-(open-output-file* (procedure! open-output-file* (fixnum #!optional symbol) port))
-(open-output-pipe (procedure! open-output-pipe (string #!optional symbol) port))
-(open/append fixnum)
-(open/binary fixnum)
-(open/creat fixnum)
-(open/excl fixnum)
-(open/fsync fixnum)
-(open/noctty fixnum)
-(open/nonblock fixnum)
-(open/rdonly fixnum)
-(open/rdwr fixnum)
-(open/read fixnum)
-(open/sync fixnum)
-(open/text fixnum)
-(open/trunc fixnum)
-(open/write fixnum)
-(open/wronly fixnum)
-(parent-process-id (procedure parent-process-id () fixnum))
-(perm/irgrp fixnum)
-(perm/iroth fixnum)
-(perm/irusr fixnum)
-(perm/irwxg fixnum)
-(perm/irwxo fixnum)
-(perm/irwxu fixnum)
-(perm/isgid fixnum)
-(perm/isuid fixnum)
-(perm/isvtx fixnum)
-(perm/iwgrp fixnum)
-(perm/iwoth fixnum)
-(perm/iwusr fixnum)
-(perm/ixgrp fixnum)
-(perm/ixoth fixnum)
-(perm/ixusr fixnum)
-(pipe/buf fixnum)
-(port->fileno (procedure! port->fileno (port) fixnum))
-(process (procedure! process (string #!optional (list string) (list string)) port port fixnum))
-(process* (procedure! process* (string #!optional (list string) (list string)) port port fixnum *))
-
-(process-execute
- (procedure! process-execute (string #!optional (list string) (list string)) noreturn))
-
-(process-fork (procedure! process-fork (#!optional (procedure () . *)) fixnum))
-(process-group-id (procedure! process-group-id () fixnum))
-(process-run (procedure! process-run (string #!optional (list string)) fixnum))
-(process-signal (procedure! process-signal (fixnum #!optional fixnum) undefined))
-(process-wait (procedure! process-wait (fixnum #!optional *) fixnum fixnum fixnum))
-(prot/exec fixnum)
-(prot/none fixnum)
-(prot/read fixnum)
-(prot/write fixnum)
-(read-symbolic-link (procedure! read-symbolic-link (string) string))
-(regular-file? (procedure! regular-file? ((or string fixnum)) boolean))
-(seconds->local-time (procedure! seconds->local-time (#!optional number) (vector number)))
-(seconds->string (procedure! seconds->string (#!optional number) string))
-(seconds->utc-time (procedure! seconds->utc-time (#!optional number) (vector number)))
-(seek/cur fixnum)
-(seek/end fixnum)
-(seek/set fixnum)
-(set-alarm! (procedure! set-alarm! (number) number))
-(set-buffering-mode! (procedure! set-buffering-mode! (port symbol #!optional fixnum) undefined))
-(set-file-position! (procedure! set-file-position! ((or port fixnum) fixnum #!optional fixnum) undefined))
-(set-groups! (procedure! set-groups! (list) undefined))
-(set-root-directory! (procedure! set-root-directory! (string) undefined))
-(set-signal-handler! (procedure! set-signal-handler! (fixnum (procedure (fixnum) . *)) undefined))
-(set-signal-mask! (procedure! set-signal-mask! ((list fixnum)) undefined))
-(setenv (procedure! setenv (string string) undefined))
-(signal-handler (procedure! signal-handler (fixnum) (procedure (fixnum) . *)))
-(signal-mask (procedure signal-mask () fixnum))
-(signal-mask! (procedure! signal-mask! (fixnum) undefined))
-(signal-masked? (procedure! signal-masked? (fixnum) boolean))
-(signal-unmask! (procedure! signal-unmask! (fixnum) undefined))
-(signal/abrt fixnum)
-(signal/alrm fixnum)
-(signal/chld fixnum)
-(signal/cont fixnum)
-(signal/fpe fixnum)
-(signal/hup fixnum)
-(signal/ill fixnum)
-(signal/int fixnum)
-(signal/io fixnum)
-(signal/kill fixnum)
-(signal/pipe fixnum)
-(signal/prof fixnum)
-(signal/quit fixnum)
-(signal/segv fixnum)
-(signal/stop fixnum)
-(signal/term fixnum)
-(signal/trap fixnum)
-(signal/tstp fixnum)
-(signal/urg fixnum)
-(signal/usr1 fixnum)
-(signal/usr2 fixnum)
-(signal/vtalrm fixnum)
-(signal/winch fixnum)
-(signal/xcpu fixnum)
-(signal/xfsz fixnum)
-(signals-list list)
-(sleep (procedure! sleep (fixnum) fixnum))
-(block-device? (procedure! block-device? ((or string fixnum)) boolean))
-(character-device? (procedure! character-device? ((or string fixnum)) boolean))
-(fifo? (procedure! fifo? ((or string fixnum)) boolean))
-(socket? (procedure! socket? ((or string fixnum)) boolean))
-(string->time (procedure! string->time (string #!optional string) vector))
-(symbolic-link? (procedure! symbolic-link? ((or string fixnum)) boolean))
-(system-information (procedure system-information () list))
-(terminal-name (procedure! terminal-name (port) string))
-(terminal-port? (procedure! terminal-port? (port) boolean))
-(terminal-size (procedure! terminal-size (port) fixnum fixnum))
-(time->string (procedure! time->string (vector #!optional string) string))
-(unmap-file-from-memory (procedure! unmap-file-from-memory ((struct mmap) #!optional fixnum) undefined))
-(unsetenv (procedure! unsetenv (string) undefined))
-(user-information (procedure! user-information ((or string fixnum) #!optional *) *))
-(utc-time->seconds (procedure! utc-time->seconds ((vector number)) number))
-(with-input-from-pipe (procedure! with-input-from-pipe (string (procedure () . *) #!optional symbol) . *))
-(with-output-to-pipe (procedure! with-output-to-pipe (string (procedure () . *) #!optional symbol) . *))
-
-
-;; srfi-1
-
-(alist-cons (forall (a b c) (procedure alist-cons (a b (list c)) (pair a (pair b (list c))))))
-(alist-copy (forall (a) (procedure! alist-copy ((list a)) (list a))))
-(alist-delete (forall (a b) (procedure! alist-delete (a (list b) #!optional (procedure (a b) *)) list)))
-(alist-delete! (forall (a b) (procedure! alist-delete! (a (list b) #!optional (procedure (a b) *)) undefined)))
-(any (forall (a) (procedure! any ((procedure (a #!rest) *) (list a) #!rest list) *)))
-(append! (procedure! append! (#!rest list) list))
-
-(append-map
- (forall (a b) (procedure! append-map ((procedure (a #!rest) (list b)) (list a) #!rest list)
-			   (list b))))
-
-(append-map!
- (forall (a b) (procedure! append-map! ((procedure (a #!rest) (list b)) (list a) #!rest list)
-			   (list b))))
-
-(append-reverse (procedure! append-reverse (list list) list))
-(append-reverse! (procedure! append-reverse! (list list) list))
-(break (forall (a) (procedure! break ((procedure (a) *) (list a)) (list a) (list a))))
-(break! (forall (a) (procedure! break! ((procedure (a) *) (list a)) (list a) (list a))))
-(car+cdr (forall (a b) (procedure! car+cdr ((pair a b)) a b)))
-(circular-list (procedure circular-list (#!rest) list))
-
-(circular-list? (procedure circular-list? (*) boolean)
-		((null) (let ((#(tmp) #(1))) '#f)))
-
-(concatenate (procedure! concatenate ((list list)) list))
-(concatenate! (procedure! concatenate! ((list list)) list))
-(cons* (forall (a) (procedure cons* (a #!rest) (pair a *))))
-(count (forall (a) (procedure! count ((procedure (a #!rest) *) (list a) #!rest list) fixnum)))
-(delete (forall (a b) (procedure! delete (a (list b) #!optional (procedure (a *) *)) (list b))))
-(delete! (forall (a b) (procedure! delete! (a (list b) #!optional (procedure (a *) *)) (list b))))
-
-(delete-duplicates
- (forall (a) (procedure! delete-duplicates ((list a) #!optional (procedure (a *) *)) (list a))))
-
-(delete-duplicates!
- (forall (a) (procedure! delete-duplicates! ((list a) #!optional (procedure (a *) *)) (list a))))
-
-(dotted-list? (procedure dotted-list? (*) boolean))
-(drop (forall (a) (procedure! drop ((list a) fixnum) (list a))))
-(drop-right (forall (a) (procedure! drop-right ((list a) fixnum) (list a))))
-(drop-right! (forall (a) (procedure! drop-right! ((list a) fixnum) (list a))))
-(drop-while (forall (a) (procedure! drop-while ((procedure (a) *) (list a)) (list a))))
-(eighth (procedure! eighth (pair) *))
-
-(every
- (forall (a) (procedure! every ((procedure (a #!rest) *) (list a) #!rest list) *)))
-
-(fifth (procedure! fifth (pair) *))
-(filter (forall (a) (procedure! filter ((procedure (a) *) (list a)) (list a))))
-(filter! (forall (a) (procedure! filter! ((procedure (a) *) (list a)) (list a))))
-
-(filter-map
- (forall (a b) (procedure! filter-map ((procedure (a #!rest) b) (list a) #!rest list) (list b))))
-
-(find (forall (a) (procedure! find ((procedure (a) *) (list a)) *)))
-(find-tail (forall (a) (procedure! find-tail ((procedure (a) *) (list a)) *)))
-
-(first (forall (a) (procedure! first ((pair a *)) a))
-       ((pair) (##core#inline "C_u_i_car" #(1))))
-
-(fold (procedure! fold ((procedure (* #!rest) *) * #!rest list) *)) ;XXX
-(fold-right (procedure! fold-right ((procedure (* #!rest) *) * #!rest list) *)) ;XXX
-
-(fourth (forall (a) (procedure! fourth ((pair * (pair * (pair * (pair a *))))) a))
-	(((pair * (pair * (pair * (pair * *)))))
-	 (##core#inline "C_u_i_car" 
-			(##core#inline "C_u_i_cdr"
-				       (##core#inline "C_u_i_cdr"
-						      (##core#inline "C_u_i_cdr" #(1)))))))
-
-(iota (procedure! iota (fixnum #!optional fixnum fixnum) (list number)))
-(last (procedure! last (pair) *))
-(last-pair (procedure! last-pair (pair) *))
-(length+ (procedure! length+ (list) *))
-(list-copy (forall (a) (procedure! list-copy ((list a)) (list a))))
-(list-index (forall (a) (procedure! list-index ((procedure (a #!rest) *) (list a) #!rest list) *)))
-(list-tabulate (forall (a) (procedure! list-tabulate (fixnum (procedure (fixnum) a)) (list a))))
-(list= (procedure! list= (#!rest list) boolean))
-
-(lset-adjoin 
- (forall (a) (procedure! lset-adjoin ((procedure (a a) *) (list a) #!rest a) (list a))))
-
-(lset-diff+intersection
- (forall (a)
-	 (procedure! lset-diff+intersection ((procedure (a a) *) (list a) #!rest (list a))
-		     (list a))))
-
-(lset-diff+intersection! 
- (forall (a)
-	 (procedure! lset-diff+intersection! ((procedure (a a) *) (list a) #!rest (list a))
-		     (list a))))
-
-(lset-difference
- (forall (a) (procedure! lset-difference ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
-
-(lset-difference!
- (forall (a) (procedure! lset-difference! ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
-
-(lset-intersection
- (forall (a) (procedure! lset-intersection ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
-
-(lset-intersection!
- (forall (a) (procedure! lset-intersection! ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
-
-(lset-union
- (forall (a) (procedure! lset-union ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
-
-(lset-union!
- (forall (a) (procedure! lset-union! ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
-
-(lset-xor
- (forall (a) (procedure! lset-xor ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
-
-(lset-xor!
- (forall (a) (procedure! lset-xor! ((procedure (a a) *) (list a) #!rest (list a)) (list a))))
-
-(lset<=
- (forall (a) (procedure! lset<= ((procedure (a a) *) (list a) #!rest (list a)) boolean)))
-
-(lset=
- (forall (a) (procedure! lset= ((procedure (a a) *) (list a) #!rest (list a)) boolean)))
-
-;; see note about "make-vector", above
-(make-list (forall (a) (procedure! make-list (fixnum #!optional a) list)))
-
-(map!
- (forall (a b) (procedure! map! ((procedure (a #!rest) b) (list a) #!rest list) (list b))))
-
-(map-in-order
- (forall 
-  (a b)
-  (procedure! map-in-order ((procedure (a #!rest) b) (list a) #!rest list) (list b))))
-
-(ninth (procedure! ninth (pair) *))
-
-(not-pair? (procedure not-pair? (*) boolean)
-	   ((pair) (let ((#(tmp) #(1))) '#f))
-	   (((not (or pair list))) (let ((#(tmp) #(1))) '#t)))
-
-(null-list? (procedure! null-list? (list) boolean)
-	    ((pair) (let ((#(tmp) #(1))) '#f))
-	    ((list) (let ((#(tmp) #(1))) '#f))
-	    ((null) (let ((#(tmp) #(1))) '#t)))
-
-(pair-fold (procedure! pair-fold (procedure * list #!rest list) *)) ;XXX do this
-(pair-fold-right (procedure! pair-fold-right (procedure * list #!rest list) *)) ;XXX
-(pair-for-each (procedure! pair-for-each ((procedure (#!rest) . *) list #!rest list) undefined)) ;XXX
-(partition (forall (a) (procedure! partition ((procedure (a) *) (list a)) (list a) (list a))))
-(partition! (forall (a) (procedure! partition! ((procedure (a) *) (list a)) (list a) (list a))))
-
-(proper-list? (procedure proper-list? (*) boolean)
-	      ((null) (let ((#(tmp) #(1))) '#t)))
-
-(reduce (procedure! reduce ((procedure (* *) *) * list) *)) ;XXX
-(reduce-right (procedure! reduce-right ((procedure (* *) *) * list) *)) ;XXX
-(remove (forall (a) (procedure! remove ((procedure (a) *) (list a)) (list a))))
-(remove! (forall (a) (procedure! remove! ((procedure (a) *) (list a)) (list a))))
-(reverse! (forall (a) (procedure! reverse! ((list a)) (list a))))
-
-(second (forall (a) (procedure! second ((pair * (pair a *))) a))
-	(((pair * (pair * *))) (##core#inline "C_u_i_car" (##core#inline "C_u_i_cdr" #(1)))))
-
-(seventh (procedure! seventh (pair) *))
-(sixth (procedure! sixth (pair) *))
-(span (forall (a) (procedure! span ((procedure (a) *) (list a)) (list a) (list a))))
-(span! (forall (a) (procedure! span! ((procedure (a) *) (list a)) (list a) (list a))))
-(split-at (forall (a) (procedure! split-at ((list a) fixnum) (list a) (list a))))
-(split-at! (forall (a) (procedure! split-at! ((list a) fixnum) (list a) (list a))))
-(take (forall (a) (procedure! take ((list a) fixnum) (list a))))
-(take! (forall (a) (procedure! take! ((list a) fixnum) (list a))))
-(take-right (forall (a) (procedure! take-right ((list a) fixnum) (list a))))
-(take-while (forall (a) (procedure! take-while ((procedure (a) *) (list a)) (list a))))
-(take-while! (forall (a) (procedure! take-while! ((procedure (a) *) (list a)) (list a))))
-(tenth (procedure! tenth (pair) *))
-
-(third (forall (a) (procedure! third ((pair * (pair * (pair a *)))) a))
-       (((pair * (pair * (pair * *))))
-	(##core#inline "C_u_i_car" 
-		       (##core#inline "C_u_i_cdr" (##core#inline "C_u_i_cdr" #(1))))))
-
-(unfold (procedure! unfold ((procedure (*) *) (procedure (*) *) (procedure (*) *) * #!optional (procedure (*) *)) *)) ;XXX
-(unfold-right (procedure! unfold-right ((procedure (*) *) (procedure (*) *) (procedure (*) *) * #!optional (procedure (*) *)) *)) ;XXX
-(unzip1 (forall (a) (procedure! unzip1 ((list (pair a *))) (list a))))
-(unzip2 (forall (a b) (procedure! unzip2 ((list (pair a (pair b *)))) (list a) (list b))))
-
-(unzip3
- (forall (a b c) (procedure! unzip3 ((list (pair a (pair b (pair c *))))) (list a) (list b) (list c))))
-
-(unzip4 (procedure! unzip4 (list) list list list list)) ; yeah
-(unzip5 (procedure! unzip5 (list) list list list list list)) ; yeah, too
-(xcons (forall (a b) (procedure xcons (a b) (pair b a))))
-(zip (forall (a) (procedure! zip ((list a) #!rest list) (list (pair a *)))))
-
-
-;; srfi-13
-
-(check-substring-spec (procedure! check-substring-spec (* string fixnum fixnum) undefined))
-(kmp-step (procedure! kmp-step (string vector char fixnum (procedure (char char) *) fixnum) fixnum))
-(make-kmp-restart-vector (procedure! make-kmp-restart-vector (string #!optional (procedure (* *) *) fixnum fixnum) vector))
-
-(string-any
- (procedure!
-  string-any
-  ((or char (struct char-set) (procedure (char) *)) string #!optional fixnum fixnum)
-  boolean))
-
-(string-append/shared (procedure! string-append/shared (#!rest string) string)
-		      ((string string) (##sys#string-append #(1) #(2))))
-
-(string-ci< (procedure! string-ci< (string string #!optional fixnum fixnum) boolean)
-	    ((string string) (string-ci<? #(1) #(2))))
-
-(string-ci<= (procedure! string-ci<= (string string #!optional fixnum fixnum) boolean)
-	     ((string string) (string-ci<=? #(1) #(2))))
-
-(string-ci<> (procedure! string-ci<> (string string #!optional fixnum fixnum) boolean)
-	     ((string string) (not (##core#inline "C_i_string_ci_equal_p" #(1) #(2)))))
-
-(string-ci= (procedure! string-ci= (string string #!optional fixnum fixnum) boolean)
-	    ((string string) (##core#inline "C_i_string_ci_equal_p" #(1) #(2))))
-
-(string-ci> (procedure! string-ci> (string string #!optional fixnum fixnum) boolean)
-	    ((string string) (string-ci>? #(1) #(2))))
-
-(string-ci>= (procedure! string-ci>= (string string #!optional fixnum fixnum) boolean)
-	     ((string string) (string-ci>=? #(1) #(2))))
-
-(string-compare (procedure! string-compare (string string (procedure (fixnum) *) (procedure (fixnum) *) (procedure (fixnum) *) #!optional fixnum fixnum fixnum fixnum) *))
-(string-compare-ci (procedure! string-compare (string string (procedure (fixnum) *) (procedure (fixnum) *) (procedure (fixnum) *) #!optional fixnum fixnum fixnum fixnum) *))
-(string-concatenate (procedure! string-concatenate ((list string)) string))
-(string-concatenate-reverse (procedure! string-concatenate-reverse ((list string) #!optional string fixnum) string))
-(string-concatenate-reverse/shared (procedure! string-concatenate-reverse/shared ((list string) #!optional string fixnum) string))
-(string-concatenate/shared (procedure! string-concatenate/shared ((list string)) string))
-(string-contains (procedure! string-contains (string string #!optional fixnum fixnum fixnum fixnum) (or fixnum boolean)))
-(string-contains-ci (procedure! string-contains-ci (string string #!optional fixnum fixnum fixnum fixnum) (or fixnum boolean)))
-(string-copy (procedure! string-copy (string #!optional fixnum fixnum) string))
-(string-copy! (procedure! string-copy! (string fixnum string #!optional fixnum fixnum) undefined))
-(string-count (procedure! string-count (string * #!optional fixnum fixnum) fixnum))
-(string-delete (procedure! string-delete (* string #!optional fixnum fixnum) string))
-(string-downcase (procedure! string-downcase (string #!optional fixnum fixnum) string))
-(string-downcase! (procedure! string-downcase! (string #!optional fixnum fixnum) string))
-(string-drop (procedure! string-drop (string fixnum) string))
-(string-drop-right (procedure! string-drop-right (string fixnum) string))
-
-(string-every
- (procedure!
-  string-every
-  ((or char (struct char-set) (procedure (char) *)) string #!optional fixnum fixnum) 
-  boolean))
-
-(string-fill! (procedure! string-fill! (string char #!optional fixnum fixnum) string))
-
-(string-filter
- (procedure! 
-  string-filter
-  ((or char (struct char-set) (procedure (char) *)) string #!optional fixnum fixnum) 
-  string))
-
-(string-fold (procedure! string-fold ((procedure (char *) *) * string #!optional fixnum fixnum) *)) ;XXX
-
-(string-fold-right (procedure! string-fold-right ((procedure (char *) *) * string #!optional fixnum fixnum) *)) ;XXX
-(string-for-each (procedure! string-for-each ((procedure (char) . *) string #!optional fixnum fixnum) undefined))
-(string-for-each-index (procedure! string-for-each-index ((procedure (fixnum) . *) string #!optional fixnum fixnum) undefined))
-
-(string-index
- (procedure! 
-  string-index
-  (string (or char (struct char-set) (procedure (char) *)) #!optional fixnum fixnum)
-  (or fixnum boolean)))
-
-(string-index-right
- (procedure! 
-  string-index-right
-  (string (or char (struct char-set) (procedure (char) *)) #!optional fixnum fixnum)
-  (or fixnum boolean)))
-
-(string-join (procedure! string-join (list #!optional string symbol) string))
-(string-kmp-partial-search (procedure! string-kmp-partial-search (string vector string fixnum #!optional (procedure (char char) *) fixnum fixnum fixnum) fixnum))
-(string-map (procedure! string-map ((procedure (char) char) string #!optional fixnum fixnum) string))
-(string-map! (procedure! string-map! ((procedure (char) char) string #!optional fixnum fixnum) string))
-
-(string-null? (procedure! string-null? (string) boolean)
-	      ((string) (##core#inline "C_zero_length_p" #(1))))
-
-(string-pad (procedure! string-pad (string fixnum #!optional char fixnum fixnum) string))
-(string-pad-right (procedure! string-pad-right (string fixnum #!optional char fixnum fixnum) string))
-(string-parse-final-start+end (procedure! string-parse-final-start+end (procedure string #!rest) . *))
-(string-parse-start+end (procedure! string-parse-start+end (procedure string #!rest) . *))
-(string-prefix-ci? (procedure! string-prefix-ci? (string string #!optional fixnum fixnum fixnum fixnum) boolean))
-(string-prefix-length (procedure! string-prefix-length (string string #!optional fixnum fixnum fixnum fixnum) fixnum))
-(string-prefix-length-ci (procedure! string-prefix-length-ci (string string #!optional fixnum fixnum fixnum fixnum) fixnum))
-(string-prefix? (procedure! string-prefix? (string string #!optional fixnum fixnum fixnum fixnum) boolean))
-(string-replace (procedure! string-replace (string string fixnum fixnum #!optional fixnum fixnum) string))
-(string-reverse (procedure! string-reverse (string #!optional fixnum fixnum) string))
-(string-reverse! (procedure! string-reverse! (string #!optional fixnum fixnum) string))
-
-(string-skip
- (procedure! 
-  string-skip
-  (string (or char (struct char-set) (procedure (char) *)) #!optional fixnum fixnum)
-  (or fixnum boolean)))
-
-(string-skip-right
- (procedure! 
-  string-skip-right
-  (string (or char (struct char-set) (procedure (char) *)) #!optional fixnum fixnum)
-  (or fixnum boolean)))
-
-(string-suffix-ci? (procedure! string-suffix-ci? (string string #!optional fixnum fixnum fixnum fixnum) boolean))
-(string-suffix-length (procedure! string-suffix-length (string string #!optional fixnum fixnum fixnum fixnum) fixnum))
-(string-suffix-length-ci (procedure! string-suffix-length-ci (string string #!optional fixnum fixnum fixnum fixnum) fixnum))
-(string-suffix? (procedure! string-suffix? (string string #!optional fixnum fixnum fixnum fixnum) boolean))
-(string-tabulate (procedure! string-tabulate ((procedure (fixnum) char) fixnum) string))
-(string-take (procedure! string-take (string fixnum) string))
-(string-take-right (procedure! string-take-right (string fixnum) string))
-(string-titlecase (procedure! string-titlecase (string #!optional fixnum fixnum) string))
-(string-titlecase! (procedure! string-titlecase! (string #!optional fixnum fixnum) string))
-
-(string-tokenize
- (procedure! string-tokenize (string #!optional (struct char-set) fixnum fixnum) list))
-
-(string-trim
- (procedure! 
-  string-trim
-  (string #!optional (or char (struct char-set) (procedure (char) *)) fixnum fixnum) 
-  string))
-
-(string-trim-both
- (procedure! 
-  string-trim-both
-  (string #!optional (or char (struct char-set) (procedure (char) *)) fixnum fixnum) 
-  string))
-
-(string-trim-right
- (procedure! 
-  string-trim-right
-  (string #!optional (or char (struct char-set) (procedure (char) *)) fixnum fixnum) 
-  string))
-
-(string-unfold (procedure! string-unfold (procedure procedure procedure * #!optional * procedure) string)) ;XXX
-(string-unfold-right (procedure! string-unfold-right (procedure procedure procedure * #!optional * procedure) string)) ;XXX
-(string-upcase (procedure! string-upcase (string #!optional fixnum fixnum) string))
-(string-upcase! (procedure! string-upcase! (string #!optional fixnum fixnum) string))
-(string-xcopy! (procedure! string-xcopy! (string string string fixnum #!optional fixnum fixnum fixnum) string))
-
-(string< (procedure! string< (string string #!optional fixnum fixnum fixnum fixnum) boolean)
-	 ((string string) (string<? #(1) #(2))))
-
-(string<= (procedure! string<= (string string #!optional fixnum fixnum fixnum fixnum) boolean)
-	  ((string string) (string<=? #(1) #(2))))
-
-(string<> (procedure! string<> (string string #!optional fixnum fixnum fixnum fixnum) boolean)
-	  ((string string) (not (##core#inline "C_i_string_equal_p" #(1) #(2)))))
-
-(string= (procedure! string= (string string #!optional fixnum fixnum fixnum fixnum) boolean)
-	 ((string string) (##core#inline "C_i_string_equal_p" #(1) #(2))))
-
-(string> (procedure! string> (string string #!optional fixnum fixnum fixnum fixnum) boolean)
-	 ((string string) (string>? #(1) #(2))))
-
-(string>= (procedure! string>= (string string #!optional fixnum fixnum fixnum fixnum) boolean)
-	  ((string string) (string>=? #(1) #(2))))
-
-(substring-spec-ok? (procedure! substring-spec-ok? (string fixnum fixnum) boolean))
-(substring/shared (procedure! substring/shared (string fixnum #!optional fixnum) string))
-(xsubstring (procedure! xsubstring (string fixnum #!optional fixnum fixnum fixnum) string))
-
-
-;; srfi-14
-
-(->char-set (procedure ->char-set (*) (struct char-set))
-	    (((struct char-set)) #(1))
-	    ((string) (string->char-set #(1)))
-	    ((char) (char-set #(1))))
-
-(char-set (procedure! char-set (#!rest char) (struct char-set)))
-(char-set->list (procedure! char-set->list ((struct char-set)) list))
-(char-set->string (procedure! char-set->string ((struct char-set)) string))
-(char-set-adjoin (procedure! char-set-adjoin ((struct char-set) #!rest char) (struct char-set)))
-(char-set-adjoin! (procedure! char-set-adjoin! ((struct char-set) #!rest char) (struct char-set)))
-(char-set-any (procedure! char-set-any ((procedure (char) *) (struct char-set)) *))
-(char-set-complement (procedure! char-set-complement ((struct char-set)) (struct char-set)))
-(char-set-complement! (procedure! char-set-complement! ((struct char-set)) (struct char-set)))
-(char-set-contains? (procedure! char-set-contains? ((struct char-set) char) boolean))
-(char-set-copy (procedure! char-set-copy ((struct char-set)) (struct char-set)))
-(char-set-count (procedure! char-set-count ((procedure (char) *) (struct char-set)) fixnum))
-(char-set-cursor (procedure! char-set-cursor ((struct char-set)) fixnum))
-(char-set-cursor-next (procedure! char-set-cursor-next ((struct char-set) fixnum) fixnum))
-(char-set-delete (procedure! char-set-delete ((struct char-set) #!rest char) (struct char-set)))
-(char-set-delete! (procedure! char-set-delete! ((struct char-set) #!rest char) (struct char-set)))
-(char-set-diff+intersection (procedure! char-set-diff+intersection ((struct char-set) #!rest (struct char-set)) (struct char-set) (struct char-set)))
-(char-set-diff+intersection! (procedure! char-set-diff+intersection! ((struct char-set) #!rest (struct char-set)) (struct char-set) (struct char-set)))
-(char-set-difference (procedure! char-set-difference ((struct char-set) #!rest (struct char-set)) (struct char-set)))
-(char-set-difference! (procedure! char-set-difference! ((struct char-set) #!rest (struct char-set)) (struct char-set)))
-(char-set-every (procedure! char-set-every ((procedure (char) *) (struct char-set)) boolean))
-(char-set-filter (procedure! char-set-filter ((procedure (char) *) (struct char-set) #!optional (struct char-set)) (struct char-set)))
-(char-set-filter! (procedure! char-set-filter! ((procedure (char) *) (struct char-set) #!optional (struct char-set)) (struct char-set)))
-(char-set-fold (procedure! char-set-fold ((procedure (char *) *) * (struct char-set)) *))
-(char-set-for-each (procedure! char-set-for-each ((procedure (char) . *) (struct char-set)) undefined))
-(char-set-hash (procedure! char-set-hash ((struct char-set) #!optional number) number))
-(char-set-intersection (procedure! char-set-intersection (#!rest (struct char-set)) (struct char-set)))
-(char-set-intersection! (procedure! char-set-intersection! (#!rest (struct char-set)) (struct char-set)))
-(char-set-map (procedure! char-set-map ((procedure (char) char) (struct char-set)) (struct char-set)))
-(char-set-ref (procedure! char-set-ref ((struct char-set) fixnum) char))
-(char-set-size (procedure! char-set-size ((struct char-set)) fixnum))
-(char-set-unfold (procedure! char-set-unfold (procedure procedure procedure * #!optional (struct char-set)) (struct char-set)))
-(char-set-unfold! (procedure! char-set-unfold! (procedure procedure procedure * (struct char-set)) (struct char-set)))
-(char-set-union (procedure! char-set-union (#!rest (struct char-set)) (struct char-set)))
-(char-set-union! (procedure! char-set-union! (#!rest (struct char-set)) (struct char-set)))
-(char-set-xor (procedure! char-set-xor (#!rest (struct char-set)) (struct char-set)))
-(char-set-xor! (procedure! char-set-xor! (#!rest (struct char-set)) (struct char-set)))
-(char-set:ascii (struct char-set))
-(char-set:blank (struct char-set))
-(char-set:digit (struct char-set))
-(char-set:empty (struct char-set))
-(char-set:full (struct char-set))
-(char-set:graphic (struct char-set))
-(char-set:hex-digit (struct char-set))
-(char-set:iso-control (struct char-set))
-(char-set:letter (struct char-set))
-(char-set:letter+digit (struct char-set))
-(char-set:lower-case (struct char-set))
-(char-set:printing (struct char-set))
-(char-set:punctuation (struct char-set))
-(char-set:symbol (struct char-set))
-(char-set:title-case (struct char-set))
-(char-set:upper-case (struct char-set))
-(char-set:whitespace (struct char-set))
-(char-set<= (procedure! char-set<= (#!rest (struct char-set)) boolean))
-(char-set= (procedure! char-set= (#!rest (struct char-set)) boolean))
-
-(char-set? (procedure? (struct char-set) char-set? (*) boolean))
-
-(end-of-char-set? (procedure! end-of-char-set? (fixnum) boolean))
-(list->char-set (procedure! list->char-set (list #!optional (struct char-set)) (struct char-set)))
-(list->char-set! (procedure! list->char-set! (list #!optional (struct char-set)) (struct char-set)))
-(string->char-set (procedure! string->char-set (string #!optional (struct char-set)) (struct char-set)))
-(string->char-set! (procedure! string->char-set! (string #!optional (struct char-set)) (struct char-set)))
-(ucs-range->char-set (procedure! ucs-range->char-set (fixnum fixnum #!optional * (struct char-set)) (struct char-set)))
-(ucs-range->char-set! (procedure! ucs-range->char-set! (fixnum fixnum #!optional * (struct char-set)) (struct char-set)))
-
-
-;; srfi-18
-
-(abandoned-mutex-exception? (procedure abandoned-mutex-exception? (*) boolean))
-(condition-variable-broadcast! (procedure! condition-variable-broadcast! ((struct condition-variable)) undefined))
-(condition-variable-name (procedure! condition-variable-name ((struct condition-variable)) *))
-(condition-variable-signal! (procedure! condition-variable-signal! ((struct condition-variable)) undefined))
-(condition-variable-specific (procedure! condition-variable-specific ((struct condition-variable)) *))
-(condition-variable-specific-set! (procedure! condition-variable-specific-set! ((struct condition-variable) *) undefined))
-
-(condition-variable? (procedure? (struct condition-variable) condition-variable? (*) 
-				 boolean))
-
-(current-thread (procedure current-thread () (struct thread))) ;XXX
-
-(current-time (procedure current-time () (struct time)))
-(join-timeout-exception? (procedure join-timeout-exception? (*) boolean))
-(make-condition-variable (procedure make-condition-variable (#!optional *) (struct condition-variable)))
-(make-mutex (procedure make-mutex (#!optional *) (struct mutex)))
-(make-thread (procedure! make-thread ((procedure () . *) #!optional *) (struct thread)))
-(milliseconds->time deprecated)
-(mutex-lock! (procedure! mutex-lock! ((struct mutex) #!optional * (struct thread)) boolean))
-
-(mutex-name (procedure! mutex-name ((struct mutex)) *)
-	    (((struct mutex)) (##sys#slot #(1) '1)))
-
-(mutex-specific (procedure! mutex-specific ((struct mutex)) *)
-		(((struct mutex)) (##sys#slot #(1) '6)))
-
-(mutex-specific-set! (procedure! mutex-specific-set! ((struct mutex) *) undefined)
-		     (((struct mutex) *) (##sys#setslot #(1) '6 #(2))))
-
-(mutex-state (procedure! mutex-state ((struct mutex)) symbol))
-(mutex-unlock! (procedure! mutex-unlock! ((struct mutex) #!optional (struct condition-variable) *) undefined))
-
-(mutex? (procedure? (struct mutex) mutex? (*) boolean))
-
-(raise (procedure raise (*) noreturn))
-(seconds->time (procedure! seconds->time (number) (struct time)))
-(terminated-thread-exception? (procedure terminated-thread-exception? (*) boolean))
-(thread-join! (procedure! thread-join! ((struct thread) #!optional * *) *))
-
-(thread-name (procedure! thread-name ((struct thread)) *)
-	     (((struct thread)) (##sys#slot #(1) '6)))
-
-(thread-quantum (procedure! thread-quantum ((struct thread)) fixnum)
-		(((struct thread)) (##sys#slot #(1) '9)))
-
-(thread-quantum-set! (procedure! thread-quantum-set! ((struct thread) fixnum) undefined))
-(thread-resume! (procedure! thread-resume! ((struct thread)) undefined))
-(thread-signal! (procedure! thread-signal! ((struct thread) *) undefined))
-(thread-sleep! (procedure thread-sleep! (*) undefined))
-
-(thread-specific (procedure! thread-specific ((struct thread)) *)
-		 (((struct thread)) (##sys#slot #(1) '10)))
-
-(thread-specific-set! (procedure! thread-specific-set! ((struct thread) *) undefined)
-		      (((struct thread) *) (##sys#setslot #(1) '10 #(2))))
-
-(thread-start! (procedure! thread-start! ((or (struct thread) (procedure () . *))) (struct thread)))
-
-(thread-state (procedure! thread-state ((struct thread)) symbol)
-	      (((struct thread)) (##sys#slot #(1) '3)))
-
-(thread-suspend! (procedure! thread-suspend! ((struct thread)) undefined))
-(thread-terminate! (procedure! thread-terminate! ((struct thread)) undefined))
-(thread-wait-for-i/o! (procedure! thread-wait-for-i/o! (fixnum #!optional symbol) undefined))
-(thread-yield! (procedure thread-yield! () undefined))
-
-(thread? (procedure? (struct thread) thread? (*) boolean))
-
-(time->milliseconds deprecated)
-(time->seconds (procedure! time->seconds ((struct time)) number))
-
-(time? (procedure? (struct time) time? (*) boolean))
-
-(uncaught-exception-reason (procedure! uncaught-exception-reason ((struct condition)) *))
-(uncaught-exception? (procedure uncaught-exception? (*) boolean))
-
-
-;; srfi-4
-
-(blob->f32vector (procedure! blob->f32vector (blob) (struct f32vector)))
-(blob->f32vector/shared (procedure! blob->f32vector/shared (blob) (struct f32vector)))
-(blob->f64vector (procedure! blob->f64vector (blob) (struct f64vector)))
-(blob->f64vector/shared (procedure! blob->f64vector/shared (blob) (struct f64vector)))
-(blob->s16vector (procedure! blob->s16vector (blob) (struct s16vector)))
-(blob->s16vector/shared (procedure! blob->s16vector/shared (blob) (struct s16vector)))
-(blob->s32vector (procedure! blob->s32vector (blob) (struct s32vector)))
-(blob->s32vector/shared (procedure! blob->s32vector/shared (blob) (struct s32vector)))
-(blob->s8vector (procedure! blob->s8vector (blob) (struct u8vector)))
-(blob->s8vector/shared (procedure! blob->s8vector/shared (blob) (struct u8vector)))
-(blob->u16vector (procedure! blob->u16vector (blob) (struct u16vector)))
-(blob->u16vector/shared (procedure! blob->u16vector/shared (blob) (struct u16vector)))
-(blob->u32vector (procedure! blob->u32vector (blob) (struct u32vector)))
-(blob->u32vector/shared (procedure! blob->u32vector/shared (blob) (struct u32vector)))
-(blob->u8vector (procedure! blob->u8vector (blob) (struct u8vector)))
-(blob->u8vector/shared (procedure! blob->u8vector/shared (blob) (struct u8vector)))
-(f32vector (procedure! f32vector (#!rest number) (struct f32vector)))
-(f32vector->blob (procedure! f32vector->blob ((struct f32vector)) blob))
-(f32vector->blob/shared (procedure! f32vector->blob/shared ((struct f32vector)) blob))
-(f32vector->list (procedure! f32vector->list ((struct f32vector)) list))
-
-(f32vector-length (procedure! f32vector-length ((struct f32vector)) fixnum)
-		  (((struct f32vector)) (##core#inline "C_u_i_32vector_length" #(1))))
-
-(f32vector-ref (procedure! f32vector-ref ((struct f32vector) fixnum) float))
-(f32vector-set! (procedure! f32vector-set! ((struct f32vector) fixnum number) undefined))
-
-(f32vector? (procedure? (struct f32vector) f32vector? (*) boolean))
-
-(f64vector (procedure! f64vector (#!rest number) (struct f64vector)))
-(f64vector->blob (procedure! f64vector->blob ((struct f32vector)) blob))
-(f64vector->blob/shared (procedure! f64vector->blob/shared ((struct f64vector)) blob))
-(f64vector->list (procedure! f64vector->list ((struct f64vector)) blob))
-
-(f64vector-length (procedure! f64vector-length ((struct f64vector)) fixnum)
-		  (((struct f32vector)) (##core#inline "C_u_i_64vector_length" #(1))))
-
-(f64vector-ref (procedure! f64vector-ref ((struct f64vector) fixnum) float))
-(f64vector-set! (procedure! f64vector-set! ((struct f64vector) fixnum number) undefined))
-
-(f64vector? (procedure? (struct f64vector) f64vector? (*) boolean))
-
-(list->f32vector (procedure! list->f32vector ((list number)) (struct f32vector)))
-(list->f64vector (procedure! list->f64vector ((list number)) (struct f64vector)))
-(list->s16vector (procedure! list->s16vector ((list fixnum)) (struct s16vector)))
-(list->s32vector (procedure! list->s32vector ((list number)) (struct s32vector)))
-(list->s8vector (procedure! list->s8vector ((list fixnum)) (struct s8vector)))
-(list->u16vector (procedure! list->u16vector ((list fixnum)) (struct u16vector)))
-(list->u32vector (procedure! list->u32vector ((list number)) (struct u32vector)))
-(list->u8vector (procedure! list->u8vector ((list fixnum)) (struct u8vector)))
-(make-f32vector (procedure! make-f32vector (fixnum #!optional * * *) (struct f32vector)))
-(make-f64vector (procedure! make-f64vector (fixnum #!optional * * *) (struct f64vector)))
-(make-s16vector (procedure! make-s16vector (fixnum #!optional * * *) (struct s16vector)))
-(make-s32vector (procedure! make-s32vector (fixnum #!optional * * *) (struct s32vector)))
-(make-s8vector (procedure! make-s8vector (fixnum #!optional * * *) (struct s8vector)))
-(make-u16vector (procedure! make-u16vector (fixnum #!optional * * *) (struct u16vector)))
-(make-u32vector (procedure! make-u32vector (fixnum #!optional * * *) (struct u32vector)))
-(make-u8vector (procedure! make-u8vector (fixnum #!optional * * *) (struct u8vector)))
-(read-u8vector (procedure! read-u8vector (#!optional fixnum port) (struct u8vector)))
-(read-u8vector! (procedure! read-u8vector! (fixnum (struct u8vector) #!optional port fixnum) number))
-(release-number-vector (procedure release-number-vector (*) undefined))
-(s16vector (procedure! s16vector (#!rest fixnum) (struct s16vector)))
-(s16vector->blob (procedure! s16vector->blob ((struct s16vector)) blob))
-(s16vector->blob/shared (procedure! s16vector->blob/shared ((struct s16vector)) blob))
-(s16vector->list (procedure! s16vector->list ((struct s16vector)) (list fixnum)))
-
-(s16vector-length (procedure! s16vector-length ((struct s16vector)) fixnum)
-		  (((struct s16vector)) (##core#inline "C_u_i_16vector_length" #(1))))
-
-(s16vector-ref (procedure! s16vector-ref ((struct s16vector) fixnum) fixnum))
-(s16vector-set! (procedure! s16vector-set! ((struct s16vector) fixnum fixnum) undefined))
-
-(s16vector? (procedure? (struct s16vector) s16vector? (*) boolean))
-
-(s32vector (procedure! s32vector (#!rest number) (struct s32vector)))
-(s32vector->blob (procedure! s32vector->blob ((struct 32vector)) blob))
-(s32vector->blob/shared (procedure! s32vector->blob/shared ((struct s32vector)) blob))
-(s32vector->list (procedure! s32vector->list ((struct s32vector)) (list number)))
-
-(s32vector-length (procedure! s32vector-length ((struct s32vector)) fixnum)
-		  (((struct s32vector)) (##core#inline "C_u_i_32vector_length" #(1))))
-
-(s32vector-ref (procedure! s32vector-ref ((struct s32vector) fixnum) number))
-(s32vector-set! (procedure! s32vector-set! ((struct s32vector) fixnum number) undefined))
-
-(s32vector? (procedure? (struct s32vector) s32vector? (*) boolean))
-
-(s8vector (procedure! s8vector (#!rest fixnum) (struct s8vector)))
-(s8vector->blob (procedure! s8vector->blob ((struct s8vector)) blob))
-(s8vector->blob/shared (procedure! s8vector->blob/shared ((struct s8vector)) blob))
-(s8vector->list (procedure! s8vector->list ((struct s8vector)) (list fixnum)))
-
-(s8vector-length (procedure! s8vector-length ((struct s8vector)) fixnum)
-		 (((struct s8vector)) (##core#inline "C_u_i_8vector_length" #(1))))
-
-(s8vector-ref (procedure! s8vector-ref ((struct s8vector) fixnum) fixnum))
-(s8vector-set! (procedure! s8vector-set! ((struct s8vector) fixnum fixnum) undefined))
-
-(s8vector? (procedure? (struct s8vector) s8vector? (*) boolean))
-
-(subf32vector (procedure! subf32vector ((struct f32vector) fixnum fixnum) (struct f32vector)))
-(subf64vector (procedure! subf64vector ((struct f64vector) fixnum fixnum) (struct f64vector)))
-(subs16vector (procedure! subs16vector ((struct s16vector) fixnum fixnum) (struct s16vector)))
-(subs32vector (procedure! subs32vector ((struct s32vector) fixnum fixnum) (struct s32vector)))
-(subs8vector (procedure! subs8vector  ((struct s8vector) fixnum fixnum) (struct s8vector)))
-(subu16vector (procedure! subu16vector ((struct u16vector) fixnum fixnum) (struct u16vector)))
-(subu32vector (procedure! subu32vector ((struct u32vector) fixnum fixnum) (struct u32vector)))
-(subu8vector (procedure! subu8vector ((struct u8vector) fixnum fixnum) (struct u8vector)))
-(u16vector (procedure! u16vector (#!rest fixnum) (struct u16vector)))
-(u16vector->blob (procedure! u16vector->blob ((struct u16vector)) blob))
-(u16vector->blob/shared (procedure! u16vector->blob/shared ((struct u16vector)) blob))
-(u16vector->list (procedure! u16vector->list ((struct u16vector)) (list fixnum)))
-
-(u16vector-length (procedure! u16vector-length ((struct u16vector)) fixnum)
-		  (((struct u16vector)) (##core#inline "C_u_i_16vector_length" #(1))))
-
-(u16vector-ref (procedure! u16vector-ref ((struct u16vector) fixnum) fixnum))
-(u16vector-set! (procedure! u16vector-set! ((struct u16vector) fixnum fixnum) undefined))
-
-(u16vector? (procedure? (struct u16vector) u16vector? (*) boolean))
-
-(u32vector (procedure! u32vector (#!rest number) (struct u32vector)))
-(u32vector->blob (procedure! u32vector->blob ((struct u32vector)) blob))
-(u32vector->blob/shared (procedure! u32vector->blob/shared ((struct u32vector)) blob))
-(u32vector->list (procedure! u32vector->list ((struct u32vector)) (list number)))
-
-(u32vector-length (procedure! u32vector-length ((struct u32vector)) fixnum)
-		  (((struct u32vector)) (##core#inline "C_u_i_32vector_length" #(1))))
-
-(u32vector-ref (procedure! u32vector-ref ((struct u32vector) fixnum) number))
-(u32vector-set! (procedure! u32vector-set! ((struct u32vector) fixnum number) undefined))
-
-(u32vector? (procedure? (struct u32vector) u32vector? (*) boolean))
-
-(u8vector (procedure! u8vector (#!rest fixnum) (struct u8vector)))
-(u8vector->blob (procedure! u8vector->blob ((struct u8vector)) blob))
-(u8vector->blob/shared (procedure! u8vector->blob/shared ((struct u8vector)) blob))
-(u8vector->list (procedure! u8vector->list ((struct u8vector)) (list fixnum)))
-
-(u8vector-length (procedure! u8vector-length ((struct u8vector)) fixnum)
-		 (((struct u8vector)) (##core#inline "C_u_i_8vector_length" #(1))))
-
-(u8vector-ref (procedure! u8vector-ref ((struct u8vector) fixnum) fixnum))
-(u8vector-set! (procedure! u8vector-set! ((struct u8vector) fixnum fixnum) undefined))
-
-(u8vector? (procedure? (struct u8vector) u8vector? (*) boolean))
-
-(write-u8vector (procedure! write-u8vector ((struct u8vector) #!optional port fixnum fixnum) undefined))
-
-
-;; srfi-69
-
-(alist->hash-table (procedure! alist->hash-table ((list pair) #!rest) (struct hash-table)))
-(eq?-hash (procedure! eq?-hash (* #!optional fixnum) fixnum))
-(equal?-hash (procedure! equal?-hash (* #!optional fixnum) fixnum))
-(eqv?-hash (procedure! eqv?-hash (* #!optional fixnum) fixnum))
-(hash (procedure! hash (* #!optional fixnum) fixnum))
-(hash-by-identity (procedure! hash-by-identity (* #!optional fixnum) fixnum))
-(hash-table->alist (procedure! hash-table->alist ((struct hash-table)) (list pair)))
-(hash-table-clear! (procedure! hash-table-clear! ((struct hash-table)) undefined))
-(hash-table-copy (procedure! hash-table-copy ((struct hash-table)) (struct hash-table)))
-(hash-table-delete! (procedure! hash-table-delete! ((struct hash-table) *) boolean))
-(hash-table-equivalence-function (procedure! hash-table-equivalence-function ((struct hash-table)) (procedure (* *) *)))
-(hash-table-exists? (procedure! hash-table-exists? ((struct hash-table) *) boolean))
-(hash-table-fold (procedure! hash-table-fold ((struct hash-table) (procedure (* * *) *) *) *))
-(hash-table-for-each (procedure! hash-table-for-each ((struct hash-table) (procedure (* *) . *)) undefined))
-
-(hash-table-has-initial? (procedure! hash-table-has-initial? ((struct hash-table)) boolean)
-			 (((struct hash-table)) (##sys#slot #(1) '9))) ;XXX might return other than #t
-
-(hash-table-hash-function (procedure! hash-table-hash-function ((struct hash-table)) (procedure (* fixnum) fixnum))
-			  (((struct hash-table)) (##sys#slot #(1) '4)))
-
-(hash-table-initial (procedure! hash-table-initial ((struct hash-table)) *))
-(hash-table-keys (procedure! hash-table-keys ((struct hash-table)) list))
-(hash-table-map (procedure! hash-table-map ((struct hash-table) (procedure (* *) *)) list))
-
-(hash-table-max-load (procedure! hash-table-max-load ((struct hash-table)) fixnum)
-		     (((struct hash-table)) (##sys#slot #(1) '6)))
-
-(hash-table-merge (procedure! hash-table-merge ((struct hash-table) (struct hash-table)) (struct hash-table)))
-(hash-table-merge! (procedure! hash-table-merge! ((struct hash-table) (struct hash-table)) undefined))
-
-(hash-table-min-load (procedure! hash-table-min-load ((struct hash-table)) fixnum)
-		     (((struct hash-table)) (##sys#slot #(1) '5)))
-
-(hash-table-ref (procedure! hash-table-ref ((struct hash-table) * #!optional (procedure () *)) *))
-(hash-table-ref/default (procedure! hash-table-ref/default ((struct hash-table) * *) *))
-(hash-table-remove! (procedure! hash-table-remove! ((struct hash-table) (procedure (* *) *)) undefined))
-(hash-table-set! (procedure! hash-table-set! ((struct hash-table) * *) undefined))
-
-(hash-table-size (procedure! hash-table-size ((struct hash-table)) fixnum)
-		 (((struct hash-table)) (##sys#slot #(1) '2)))
-
-(hash-table-update! (procedure! hash-table-update! ((struct hash-table) * (procedure (*) *) #!optional (procedure () *)) *))
-(hash-table-update!/default (procedure! hash-table-update!/default ((struct hash-table) * (procedure (*) *) *) *))
-(hash-table-values (procedure! hash-table-values ((struct hash-table)) list))
-(hash-table-walk (procedure! hash-table-walk ((struct hash-table) (procedure (* *) . *)) undefined))
-
-(hash-table-weak-keys (procedure! hash-table-weak-keys ((struct hash-table)) boolean)
-		      (((struct hash-table)) (##sys#slot #(1) '7)))
-
-(hash-table-weak-values (procedure! hash-table-weak-values ((struct hash-table)) boolean)
-			(((struct hash-table)) (##sys#slot #(1) '8)))
-
-(hash-table? (procedure? (struct hash-table) hash-table? (*) boolean))
-
-;;XXX if we want to hardcode hash-default-bound here, we could rewrite the 1-arg case...
-;     (applies to all hash-functions)
-(keyword-hash (procedure! keyword-hash (* #!optional fixnum) fixnum))
-
-(make-hash-table (procedure! make-hash-table (#!rest) (struct hash-table)))
-(number-hash (procedure! number-hash (fixnum #!optional fixnum) fixnum))
-(object-uid-hash (procedure! object-uid-hash (* #!optional fixnum) fixnum))
-(symbol-hash (procedure! symbol-hash (symbol #!optional fixnum) fixnum))
-(string-hash (procedure! string-hash (string #!optional fixnum fixnum fixnum) number))
-(string-hash-ci (procedure! string-hash-ci (string #!optional fixnum fixnum fixnum) number))
-(string-ci-hash (procedure! string-ci-hash (string #!optional fixnum fixnum fixnum) number))
-
-
-;; tcp
-
-(tcp-abandon-port (procedure! tcp-abandon-port (port) undefined))
-(tcp-accept (procedure! tcp-accept ((struct tcp-listener)) port port))
-(tcp-accept-ready? (procedure! tcp-accept-ready? ((struct tcp-listener)) boolean))
-(tcp-accept-timeout (procedure! tcp-accept-timeout (#!optional number) number))
-(tcp-addresses (procedure! tcp-addresses (port) string string))
-(tcp-buffer-size (procedure! tcp-buffer-size (#!optional fixnum) fixnum))
-(tcp-close (procedure! tcp-close ((struct tcp-listener)) undefined))
-(tcp-connect (procedure! tcp-connect (string #!optional fixnum) port port))
-(tcp-connect-timeout (procedure! tcp-connect-timeout (#!optional number) number))
-(tcp-listen (procedure! tcp-listen (fixnum #!optional fixnum *) (struct tcp-listener)))
-
-(tcp-listener-fileno (procedure! tcp-listener-fileno ((struct tcp-listener)) fixnum)
-		     (((struct tcp-listener)) (##sys#slot #(1) '1)))
-
-(tcp-listener-port (procedure! tcp-listener-port ((struct tcp-listener)) fixnum))
-
-(tcp-listener? (procedure? (struct tcp-listener) tcp-listener? (*) boolean))
-
-(tcp-port-numbers (procedure! tcp-port-numbers (port) fixnum fixnum))
-(tcp-read-timeout (procedure! tcp-read-timeout (#!optional number) number))
-(tcp-write-timeout (procedure! tcp-write-timeout (#!optional number) number))
-
-
-;; utils
-
-(for-each-argv-line deprecated)
-(for-each-line deprecated)
-(read-all (procedure! read-all (#!optional (or port string)) string))
-(system* (procedure! system* (string #!rest) undefined))
-(qs (procedure! qs (string) string))
-(compile-file (procedure! compile-file (string #!rest) (or boolean string)))
-(compile-file-options (procedure! compile-file-options (#!optional (list string)) (list string)))
-(scan-input-lines (procedure! scan-input-lines (* #!optional port) *))
-(yes-or-no? (procedure! yes-or-no? (string #!rest) *))
Trap