a DSL for creating parsers in Clojure