CCBijection
Represents 1-to-1 mappings between two types. Each element from the "left" is mapped to one "right" value, and conversely.
module type OrderedType = sig ... end
module type S = sig ... end
module Make (L : OrderedType) (R : OrderedType) : S with type left = L.t and type right = R.t