(defn numeric-type?
#?(:cljs {:tag boolean})
[t]
;; TODO: type inference is not strong enough to detect that
;; when functions like first won't return nil, so variadic
;; numeric functions like cljs.core/< would produce a spurious
;; warning without this - David
(cond
(nil? t) true
(= 'clj-nil t) true
(js-tag? t) true ;; TODO: revisit
:else
(if (and (symbol? t) (some? (get NUMERIC_SET t)))
true
(when #?(:clj (set? t)
:cljs (cljs-set? t))
(or (contains? t 'number)
(contains? t 'long)
(contains? t 'double)
(contains? t 'any)
(contains? t 'js))))))