F# build and parse URL query strings

F#
open System

let buildQuery (pairs: (string * string) list) =
    pairs
    |> List.map (fun (k, v) -> Uri.EscapeDataString k + "=" + Uri.EscapeDataString v)
    |> String.concat "&"

let parseQuery (query: string) =
    query.TrimStart('?').Split('&', StringSplitOptions.RemoveEmptyEntries)
    |> Array.map (fun part ->
        match part.Split('=', 2) with
        | [| k; v |] -> Uri.UnescapeDataString k, Uri.UnescapeDataString v
        | [| k |] -> Uri.UnescapeDataString k, "")
    |> Map.ofArray