let unique (l : 'a list) : 'a list = let newset = create (List.length l) in List.iter (add newset) l; List.rev (fold (fun x acc -> x::acc) newset [])