A generic parser combinator in Clojure