Не могу сказать, что очень горжусь следующим, но, по крайней мере, это работает и допускает бесконечные фильтры:
(seq
(reduce #(clojure.set/intersection
(set %1)
(set %2)) (map #(filter % coll) filters)))
Если вы можете использовать наборы вместо seqs, это упроститвышеуказанный код выглядит следующим образом:
(reduce clojure.set/intersection (map #(filter % coll) filters))