 
 (defn- lint-order [order]
   (lint vector? order "order not a vector")
-  (if (keyword? (first order))
+  (if (attr? (first order))
     (lint-order-comp order)
     (domap lint-order-comp order)))
 
-(def- sing-ops #{:= :!= :< :<= :> :>=})
-(def- doub-ops #{:>< :>=< :><= :>=<=})
-(def- conj-ops #{:and :or})
+(def- sing-ops #{"=" "!=" "<" "<=" ">" ">="})
+(def- doub-ops #{"><" ">=<" "><=" ">=<="})
+(def- conj-ops #{"and" "or"})
 
 (defn- lint-where [where]
   (lint vector? where "where not a vector")

  (lint-val val))

(defn- lint-dir [dir]
  (lint #{:asc :desc} dir "unrecognized direction"))

(defn- lint-record [r]
  (lint map? r "record not a map")


(defn- lint-ispec [ispec]
  (cond
    (attr?   ispec) :ok
    (vector? ispec)
      (doseq [ispec-comp ispec]
        (cond
          (attr?   ispec-comp) :ok
          (vector? ispec-comp)
            (lint #(= 2 (count %)) ispec-comp "index spec component vector must have 2 elements")
            (lint-attr (first ispec-comp))
            (lint-dir  (second ispec-comp)))
          :else
            (fail "index spec component must be a string or vector" ispec-comp))
    :else
      (fail "index spec must be a string or vector" ispec)))

(defn lint-num-args [n q]
  (if (integer? n)
