anchor.diff:  (defun split-template (tmpl)
     (split-sequence #\/ (string-left-trim "/" tmpl)))
   
  +(defun parse-template (tmpl)
  +  (iter (for path in (split-template (string-left-trim "/" tmpl)))
  +        (collect (let ((spec (routes::parse-path path)))
  +                   (if (cdr spec)
  +                       (routes.unify:make-unify-template 'routes.unify::concat spec)
  +                       (car spec))))))
   
   (defun make-route (tmpl &key extra-bindings conditions)
     (let ((bindings (plist->alist extra-bindings)))
  
positive.code:           (if (puri:uri-host tmpl)
                (setq bindings (extend-bindings :host (puri:uri-host tmpl) (or bindings +no-bindings+))))))
      (make-instance 'route
                     :template (apply-bindings (iter (for path in (if (puri:uri-p tmpl)
                                                                      (cdr (puri:uri-parsed-path tmpl))
                                                                      (split-template tmpl)))
                                                     (collect (let ((spec (parse-path path)))
                                                                (if (cdr spec)
                                                                    (make-unify-template 'unify::concat spec)
                                                                    (car spec)))))
                                               bindings)
                     :extra-bindings bindings
                     :conditions (plist->alist conditions))))
  
negative.code: 
  ;;; unify/impl for route
  
  (defmethod routes.unify::unify/impl ((b route) (a routes.unify::variable-template) bindings)
    (routes.unify::unify a b bindings))
    
  (defmethod routes.unify::unify/impl ((a routes.unify::variable-template) (route route) bindings)
    (let ((e-bindings (route-extend-bindings route bindings)))
      (if (route-check-conditions route e-bindings)
          (call-next-method a
  