The signatures uses semi-explicit polymorphism with a record type:
- S.equal : { f : 'a key -> 'a -> 'a -> bool } -> t -> t -> bool
- S.merge : { f : 'a key -> 'a option -> 'a option -> 'a option } -> t -> t -> t
- S.union : { f : 'a key -> 'a -> 'a -> 'a option } -> t -> t -> t
- new function S.map : { f : 'a key -> 'a -> 'a } -> t -> t