 
 (defn parent-is-sequence? [{:keys [type-sig path]}]
   (and (integer? (first path))
-       ((set (map last (*schema-rules* [:=> (second type-sig)]))) :SEQQ)))
+       ((set (map last (schema-rules [:=> (second type-sig)]))) :SEQQ)))
 
 (defmulti predicate-explain (fn [pred _] pred))
 
 (defmethod predicate-explain :default [pred value]
-  (if-let [typ (first (for [[t _ p] (*schema-rules* :=)
+  (if-let [typ (first (for [[t _ p] (schema-rules :=)
                             :when (= p pred)] t))]
     (name typ)
     pred))


#_(required-keys 'FigOpts :hello :goodbye)

(defn doc
  ([root type-doc kd]
   (cons [root :doc-type type-doc]
         (mapv (fn [[k d]] [root :doc-key k d]) kd)))
  ([root type-doc]
   (doc root type-doc [])))


 (doc 'FigOpts "This is a cool option"
      {
       :hello ":hello is needed to say hello"
       :good ":good is needed to say goodbye"
       :hey-there {:content "This is docs"
                   :example "This is an example"}})) 

;; Direct Implementation
;; this is still squirrely
