anchor.diff:  (prove:subtest "Disable hook"
     (let* ((handler1 (next-hooks:make-handler-number->number #'add1))
            (handler2 (next-hooks:make-handler-number->number #'mul2)))
  -    (prove:is (let* ((hook (make-instance 'next-hooks:hook-number->number
  -                                          :handlers (list handler1
  -                                                          (next-hooks:make-handler-number->number (lambda (n) (* 3 n)) :name 'mul3)))))
  +    (prove:is (let* ((hook (next-hooks:make-hook-number->number
  +                            :handlers (list handler1
  +                                            (next-hooks:make-handler-number->number (lambda (n) (* 3 n)) :name 'mul3)))))
                   (next-hooks:disable-hook hook)
                   (length (next-hooks:disabled-handlers hook)))
                 2)
       (prove:is (let* ((hook
  -                       (make-instance 'next-hooks:hook-number->number
  -                                      :handlers (list (next-hooks:make-handler-number->number (lambda (n) (* 3 n)) :name 'mul3)))))
  +                      (next-hooks:make-hook-number->number
  +                       :handlers (list (next-hooks:make-handler-number->number (lambda (n) (* 3 n)) :name 'mul3)))))
                   (next-hooks:disable-hook hook)
                   (next-hooks:add-hook hook handler1)
                   (next-hooks:disable-hook hook)
  
positive.code: 
  (prove:subtest "Run default numeric hook"
    (prove:is (next-hooks:run-hook
               (make-instance 'next-hooks:hook-number->number
                              :handlers (list (next-hooks:make-handler-number->number #'add1)))
               17)
              '(18)))
  
  (prove:subtest "Run default numeric hook with multiple handlers"
    (prove:is (next-hooks:run-hook
               (make-instance 'next-hooks:hook-number->number
                              :handlers (list (next-hooks:make-handler-number->number #'add1)
                                              (next-hooks:make-handler-number->number
                                               (lambda (n) (* 2 n))
                                               :name 'mul2)))
  
negative.code:             '(18 34)))
  
  (prove:subtest "Don't add duplicate handlers."
    (prove:is (let ((hook (next-hooks:make-hook-number->number :handlers (list #'add1))))
                (next-hooks:add-hook hook (next-hooks:make-handler-number->number #'add1))
                (next-hooks:run-hook hook 17))
              '(18))
    (prove:is (let ((hook (next-hooks:make-hook-number->number :handlers (list #'add1))))
                (next-hooks:add-hook hook (next-hooks:make-handler-number->number (lambda (n) (+ 1 n)) :name 'add1))
                (next-hooks:run-hook hook 17))
              '(18)))
  
  (prove:subtest "Combine handlers"
    (prove:is (let ((hook (next-hooks:make-hook-number->number
                           :handlers (list #'add1 #'mul2)
                           :combination #'next-hooks:combine-composed-hook)))
                (next-hooks:run-hook hook 17))
              35)
    (prove:is (let ((hook (next-hooks:make-hook-number->number
                           :combination #'next-hooks:combine-composed-hook)))
                (next-hooks:run-hook hook 17))
              17))
  
  (prove:subtest "Remove handler from hook"
    (prove:is (let* ((handler1 (next-hooks:make-handler-number->number #'add1))
                     (hook (next-hooks:make-hook-number->number
                            :handlers (list handler1
                                            (next-hooks:make-handler-number->number (lambda (n) (* 3 n)) :name 'mul3)))))
                (next-hooks:remove-hook hook 'mul3)
                (next-hooks:remove-hook hook handler1)
                (next-hooks:run-hook hook 17))
  