     (.update! this (.light (.state this) what where color)))
   (unlight [this what where]
     (.light this what where [0 0]))
+  (react [this f]
+    (.update! this (.react (.state this) f)))
   GetState
   (state [this] @state)
   ILaunchpad  

  (.setReceiver
   midi-in
   (reify javax.sound.midi.Receiver
     (send [this msg ts]
       (when-let [reactor (.reactor pad)]
         (when-let [msg (decode-midi msg)]
           (apply reactor msg)))))))

(defn make-launchpad
  "Make a LaunchpadS corresponding to the last real launchpad device listed

     (when-let [pad (Launchpad. (atom state) midi-in midi-out)]
       (do
         (link-midi->pad midi-in pad)
         (.reset pad)
         pad)))))
