anchor.diff:                              val))
                      (ctype (simplify-types (type-of val))) ;actual complex type
                      ;; sigh, get simple types
  +                   ;; TODO: seems like this is duplicating the simple-types function now
  +                   ;; Why not move this up to there?
                      (type (cond
                              ;; if we're a number, be sure we're within a range supported
                              ;;by databases
  
positive.code:       (error 'bad-type-guess :value d :column-type type :original-error e))))
  
  (defun ensure-column-data-types (dt)
    "Given lacking data types of data-types only of strings, figure out
     what the data-types for the table should be set the slot on the data-table"
    (when (or (null (column-types dt)) (some #'null (column-types dt))
              (every #'(lambda (x) (subtypep x 'string)) (column-types dt)))
  
negative.code:   "how many rows to look at when trying to guess the types for each column of a data table")
  
  (defun sample-rows (rows &key (sample-size *guessing-types-sample-size*))
    "get a subset of the rows using reservior sampling
     TODO: seems really inefficient because of list random access, investigate array"
    (if (< (length rows) sample-size) rows
        (iter
          (with sample = (list))
  