       row)))
 
 
-(defn ->int
-  "Convenience function for translating strings into integers"
-  [string]
-  (Integer/parseInt string))
-
-(defn ->float
-  "Convenience function for translating strings into floats"
-  [string]
-  (Float/parseFloat string))
-
-
 (defn read-csv-rows
-  "Given a lines-iter, produces a sequence of hash-maps of col -> val mappings, as specified by
-  a header in file (if specified; indices ow). Options
-    header: bool; consume the first row as a header?
-    comment-re: specify a regular expression to use for commenting out lines, or something falsey
-                if this isn't desired
-    remove-empty: also remove empty rows?
-    cast-fns: optionally cast the vals in the map by applying the corresponding function in
-              (cast-fns row-name) to the string val"
-  [lines-iter & {:keys [comment-re header remove-empty cast-fns]
+  "Given a `lines` collection, produces a seq of maps (`colname -> val`) where the column names are
+  based on the first row's values.
+  * `:header`: bool; consume the first row as a header?
+  * `:comment-re`: specify a regular expression to use for commenting out lines, or something falsey
+     if this isn't desired
+  * `:remove-empty`: also remove empty rows?
+  * `:cast-fns`: optional map of `colname | index -> cast-fn`; row maps will have the values as output by the
+     assigned `cast-fn`.
+              `(cast-fns row-name)` to the string val"
+  [lines & {:keys [comment-re header remove-empty cast-fns]
                  :or   {comment-re   #"^\#"
                         header       true
                         remove-empty true

(ns semantic-csv.core
  (:require [clojure.java.io :as io]
            [clojure.data.csv :as csv]))



(defn read-csv-file
  "Read csv in from a filename or file handle. For details see the docstring for read-csv-rows"
  [file-or-filename & opts]
  (if (string? file-or-filename)
    (with-open [f (io/reader file-or-filename)]
      (doall
