   [show & {:keys [device-filter refresh-interval display-name skip-animation]
            :or   {device-filter    "Mini"
                   refresh-interval (/ 1000 15)}}]
-  {:pre [(some? show)]}
+  {:pre [(have? some? show)]}
   (let [port-in        (first (amidi/filter-devices device-filter (amidi/open-inputs-if-needed!)))
         port-out       (first (amidi/filter-devices device-filter (amidi/open-outputs-if-needed!)))
         [device model] (when (every? some? [port-in port-out]) (valid-identity port-in port-out))]

  [show & {:keys [device-filter refresh-interval display-name]
           :or {device-filter "Mini"
                refresh-interval (/ 1000 15)}}]
  {:pre [(some? show)]}
  (let [idle (atom true)
        controller (atom nil)]
    (letfn [(disconnection-handler []

  by the watcher, if it is currently connected, and cancel the
  watcher itself. In such cases, `:disconnected` is meaningless."
  [controller & {:keys [disconnected] :or {disconnected false}}]
  {:pre [(have? #{:launchpad-mini :launchpad-mini-watcher} (type controller))]}
  (if (= (type controller) :launchpad-mini-watcher)
    (do ((:cancel controller))  ; Shut down the watcher
        (when-let [watched-controller @(:controller controller)]
