anchor.diff:    let private reservedEncoded = [|';'; ','; '/'; '?'; ':'; '@'; '&'; '='; '+'; '$'; '#'|]
     let private reservedEncodedComponent = [|'-'; '_'; '.'; '!'; '~'; '*'; '\''; '('; ')'; '['; ']'|]
   
  +  let private uriReserved = ";/?:@&=+$,"
  +  let private uriUnescaped = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.!~*'()"
  +  let private unescapedURISet = uriReserved + "#" + uriUnescaped
  +
     ///
     let private replaceChar (uri:string) (c:char) =
       uri.Replace(Uri.EscapeDataString(string c), string c)
  
positive.code:   let decodeURIComponent = 
      decodeURI
  
    ///
    let encodeURI (func:FO) (_:CO) (uri:BoxedValue) =
      match uri.Tag with
      | TypeTags.Undefined -> "" |> BV.Box
      | _ ->
        try
          let uri = uri |> TypeConverter.ToString |> Uri.EscapeDataString
          let uri = Array.fold replaceChar uri reservedEncoded
          let uri = Array.fold replaceChar uri reservedEncodedComponent
          uri.ToUpperInvariant() |> BV.Box
  
        with
          | :? UriFormatException as e -> 
  
negative.code:     | TypeTags.Undefined -> "" |> BV.Box
      | _ ->
        try
          let uriString = uri |> TC.ToString
          encode uriString uriUnescaped |> BV.Box
  
        with
          | :? UriFormatException as e -> 
  