OrderedType
module type S = sig ... end
module Pair : functor (M : S) -> functor (N : S) -> S with type t = M.t * N.t
module UnorderedPair : functor (M : S) -> S with type t = M.t * M.t