Subject: bug#77725: 31.0.50; Add support for types accepted by `cl-typep' to cl-generic?

From: David Ponce <[email-masked]>
Date: Thu, 8 May 2025 13:55:13 +0200

Just to let you know that I now switched my own libraries to use the
builtin derived types, and they work nicely :-)

I am following your last (great) changes on master, and I wonder if
the method `cl-generic-generalizers' in cl-lib:

   (cl-defmethod cl-generic-generalizers :extra "derived-types" (type)
     "Support for dispatch on derived types, i.e. defined with `cl-deftype'."
     (if (and (symbolp type) (cl-derived-type-class-p (cl--find-class type))
              ;; Make sure this derived type can be used without arguments.
              (let ((expander (get type 'cl-deftype-handler)))
                (and expander (with-demoted-errors "%S" (funcall expander)))))
         (cl--derived-type-generalizers type)
       (cl-call-next-method)))

Could now be simplified like this:

   (cl-defmethod cl-generic-generalizers :extra "derived-types" (type)
     "Support for dispatch on derived types, i.e. defined with `cl-deftype'."
     (if (and (symbolp type) (cl-derived-type-class-p (cl--find-class type))
              ;; Make sure this derived type can be used without arguments.
              (memq type cl--derived-type-list)) ;; <<<<<<<<<<<<<<<<<<<
         (cl--derived-type-generalizers type)
       (cl-call-next-method)))

Because `cl--define-derived-type' ensures that only type without
arguments are in `cl--derived-type-list'.  This will also ensure
that the type had no error (otherwise it would have been removed
from `cl--derived-type-list'), for free ;-)

Thanks!
David