(defn array-type?
#?(:cljs {:tag boolean})
[t]
;; TODO same inference caveats as the numeric-type? fn above
(cond
(nil? t) true
(= 'clj-nil t) true
(js-tag? t) true ;; TODO: revisit
(= 'any t) true
(contains? array-types t) true
:else
(boolean
(when #?(:clj (set? t)
:cljs (cljs-set? t))
(or (contains? t 'any)
(contains? t 'js)
(some array-types t))))))