OCamlでクイックソート

let rec quick_sort lst = 
  let rec filter f n lst = match lst with
      [] -> []
    | first :: rest ->
        if f first n then first :: filter f n rest
                     else filter f n rest
  in match lst with
    [] -> []
  | first :: rest -> 
        quick_sort (filter (<) first rest) 
      @ [first] 
      @ quick_sort (filter (>) first rest)