On Fri, Jun 1, 2012 at 12:20 PM, Stas Boukarev <stassats@gmail.com> wrote:
As per CLHS,
http://www.lispworks.com/documentation/lw50/CLHS/Body/04_bc.htm
"*" means unspecified part of the type specifier.

(declaim (ftype (function * integer) f))

(defun f (a)
 (1+ a))

and then (compile-file "file.lisp")

;;; LAMBDA: Illegal lambda list *.

Actually, the behavior you expect is undefined. While * is used to design parts of the type that are general, not specified, the situations in which * is used are very precisely marked by the Standard. Note for instance the difference between the grammar for the ARRAY type

http://www.lispworks.com/documentation/lw50/CLHS/Body/t_array.htm#array

and that of the FUNCTION type

http://www.lispworks.com/documentation/lw50/CLHS/Body/t_fn.htm

Only the former allows *

One could allow ECL to "support" * by ignoring all function declarations where it appears. I presume this would help with certain libraries that use these nonstandard types.

Juanjo

--
Instituto de Física Fundamental, CSIC
c/ Serrano, 113b, Madrid 28006 (Spain)
http://juanjose.garciaripoll.googlepages.com