Review my F# QuickSort Program OK... last sort of the day and probably the most fun. F# is really awesome.

let rec quickSort list = 
    match list with
    | [] -&gt; []
    | [x] -&gt; [x]
    | hd :: _ -&gt; 
        quickSort (List.filter (fun x -&gt; x &lt; hd) list) @ hd :: quickSort (List.filter (fun x -&gt; x &gt; hd) list)

[&lt;EntryPoint&gt;]
let main args = 
    printfn "%s" (List.fold (fun acc x -&gt; acc + " " + x.ToString()) "" (quickSort [10; 7; 1; 0; -1; 9; 33; 12; 6; 2; 3; 33; 34;]))
    0


let me know How I can improve this code. I am trying to think functionally and want my program to be most efficient, concise and functional.
I'd:


exclude unnecessary duplication (List.filter etc.)
drop separate match rule for the list of one element
rely on type inference
use more succinct form of pattern matching


Something like this:

let rec qsort = function
    | [] -&gt; []
    | x::xs -&gt; let lt, ge = List.partition ((&gt;) x) xs
               qsort lt @ x :: qsort ge