anchor.diff:  (defvar %hook-table (make-hash-table :test #'equal)
     "")
   
  -(defun define-hook (name &key object type handlers disabled-handlers combination)
  +(defun define-hook (name &key object handlers disabled-handlers combination)
     "Create a globally accessible hook."
     (let ((hook
  -          (make-instance 'hook
  -                         :type type
  +          (make-instance 'hook          ; TODO: Handler class?
                            :handlers handlers
                            :disabled-handlers disabled-handlers
                            :combination combination)))
  
positive.code:          (name fn2)))))
  
  (defclass hook ()
    ((hook-type :initarg :hook-type
                :accessor hook-type
                :type symbol
                :initform t
                :documentation "
  The type of the handlers, typically (function (input types) output-type).")
     (handlers :initarg :handlers
               :accessor handlers
               :type list
  
negative.code: 
  ;; TODO: Because our hooks are typed, having both `run-hook` and
  ;; `run-hook-with-args' makes little sense.  Remove `run-hook-with-args'?
  ;; (defmethod run-hook-with-args ((hook hook) &rest args)
  ;;   (apply (combination hook) hook args))
  
  ;; TODO: Implement the following methods? Isn't the `combination' slot more general?
  ;; (defmethod run-hook-with-args-until-failure ((hook hook) &rest args)
  