 
   (def valid-paul [[[:name :first] [(fn [t-map data-point opt-map] (and (= data-point "Paul")
                                                                         {:a 1 :b 2}))]]
-                   [[:pets 0 0] [::w-pets {:pet-name-starts ""}]]
+                   [[:pets 0 0] [::w-pets {:pet-name-starts ""}
+                                 (simple-predicate char?)]]
                    ;[[:*] ['degrandis-pets]] ;This is valid, but we can also just write:
                    [:* 'degrandis-pets]])
 

  pull apart the constituents and apply a `raw-validation`,
  returning back the validation result vector"
  [t validation-vec]
  (let [[coordinates validations] validation-vec
        [validation-fn opt-map] validations
        opt-map (or opt-map {})]
    (raw-validation t coordinates validation-fn opt-map)))

(defn validation-seq
  "Create a lazy sequence of validating a given data structure

;; ### Ideal usage
;; See the comment block below, but `(validation my-ds ds-rule-vec)`

(defn simple-predicate
  "Given a simple predicate function that takes a single arg,
  return a proper validation function for it"
  [f]
  (fn [_ data-point _] (f data-point)))

(defn navigate
  "Fetch the data from within a data structure given coordinates.
  Note: Tuck our internal protocols behind a function for consumption"
