clojure.set/intersection appears to use the indexes of vectors as values. This results in very strange behavior if you accidentally end up passing a vector in as one of the arguments.
`
ti.repl-init=> (clojure.set/intersection #{0 1} [2 2 2 2 2])
{0 1}
ti.repl-init=> (clojure.set/intersection [2 2 2 2] #{0 1})
{0 1}
ti.repl-init=> (clojure.set/intersection [0 1] [2 2 2 2])
[0 1]
ti.repl-init=> (clojure.set/intersection [2 2 2 2] [2 2 2 2])
[2 2 2 2]
ti.repl-init=> (clojure.set/intersection [3 3 3 ] [2 2 2 2])
[3 3 3]
ti.repl-init=> (clojure.set/intersection [55] [2 2 2 2])
ClassCastException clojure.lang.PersistentVector cannot be cast to clojure.lang.IPersistentSet clojure.core/disj (core.clj:1476)
`
If any of the arguments are lists, you get a ClassCastException which is maybe a bit less clear than one would hope.
`
ti.repl-init=> (clojure.set/intersection #{0 1} (list 2 2 2 2))
IllegalArgumentException contains? not supported on type: clojure.lang.PersistentList clojure.lang.RT.contains (RT.java:814)
`
The same also happens if all arguments are lists: