anchor.diff:                                 (if (null service)
                                      (cons service-symb arglist)
                                      arglist))
  -         (invoke-rpc-method ,con-symb ,(if service `(quote ,service)
  -                                            service-symb)
  -                            (quote ,method)
  +         (invoke-rpc-method ,con-symb ,(etypecase service
  +                                                  (null service-symb)
  +                                                  (symbol `(quote ,service))
  +                                                  (string service))
  +                            ,(if (symbolp method)
  +                                 `(quote ,method)
  +                                 method)
                               ,passed-args
                               :notification ,notification)))))
  
positive.code:        (declare (ignore ,typespec-var))
         ,@body)))
  
  ;; TODO: allow strings for method and service
  ;; TODO: add typespecs for return value and arguments
  ;; Note: args is a list of lists, for providing typespecs in the
  ;; future.
  (defmacro define-rpc-method ((method &optional service  &key notification) &body args)
    (check-type method symbol)
    (check-type service (or symbol null) "a SYMBOL or NIL")
    (check-type notification boolean)
    (flet ((passed-arg-forms (args)
             (loop for a in args
  
negative.code: (declaim (ftype (function (id id list &key (:notification boolean)) rpc-call)
                  make-call-obj))
  (defun make-call-obj (service method parameters &key notification)
    (make-rpc-call :service (if (typep service 'string) service (symbol-name service))
                   :method (if (typep method 'string) method (symbol-name method))
                   :args parameters
                   :id (if notification
                           nil
  