;; Note: We could DECLAIM the ftype of the generic function here,
;; since ANSI specifies that we create it if it does not
;; exist. However, I chose not to, because I think it's more
;; useful to support a style of programming where every generic
;; function has an explicit DEFGENERIC and any typos in DEFMETHODs
;; are warned about. Otherwise
;;
;; (DEFGENERIC FOO-BAR-BLETCH (X))
;; (DEFMETHOD FOO-BAR-BLETCH ((X HASH-TABLE)) ..)
;; (DEFMETHOD FOO-BRA-BLETCH ((X SIMPLE-VECTOR)) ..)
;; (DEFMETHOD FOO-BAR-BLETCH ((X VECTOR)) ..)
;; (DEFMETHOD FOO-BAR-BLETCH ((X ARRAY)) ..)
;; (DEFMETHOD FOO-BAR-BLETCH ((X LIST)) ..)
;;
;; compiles without raising an error and runs without raising an
;; error (since SIMPLE-VECTOR cases fall through to VECTOR) but
;; still doesn't do what was intended. I hate that kind of bug
;; (code which silently gives the wrong answer), so we don't do a
;; DECLAIM here. -- WHN 20000229
Note the following comment in src/pcl/boot.lisp:
;; Note: We could DECLAIM the ftype of the generic function here,
;; since ANSI specifies that we create it if it does not
;; exist. However, I chose not to, because I think it's more
;; useful to support a style of programming where every generic
;; function has an explicit DEFGENERIC and any typos in DEFMETHODs
;; are warned about. Otherwise
;;
;; (DEFGENERIC FOO-BAR-BLETCH (X))
;; (DEFMETHOD FOO-BAR-BLETCH ((X HASH-TABLE)) ..)
;; (DEFMETHOD FOO-BRA-BLETCH ((X SIMPLE-VECTOR)) ..)
;; (DEFMETHOD FOO-BAR-BLETCH ((X VECTOR)) ..)
;; (DEFMETHOD FOO-BAR-BLETCH ((X ARRAY)) ..)
;; (DEFMETHOD FOO-BAR-BLETCH ((X LIST)) ..)
;;
;; compiles without raising an error and runs without raising an
;; error (since SIMPLE-VECTOR cases fall through to VECTOR) but
;; still doesn't do what was intended. I hate that kind of bug
;; (code which silently gives the wrong answer), so we don't do a
;; DECLAIM here. -- WHN 20000229