I cannot find anything in the docs but would like to assume I can do equality, comparison and hashing of values of the Unix.file_descr type, e.g. use them as keys in a hash table. Is that ok or criminal?
The source code says it’s an
int, so at least nothing should blow up: https://github.com/ocaml/ocaml/blob/6a12ddb222874713b69b181416159ca2653405cb/otherlibs/unix/unix.ml#L219
Now as for whether it means the right thing–I would probably do some experiments in utop, i.e. if I open the same file twice and get two fds, how do they compare, etc.
Note that this is only true under Unix. On Windows it is something else entirely. Having said that using them as keys in a hash table with equality defined by
== should be fine.
That means nothing special needs to be done for using them as keys in polymorphic hash tables.
On presume, “not equal”. B/c otherwise, it wouldn’t match UNIX semantics at all. [and sure, on Winders, something else might happen]
Yes, good point.
You’re right that this fact is not documented, but: you can safely compare file descriptors using generic equality
= or generic comparison
compare, hash them using
Hashtbl.hash, and use them as keys in hash tables, both under Unix and under Windows.