anchor.diff:  
   (defgeneric balance (account))
   
  -(defmethod ((account bank-account
  +(defmethod balance ((account bank-account))
     (slot-value account 'balance))
  -
  -(
   
   (defgeneric withdraw (account amount)
     (:documentation "Withdraw the specified AMOUNT from the ACCOUNT.
  
positive.code:       (withdraw (overdraft-account account) overdraft)
        (incf (balance account) overdraft))))
  
  ;; (defmethod withdraw :before ((account (eql *account-of-bank-president*)) amount)
  ;;   (let ((overdraft (- amount (balance account))))
  ;;     (when (plusp overdraft)
  ;;       (incf (balance account) (embezzle *bank* overdraft)))))
  
negative.code: (defvar *account-numbers* 1000)
  
  (defclass bank-account (account)
    ((customer-name
      :initarg :customer-name
      :initform (error "Must supply a customer name."))
     (balance
      :initarg :balance
      :initform 0)
     (account-number
      :initform (incf *account-numbers*))
     account-type))
  
  (defmethod initialize-instance :after ((account bank-account) &key)
    (let ((balance (slot-value account 'balance)))
      (setf (slot-value account 'account-type)
            (cond
              ((>= balance 100000) :gold)
              ((>= balance 50000) :silver)
              (t :bronze)))))
  
  (defclass checking-account (bank-account) ())
  
  