Avoid use of the and, not and satisfies types in declarations, since type inference has problems with them. When these types do appear in a declaration, they are still checked precisely, but the type information is of limited use to the compiler.and types are effective as long as the intersection can be canonicalized to a type that doesn't use and. For example:
Using any of these type specifiers in a type test with typep ortypecase is fine, since as tests, these types can be translated into the and macro, the not function or a call to the satisfies predicate.