While looking at CMUCL's complex type specifier, some questions came
up on the CMUCL mailing list.
First, what is
(subtypep '(simple-array (signed-byte 25) (*))
'(simple-array (signed-byte 20) (*)))
supposed to return? CMUCL returns T, T since both arrays are upgraded
to type (simple-array fixnum (*)). Clisp and ACL say the same.
The main question, though, is what is the type of (complex (eql 0))?
On the one hand, (eql 0) is a subtype of rational, so this could be
the same as (complex rational).
On the other hand, a complex whose components are both the rational 0
doesn't exist since such numbers must be converted to the rational 0.
Thus, (complex (eql 0)) is the empty type.
Thanks for any pointers,
Ray