                          (into {}
                            (map (juxt key (comp (partial reduce core/bit-or) val))
                              parts)))]
-        [fpps (reduce (fn [ps p] (update-in ps [p] (fnil identity 0)))
+        [fpps (reduce (core/fn [ps p] (update-in ps [p] (core/fnil identity 0)))
                 parts
                 (range fast-path-protocol-partitions-count))]))))
 

                    :doc doc
                    :protocol-symbol true)
             ns-name (-> &env :ns :name)
             fqn (fn [n] (symbol (core/str ns-name "." n)))
             prefix (protocol-prefix p)
             _ (core/doseq [[mname & arities] methods]
                 (when (some #{0} (map count (filter vector? arities)))
                   (throw
                     #?(:clj (Exception.
                               (core/str "Invalid protocol, " psym

      `(loop* ~bindings ~@body)
      (core/let [vs (take-nth 2 (drop 1 bindings))
                 bs (take-nth 2 bindings)
                 gs (map (core/fn [b] (if (core/symbol? b) b (gensym))) bs)
                 bfs (reduce (core/fn [ret [b v g]]
                               (if (core/symbol? b)
                                 (conj ret g v)
                                 (conj ret g v b g)))
