On Thursday, January 14, 2016 at 7:27:57 AM UTC-8, Barry Margolin wrote:
> So? What are the *practical* uses for them? Like the example in the OP.
>
> Why make implementors go to the trouble of implementing all this type
> calculus if it will never be used?
Perhaps you cannot conceive how a more-complete type system would be useful because the CL type system is so little used in typical CL programming style (except of course in generic function class dispatch) because it is so weak.
One can check if an object is in the type (member a b c ...) simply be calling memberp, but that doesn't work if you want to pass an arbitrary type to a function that might want to compute unions or intersections. We modern CL programmers don't do these elegant things because they aren't guaranteed to work.
In fact about 25 years ago Duane and I figured out the sybtypep dispatches for and, or, not, eql, and member in a couple hours (and then a couple subsequent bugfixes :-).
Consider also that it is impossible in the CL type system (without satisfies) to declare the type for all square arrays. That would be useful in some mathematical code, but would require parameterized type specifiers.
The restriction that all type specifiers expand finitely is also limiting, but removing that restriction would require serious disruptive work in typical implementation.