anchor.diff:  
   ;; Errors
   (define-condition nickname-already-in-use (error)
  +  ((text :initarg :text :reader text)))
  +
  +(define-condition message-parse-error (error)
     ((text :initarg :text :reader text)))
   
   ;; IRC message classes
  
positive.code: 
  ;; Server logging
  
  (defun log-server (server port nick channels)
    "Run logging loop for specified server."
    (handler-bind ((nickname-already-in-use
                    #'(lambda (c)
                        (declare (ignore c))
                        (invoke-restart 'change-nick))))
      (let ((sock (connect server port nick channels)))
        (do ((line
              (read-line (usocket:socket-stream sock) nil)
              (read-line (usocket:socket-stream sock) nil)))
            ((not line))
          (format t "Received: ~A~%" line)
          (if (string-prefix-p "PING" line)
              (send-pong sock line)
              (restart-case
                  (let ((message (parse-message line)))
                    (process message))
                (continue () nil)
                (change-nick ()
                  (progn
                    (setf nick (concatenate 'string nick "-"))
                    (set-nick sock nick)))))))))
  
negative.code:   (:documentation  "Process received message."))
  
  (defmethod process ((msg irc-message))
    (format t "~a~%" msg))
  
  ;; Numeric response
  (defclass numeric-message (irc-message)
  