sig
val mk : 'a -> 'b -> 'a * 'b
val left : 'a * 'b -> 'a
val right : 'a * 'b -> 'b
val map : ('a -> 'b) -> 'a * 'a -> 'b * 'b
val map_left : ('a -> 'c) -> 'a * 'b -> 'c * 'b
val map_right : ('b -> 'c) -> 'a * 'b -> 'a * 'c
val apply : ('a -> 'b -> 'c) -> 'a * 'b -> 'c
val conj : bool * bool -> bool
val disj : bool * bool -> bool
val swap : 'a * 'b -> 'b * 'a
val fold : ('a -> 'b -> 'b) -> 'a * 'a -> 'b -> 'b
val both : bool * bool -> bool
val either : bool * bool -> bool
module Make :
functor (T : Utilsigs.BasicType) (S : Utilsigs.BasicType) ->
sig
type t = T.t * S.t
val compare : t -> t -> int
val equal : t -> t -> bool
val hash : t -> int
val to_string : t -> string
val pp : Format.formatter -> t -> unit
end
end