sig
  type ('a, 'b) t = 'a * 'b
  val make : '-> '-> ('a, 'b) CCPair.t
  val map1 : ('-> 'b) -> 'a * '-> 'b * 'c
  val map2 : ('-> 'b) -> 'c * '-> 'c * 'b
  val map : ('-> 'c) -> ('-> 'd) -> 'a * '-> 'c * 'd
  val map_same : ('-> 'b) -> 'a * '-> 'b * 'b
  val map_fst : ('-> 'b) -> 'a * '-> 'b
  val map_snd : ('-> 'b) -> 'c * '-> 'b
  val iter : ('-> '-> unit) -> 'a * '-> unit
  val swap : 'a * '-> 'b * 'a
  val ( <<< ) : ('-> 'b) -> 'a * '-> 'b * 'c
  val ( >>> ) : ('-> 'b) -> 'c * '-> 'c * 'b
  val ( *** ) : ('-> 'c) -> ('-> 'd) -> 'a * '-> 'c * 'd
  val ( &&& ) : ('-> 'b) -> ('-> 'c) -> '-> 'b * 'c
  val merge : ('-> '-> 'c) -> 'a * '-> 'c
  val fold : ('-> '-> 'c) -> 'a * '-> 'c
  val dup : '-> 'a * 'a
  val dup_map : ('-> 'b) -> '-> 'a * 'b
  val equal :
    ('-> '-> bool) -> ('-> '-> bool) -> 'a * '-> 'a * '-> bool
  val compare :
    ('-> '-> int) -> ('-> '-> int) -> 'a * '-> 'a * '-> int
  type 'a printer = Format.formatter -> '-> unit
  val pp :
    ?sep:string ->
    'CCPair.printer -> 'CCPair.printer -> ('a * 'b) CCPair.printer
end