let unique xs = let rec f us = function (* TODO: make this not O(n^2) *) (x::xs) -> if (List.exists ((=) x) us) then f us xs else f (x::us) xs | [] -> us in List.rev (f [] xs) let counter s = let n = ref (s-1) in fun () -> n := !n + 1; !n