Review my F# QuickSort Program
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