The list form of the functiontype-specifier
can be used only for declaration and not for discrimination.
Every element of this type is
a function that accepts arguments of the
types
specified by the argj-types and returns values that are
members of the types specified by value-type. The
&optional, &rest, &key,
and &allow-other-keys
markers can appear in the list of argument types.
The type specifier provided
with &rest is the type
of each actual argument, not the type of the
corresponding variable.

Any form(f arg0 arg1 ...)
within the scope of
that declaration is equivalent to the following:

(the val-type (f (the arg0-type arg0) (the arg1-type arg1) ...))

That is, the consequences are undefined if any of the arguments are
not of the specified types or the result is not of the
specified type. In particular, if any argument is not of the
correct type, the result is not guaranteed to be of the
specified type.

This declaration has the interpretation that, within the scope of the
declaration, the consequences are unspecified if the value of
fn-valued-variable is called with arguments not of the specified
types; the value resulting from a valid call will be of type
val-type.

As with variable type declarations, nested declarations
imply intersections of types, as follows: