sig
  module Make :
    functor (PO : Pomap_intf.PARTIAL_ORDER->
      sig
        module Store : Store_intf.STORE
        type key = PO.el
        type +'a node
        type +'a pomap
        type 'a add_find_result =
            Found of Store.Ix.t * 'a node
          | Added of Store.Ix.t * 'a node * 'a pomap
        val empty : 'a pomap
        val singleton : key -> '-> 'a pomap
        val is_empty : 'a pomap -> bool
        val cardinal : 'a pomap -> int
        val add : key -> '-> 'a pomap -> 'a pomap
        val add_node : 'a node -> 'a pomap -> 'a pomap
        val remove : key -> 'a pomap -> 'a pomap
        val remove_node : 'a node -> 'a pomap -> 'a pomap
        val remove_ix : Store.Ix.t -> 'a pomap -> 'a pomap
        val take : key -> 'a pomap -> Store.Ix.t * 'a node * 'a pomap
        val take_ix : Store.Ix.t -> 'a pomap -> 'a node * 'a pomap
        val add_find : key -> '-> 'a pomap -> 'a add_find_result
        val add_fun : key -> '-> ('-> 'a) -> 'a pomap -> 'a pomap
        val mem : key -> 'a pomap -> bool
        val mem_ix : Store.Ix.t -> 'a pomap -> bool
        val find : key -> 'a pomap -> Store.Ix.t * 'a node
        val find_ix : Store.Ix.t -> 'a pomap -> 'a node
        val choose : 'a pomap -> Store.Ix.t * 'a node
        val filter : (Store.Ix.t -> 'a node -> bool) -> 'a pomap -> 'a pomap
        val partition :
          (Store.Ix.t -> 'a node -> bool) -> 'a pomap -> 'a pomap * 'a pomap
        val iter : ('a node -> unit) -> 'a pomap -> unit
        val iteri : (Store.Ix.t -> 'a node -> unit) -> 'a pomap -> unit
        val map : ('a node -> 'b) -> 'a pomap -> 'b pomap
        val mapi : (Store.Ix.t -> 'a node -> 'b) -> 'a pomap -> 'b pomap
        val fold : ('a node -> '-> 'b) -> 'a pomap -> '-> 'b
        val foldi :
          (Store.Ix.t -> 'a node -> '-> 'b) -> 'a pomap -> '-> 'b
        val topo_fold : ('a node -> '-> 'b) -> 'a pomap -> '-> 'b
        val topo_foldi :
          (Store.Ix.t -> 'a node -> '-> 'b) -> 'a pomap -> '-> 'b
        val topo_fold_ix : (Store.Ix.t -> '-> 'a) -> 'b pomap -> '-> 'a
        val rev_topo_fold : ('a node -> '-> 'b) -> 'a pomap -> '-> 'b
        val rev_topo_foldi :
          (Store.Ix.t -> 'a node -> '-> 'b) -> 'a pomap -> '-> 'b
        val rev_topo_fold_ix :
          (Store.Ix.t -> '-> 'a) -> 'b pomap -> '-> 'a
        val chain_fold : ('a node list -> '-> 'b) -> 'a pomap -> '-> 'b
        val chain_foldi :
          ((Store.Ix.t * 'a node) list -> '-> 'b) -> 'a pomap -> '-> 'b
        val rev_chain_fold :
          ('a node list -> '-> 'b) -> 'a pomap -> '-> 'b
        val rev_chain_foldi :
          ((Store.Ix.t * 'a node) list -> '-> 'b) -> 'a pomap -> '-> 'b
        val union : 'a pomap -> 'a pomap -> 'a pomap
        val inter : 'a pomap -> 'a pomap -> 'a pomap
        val diff : 'a pomap -> 'a pomap -> 'a pomap
        val create_node :
          key -> '-> Store.Ix.Set.t -> Store.Ix.Set.t -> 'a node
        val get_key : 'a node -> key
        val get_el : 'a node -> 'a
        val get_sucs : 'a node -> Store.Ix.Set.t
        val get_prds : 'a node -> Store.Ix.Set.t
        val set_key : 'a node -> key -> 'a node
        val set_el : 'a node -> '-> 'a node
        val set_sucs : 'a node -> Store.Ix.Set.t -> 'a node
        val set_prds : 'a node -> Store.Ix.Set.t -> 'a node
        val get_nodes : 'a pomap -> 'a node Store.t
        val get_top : 'a pomap -> Store.Ix.Set.t
        val get_bot : 'a pomap -> Store.Ix.Set.t
        val remove_eq_prds : ('-> '-> bool) -> 'a pomap -> 'a pomap
        val fold_eq_classes :
          ('-> '-> bool) ->
          ('-> 'a pomap -> '-> 'b) -> 'a pomap -> '-> 'b
        val fold_split_eq_classes :
          ('-> '-> bool) ->
          ('-> 'a pomap -> '-> 'b) -> 'a pomap -> '-> 'b
        val preorder_eq_classes :
          ('-> '-> bool) -> 'a pomap -> 'a pomap list
        val topo_fold_reduced :
          ('-> '-> bool) -> ('a node -> '-> 'b) -> 'a pomap -> '-> 'b
        val unsafe_update : 'a pomap -> Store.Ix.t -> 'a node -> 'a pomap
        val unsafe_set_nodes : 'a pomap -> 'a node Store.t -> 'a pomap
        val unsafe_set_top : 'a pomap -> Store.Ix.Set.t -> 'a pomap
        val unsafe_set_bot : 'a pomap -> Store.Ix.Set.t -> 'a pomap
      end
end