   "Merge columns with the specified function"
   (map (partial fuse-row cols f) csv))
 
-(defn join [])
+;; TODO implement inner join, maybe l/r outer joins too
+(defn join [csv f & others]
+  ;(filter)
+  (apply map vector csv others))
 
 (comment
 

  ([csv r]
     (if (sequential? r)
       (apply rows csv r)
       (list (nnth csv r))))
  ([csv r & rs]
      (reduce (fn [acc r]
                (conj acc (nnth csv r)))
              [] (conj rs r))))

(defmulti grep
  "Filters rows in the table for matches.  This is multi-method
  dispatches on the type of its second argument."
  (fn [table f & cols] (class f)))

(defmethod grep clojure.lang.IFn [csv f & cols]

  (rows earners (range 5 10))

  (-> (parse-csv "./examples/high-earners-pay-2012.csv")
      (grep "John" 2)
      (fuse #(str %1 " " %2) 2 1)
      (columns 2 1 7)
      (rows 1 10)
      )

  (def lookup '(["1" "Cats"] ["2" "Dogs"]))

  (def pets '(["1" "Sylvester"]
              ["2" "Fido"]))


  )
