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

From: Stefan Monnier <[email-masked]>
Date: Sun, 27 Apr 2025 08:59:24 -0400

>> Exactly, I fully agree, the question is "how to keep track of the
>> children"?
>
> You could approximate it with `after-load-functions`.  Or, with the
> proposed patch, you could use an advice on `cl--type-deftype`.  Once you
> do that, you won't need to break circularity in `cl-types-of`.

I think what I was trying to say all along is:
the circularity you're trying to break doesn't come from `cl-deftype` or
`cl-types-of` but from your impredicative definition of `T1`.
So it'd be best to fix it there:

    (cl-deftype T1 ()
      `(satisfies ,(lambda (o) (memq 'T1 (cl-types-of o)))))

=>

    (defvar my-pending-T1-check (make-symbol "void"))

    (cl-deftype T1 ()
      `(satisfies
        ,(lambda (o)
           (and (not (eq o my-pending-T1-check))
                (let ((my-pending-T1-check o))
                  (memq 'T1 (cl-types-of o)))))))

- Stefan