Expected syntax for destructuring-bind

You cannot pass in a list as meta, but you can pass in a map like I showed. If you pass in the list form unquoted, it will be eval’d at read-time (in this instance), and yield a result of Boolean, since Boolean is bound to java.lag.Boolean, and is truthy, which will return a result for or.

(binding [*print-meta* true]
   (pprint  (let [x (with-meta (gensym "x") {:type '(or Boolean (and Number (not Long)))})]
                   `[~x])))
[^{:type ^{:line 4925, :column 53}
    (or Boolean
      ^{:line 4925, :column 65}
      (and Number
      ^{:line 4925, :column 77} (not Long)))} x21123]

Another option is to encode with vectors, or maps even.

(binding [*print-meta* true]
   (pprint  (let [x (with-meta (gensym "x") {:type '[or Boolean [and Number [not Long]]]})]
                   `[~x])))

[^{:type [or Boolean [and Number [not Long]]]} x21118]