sig
  module HashX : Hashhe.S
  module HashY : Hashhe.S
  type x = HashX.key
  type y = HashY.key
  type t
  val hashx : DHashhe.S.t -> DHashhe.S.y HashX.t
  val hashy : DHashhe.S.t -> DHashhe.S.x HashY.t
  val clear : DHashhe.S.t -> unit
  val create : int -> DHashhe.S.t
  val add : DHashhe.S.t -> DHashhe.S.x -> DHashhe.S.y -> unit
  val y_of_x : DHashhe.S.t -> DHashhe.S.x -> DHashhe.S.y
  val x_of_y : DHashhe.S.t -> DHashhe.S.y -> DHashhe.S.x
  val removex : DHashhe.S.t -> DHashhe.S.x -> unit
  val removey : DHashhe.S.t -> DHashhe.S.y -> unit
  val memx : DHashhe.S.t -> DHashhe.S.x -> bool
  val memy : DHashhe.S.t -> DHashhe.S.y -> bool
  val iter : DHashhe.S.t -> (DHashhe.S.x -> DHashhe.S.y -> unit) -> unit
  val fold :
    DHashhe.S.t -> '-> (DHashhe.S.x -> DHashhe.S.y -> '-> 'a) -> 'a
  val cardinal : DHashhe.S.t -> int
  val print :
    ?first:(unit, Format.formatter, unit) Pervasives.format ->
    ?sep:(unit, Format.formatter, unit) Pervasives.format ->
    ?last:(unit, Format.formatter, unit) Pervasives.format ->
    ?firstbind:(unit, Format.formatter, unit) Pervasives.format ->
    ?sepbind:(unit, Format.formatter, unit) Pervasives.format ->
    ?lastbind:(unit, Format.formatter, unit) Pervasives.format ->
    (Format.formatter -> DHashhe.S.x -> unit) ->
    (Format.formatter -> DHashhe.S.y -> unit) ->
    Format.formatter -> DHashhe.S.t -> unit
end