Nice! This looks pretty ok (albeit far from complete, a proper module will have to have conversion from/to lists, from/to sequences, and probably some other convenient functions such as membership testing or cardinality or is_empty).
Some comments for future inclusion in containers: - The module type Bimap should be called S (main signature). - Also, what add does on collision over any key should be clearly specified in the docs - that find functions can raise Not_found must be properly documented (@raise) - in the implementation of add, don't use !=, use L.compare (resp. R.compare). != will be almost always wrong. Le Fri, 23 Feb 2018, SP wrote: > I've started working on a BiMap, a map where (key, value) is also > (value, key) in a one-to-one relationship. > > https://github.com/c-cube/ocaml-containers/compare/master...orbifx:bimap > > As I'm writing this I have written `empty`, `add`, `find_left` and > `find_right`. > > The idea is that when adding a left-key, right-value to the BiMap, it > doesn't just check for the preexistence of the left key, but also checks > if the right value already has a left key and removes it if so. Vice > versa for right key, left value. > One question I have is why are map values first in the order of > parameters? For example: > > https://github.com/c-cube/ocaml-containers/blob/master/src/data/CCMultiMap.ml#L294 Oversight. -- Simon Cruanes http://weusepgp.info/ key 49AA62B6, fingerprint 949F EB87 8F06 59C6 D7D3 7D8D 4AC0 1D08 49AA 62B6
Description: PGP signature
_______________________________________________ Containers-users mailing list Containersfirstname.lastname@example.org http://lists.ocaml.org/listinfo/containers-users