   (apply-kwargs read-csv-rows (clojure.string/split-lines csv-str) opts))
 
 
+
+;; ## Some parsing functions for your convenience
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+; These functions can be imported and used in your `:cast-fns` specification
+
+(defn ->int
+  "Translating string into integers"
+  [string]
+  (Integer/parseInt string))
+
+(defn ->float
+  "Translate into float"
+  [string]
+  (Float/parseFloat string))
+
+

      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]
                 :or   {comment-re   #"^\#"
                        header       true
                        remove-empty true

                                      (re-find comment-re %))
                                    (when remove-empty
                                      (re-find #"^\s*$" %)))
                               lines)
        header (first (csv/read-csv (first non-cmnt-lines)))
        non-cmnt-lines (rest non-cmnt-lines)]
    (map
