    :compile (fn [[_ {:keys [handler]}] _] handler)
    :conflicts (partial throw-on-conflicts! path-conflicts-str)})
 
+(defn- linear-router-lookup-structs
+  "Returns a 2-item vec of lookup structures.
+
+  The first is a vec of Routes.
+  The second is a map of route names to lookup fns."
+  [compiled-routes]
+  (reduce
+    (fn [[pl nl] [p {:keys [name] :as data} result]]
+      (let [{:keys [path-params] :as route} (impl/create [p data result])
+            f #(if-let [path (impl/path-for route %)]
+                 (->Match p data result % path)
+                 (->PartialMatch p data result % path-params))]
+        [(conj pl route)
+         (if name (assoc nl name f) nl)]))
+    [[] {}]
+    compiled-routes))
+
 (defn linear-router
   "Creates a linear-router from resolved routes and optional
   expanded options. See [[router]] for available options"

         {:wilds wilds
          :routes compiled-routes})))
   (let [names (find-names compiled-routes opts)
         [pl nl] (reduce
                   (fn [[pl nl] [p {:keys [name] :as data} result]]
                     [(assoc pl p (->Match p data result {} p))
                      (if name
                        (assoc nl name #(->Match p data result % p))
                        nl)]) [{} {}] compiled-routes)
         data (impl/fast-map pl)
         lookup (impl/fast-map nl)
         routes (uncompile-routes compiled-routes)]

   (segment-router compiled-routes {}))
  ([compiled-routes opts]
   (let [names (find-names compiled-routes opts)
         [pl nl] (segment-router-lookup-structs compiled-routes)
         lookup (impl/fast-map nl)
         routes (uncompile-routes compiled-routes)]
     ^{:type ::router}
