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 [])