   [re coll]
   (filter #(re-matches re %) coll))
 
-(def sep (. File separator))
-
-(defn file
+(defn re-escape
+  "Escape all special regex chars in a string s."
+  [s]
+  (escape "\\.*+|?()[]{}$^" s))
+
+(defn re-find-all
+  "Repeat re-find for matcher m until nil, and return the seq of results."
+  [m]
+  (doall (take-while identity
+    (map re-find (repeat m)))))
+
+;;;; File handling ;;;;
+
+(defmacro file
   "Returns an instance of java.io.File."
-  [path]
-  (new File path))
+  [& args]
+  `(new File ~@args))
 
 (defn pipe-stream
   "Pipe the contents of an InputStream into an OutputStream."

    (if (. matcher (matches))
      (apply hash-map
        (interleave symbols (rest (re-groups matcher)))))))

(defn update-response
  "Destructively update a HttpServletResponse via a Clojure datatype.

          "Content-Type" (context-mimetype context (str update))))
        (pipe-stream in out))))

;;;; Resource ;;;;

(def #^{:doc
  "A set of bindings available to each resource. This can be extended
