          (every? id! (:args x))))
 
 (defn data! [x]
-  (check
-   (cond
-    (= :tag (:type x)) (tag! x)
-    (#{:ref/id :ref/page} (:type x)) (ref! x)
-    (number? x) true
-    (string? x) true
-    (vector? x) (every? data! x)
-    (map? x) (and (every? data! (keys x)) (every? data! (vals x))))))
+  (cond
+   (= :tag (:type x)) (check (tag! x))
+   (#{:ref/id :ref/js} (:type x)) (check (ref! x))
+   (number? x) true
+   (string? x) true
+   (vector? x) (check (every? data! x))
+   (map? x) (check (every? data! (keys x))
+                   (every? data! (vals x)))
+   :else (check false)))
 
 (defn constant! [x]
   (check (= :constant (:type x))
          (data! (:data x))))
 
 (defn match-any! [x]
-  (check (= :match/any) (:type x)))
+  (check (= :match/any (:type x))))
 
 (defn match-bind! [x]
   (check (= :match/bind (:type x))

         (js! (:js x))))

(defn ref! [x]
  (check
   (case (:type x)
     :ref/id (ref-id! x)
     :ref/js (ref-js! x)
     false)))

(defn tag! [x]
  (check (= :tag (:type x))

         (every? branch! (:branches x))))

(defn step! [x]
  (check (id! (:id x)))
  (case (:type x)
    :call (check (call! x))
    :constant (check (constant! x))
    :match (check (match! x))))

(defn page! [x]
  (check (= :page (:type x))
