module Sort(X : sig type t val le : t -> t -> bool end) : sig
  val sort : X.t list -> X.t list
end = struct

  let rec partition x = function
    | [] -> [],[]
    | y :: s -> let l,r = partition x s in if X.le y x then y::l,r else l,y::r
        
  let rec sort = function
    | [] | [_] as l -> l
    | x :: xs -> let l,r = partition x xs in sort l @ x :: sort r

end;;

module S = Sort(struct type t = int let le = (<=) end);;
S.sort [1;2;3;2;4;1];;



This document was generated using caml2html