anchor.diff:        (:replace
          (replace-it)))))
   
  +(defun call-with-if-failed-handler (if-failed function)
  +  "Call FUNCTION in a context according to IF-FAILED:
  +
  +  :ERROR - signal an error on failure.
  +
  +  NIL - return NIL on failure."
  +  (ecase if-failed
  +    (:error (funcall function))
  +    ((nil) (ignore-errors (funcall function)))))
  +
  +(defmacro with-if-failed-handler (if-failed-form &body forms)
  +  "Sugar for CALL-WITH-IF-FAILED-HANDLER."
  +  `(call-with-if-failed-handler ,if-failed-form (lambda () ,@forms)))
  +
    
   ;;;; Protocol classes and generic functions
  
positive.code: 
  (defgeneric open-connection (server-address &key if-failed)
    (:documentation "Open a connection to the server designated by the
  server address and return a connection object.
  
  IF-FAILED (default value: :ERROR) determines what to do on failure:
  
    :ERROR - signal an error.
  
    NIL - return NIL."))
  
  (defgeneric connection-server-address (connection)
    (:documentation "Return the server's address."))
  
negative.code:    (properties :initarg :properties :reader server-address-properties))
    (:documentation "Represents a standard server address with a
  transport name and a table of properties."))
  
  (defmethod open-connection :around ((server-address standard-server-address)
                                      &key (if-failed :error))
    (with-if-failed-handler if-failed
      (call-next-method)))
  
  (defmethod server-address-property (name (server-address standard-server-address)
                                      &key (if-does-not-exist :error))
  