   [f pin & args]
   (apply f (:board pin) (:pin-n pin) args))
 
-
+(defn- chan?
+  [c]
+  (and (satisfies? clojure.core.async.impl.protocols/ReadPort c)
+       (satisfies? clojure.core.async.impl.protocols/WritePort c)))
+

;; pins, and the current mode settings for those pins.


(declare board? board-dispatch board-apply)

;; We start by creating board objects with the `create-board` function, which returns a board object based
;; on the specified `board-type`, which points towards the implementation key for the device being used (e.g.

  ([type]
   (create-board type {}))
  ([type config]
   (Board. (atom {}) (impl/instantiate type config))))

;; What follows then are a suite of simple tools for dealing with the boards.

