Maybe this question is too general, nevertheless i'll try:
Is there any comprehensive guide on types in common lisp?

I'm kind of confused about this subject:

Why are non-primitive types declared in `make-array`'s `:element-type` are promoted to `t`? Is there any possibility for compile-time or runtime checks of the real declared type?

Why are CLOS slot defined types don't work as constraints, allowing to put value of any type into the slot? Again, what about the checks? 

The same for the functions' types declarations with `declare`.. Are they just the optimization hints to the compiler?

Also, can I use custom type specifiers, including `satisfies` in forementioned places for some robust checks, or they could only be used for explicit checks with `typep` e.t.c?

As you can see, i've got some mess in my head, so would really appreciate any neat guide (or a set of guides).

I'm on SBCL, but would also be glad to know about differences between implementations.