anchor.diff:                                    (lambda () ;; just return path for now
                                       path))))) 
       `(let ((path (concatenate 'string *route-section* ,uri)))
  -       (add-route% *route-table* path :to ,handler :methods ,methods :defaults ,defaults :validators ,validators)
  +       (add-route% path ,handler ,methods  ,defaults ,validators)
          ,path-function)))
   
  -(defun add-route (path handler)
  -  (add-route% *route-table* path :to handler :method :get))
  +(defun get (uri &key handler as defaults validators)
  +  (route uri :handler handler :methods '(:get) :as as :defaults defaults :validators validators))
  +
  +(defun head (uri &key handler as defaults validators)
  +  (route uri :handler handler :methods '(:head) :as as :defaults defaults :validators validators))
  +
  +(defun post (uri &key handler as defaults validators)
  +  (route uri :handler handler :methods '(:post) :as as :defaults defaults :validators validators))
  +
  +(defun put (uri &key handler as defaults validators)
  +  (route uri :handler handler :methods '(:put) :as as :defaults defaults :validators validators))
  +
  +(defun delete (uri &key handler as defaults validators)
  +  (route uri :handler handler :methods '(:delete) :as as :defaults defaults :validators validators))
  +
  +(defun trace (uri &key handler as defaults validators)
  +  (route uri :handler handler :methods '(:trace) :as as :defaults defaults :validators validators))
  +
  +(defun options (uri &key handler as defaults validators)
  +  (route uri :handler handler :methods '(:options) :as as :defaults defaults :validators validators))
  +
  +(defun connect (uri &key handler as defaults validators)
  +  (route uri :handler handler :methods '(:connect) :as as :defaults defaults :validators validators))
  +
  +(defun patch (uri &key handler as defaults validators)
  +  (route uri :handler handler :methods '(:patch) :as as :defaults defaults :validators validators))
  +
   
   (defmacro root (&key handler as)
     `(route "/" :to ,handler :as ,as))
  
positive.code: 
  (defun add-route-to-routes (routes path route)
    (let ((*routes* routes))
      (add-route path route)))
  
  (defun add-route% (route-table path &key handler methods defaults validators)
    (unless methods
      (setf methods '(:get)))
    (let ((route (make-instance 'route
  
negative.code: (defmacro section (sub-path &body routes)
    `(let ((*route-section* (if *route-section*
                                (concatenate 'string *route-section* ,sub-path)
                                 ,sub-path)))
       ,@routes))
  
  ;; (defun attach-all-routes (system)
  ;;   (let ((deps (get-all-deps system)))
  ;;     (loop for dep in (reverse deps) do
  ;;              (attach-system-routes dep))))
  
  (defun reload-all-routes (system-name)
    (setf *route-table* (make-instance 'route-table))
    (attach-routes-packet system-name))
  
  (defun merge-hash-tables (&rest hash-tables)
    "Each subsequentional hash-table overrides existing key-values"
    (let ((final-hash-table (make-hash-table)))
      (loop for hash-table in hash-tables do
               (when hash-table
                 (with-hash-table-iterator (next hash-table)
                   (loop
                     (multiple-value-bind (more? key value) (next)
                       (unless more?
                         (return))
                       (setf (gethash key final-hash-table) value))))))
      final-hash-table))
  
  (defun query (method uri)
    (let ((*routes* (route-table-routes method)))
      (multiple-value-bind (route parameters) (try-match-url uri)
        (when route
          (let ((defaults (route-defaults route)))
            (setf parameters (merge-hash-tables defaults parameters)))
          (values route parameters)))))
  
  ;; example
  #|
  