anchor.diff:  (defpsmacro defun (name lambda-list &body body)
     "An extended defun macro that allows cool things like keyword arguments.
   lambda-list::=
  - (var* 
  -  [&optional {var | (var [init-form [supplied-p-parameter]])}*] 
  -  [&rest var] 
  -  [&key {var | ({var | (keyword-name var)} [init-form [supplied-p-parameter]])}* [&allow-other-keys]] 
  + (var*
  +  [&optional {var | (var [init-form [supplied-p-parameter]])}*]
  +  [&rest var]
  +  [&key {var | ({var | (keyword-name var)} [init-form [supplied-p-parameter]])}* [&allow-other-keys]]
     [&aux {var | (var [init-form])}*])"
     (if (symbolp name)
         `(defun-function ,name ,lambda-list ,@body)
  
positive.code:                              compiled-key)))
                 (cons key (compile-parenscript-form (ps-macroexpand val-expr)
                                                     :expecting :expression)))))))
    
  (define-ps-special-form instanceof (value type)
    `(js:instanceof ,(compile-parenscript-form value :expecting :expression)
                    ,(compile-parenscript-form type :expecting :expression)))
  
negative.code:          (init-form (if (listp spec) (second spec)))
           (supplied-p-var (if (listp spec) (third spec))))
      (values var init-form supplied-p-var)))
  
  (defun parse-aux-spec (spec)
    "Returns two values: variable and init-form"
    ;; [&aux {var | (var [init-form])}*])
  