Feel free to comment on my code.
Using an object for this is overkill. You can get the same semantics in a much simpler way, with a reference to a list:
type myintset = int list ref let make () = ref  let add set n = if not (List.mem n !set) then set := n :: !set let print set = List.iter (fun n -> print_int n; print_newline ()) !set let () = let s = make () in add s 1; add s 2; add s 3; add s 3; add s 2; add s 1; print s
I’m thinking now of a “sorted-one-linked-list” & “balanced-binary-tree”.
But I’m totally clueless…
Balanced binary tree is the implementation used internally by
Stdlib.Set, you can have a look at it to learn how it’s done, it’s not doing things that are too clever, so hopefully it doesn’t appear too complicated.