Tail-recursive query string builder in F#
As Mauricio suggested:

let ComposeUrl valuePairs = 
    if Seq.isEmpty valuePairs then ""
    else 
        let values = valuePairs |&gt; Seq.map (fun (k, v) -&gt; sprintf "%s=%s" k v)
        "?" + String.Join("&amp;", values)