gui/message-mixins.ss
(module message-mixins mzscheme

  (require (lib "contract.ss")
           (lib "class.ss")
           (lib "mred.ss" "mred")
           "interfaces.ss")

  (provide/contract
   [updatable-message-mixin (mixin/c [message%] [] [updatee<%>])])

  (define (updatable-message-mixin super%)
    (class* super% (updatee<%>)
      (init-field update-label)
      (public on-update)

      (super-new [label (update-label)])
      (inherit set-label)

      (define (on-update)
        (set-label (update-label)))))

  )