any specific motivation for special casing list and lazy-seq rather than using something more abstract?
ISeq might be relevant
user=> (set/intersection (supers (class (lazy-seq nil))) (supers (class (list))))
#{java.lang.Iterable java.util.List clojure.lang.IPersistentCollection java.io.Serializable java.util.Collection clojure.lang.IMeta clojure.lang.ISeq clojure.lang.IHashEq clojure.lang.Seqable clojure.lang.Sequential clojure.lang.IObj java.lang.Object clojure.lang.Obj}