anchor.diff:  /// Filters an incoming HTTP request based on the beginning of the request path (case sensitive).
   let routeStartsWith (partOfPath : string) =
       fun (ctx : HttpHandlerContext) ->
  -        if ctx.HttpContext.Request.Path.ToString().StartsWith partOfPath 
  +        if (getRalativePath ctx.HttpContext).StartsWith partOfPath 
           then Some ctx
           else None
           |> async.Return
  
positive.code: /// Filters an incoming HTTP request based on the beginning of the request path (case insensitive).
  let routeStartsWithCi (partOfPath : string) =
      fun (ctx : HttpHandlerContext) ->
          if ctx.HttpContext.Request.Path.ToString().StartsWith(partOfPath, StringComparison.CurrentCultureIgnoreCase) 
          then Some ctx
          else None
          |> async.Return
  
negative.code:                 ctx
                  |> (setHttpHeader "Content-Type" "text/html"
                  >>= setBodyAsString html)
          }
  
  let private handlerWithRootedPath (path:string) (handler : HttpHandler) = 
      fun (ctx : HttpHandlerContext) ->
          async {
              let route = getRoute ctx.HttpContext
              try
                  ctx.HttpContext.Items.Item RouteKey <- ((route |> Option.defaultValue "") + path)
                  return! handler ctx
              finally
                  match route with
                  | Some route -> ctx.HttpContext.Items.Item RouteKey <- route
                  | None       -> ctx.HttpContext.Items.Remove RouteKey |> ignore
          }
  
  let subPath (path:string) (handler : HttpHandler) =
      route path >>=
      handlerWithRootedPath path handler
  
  let subCiPath (path:string) (handler : HttpHandler) =
      routeCi path >>=
      handlerWithRootedPath path handler
  