sig
  module type GRAPH =
    sig
      type graph
      and node
      val iter_nodes :
        (Avl_tarjan.GRAPH.node -> unit) -> Avl_tarjan.GRAPH.graph -> unit
      val iter_successors :
        (Avl_tarjan.GRAPH.node -> unit) -> Avl_tarjan.GRAPH.node -> unit
      val get : Avl_tarjan.GRAPH.node -> int
      val set : Avl_tarjan.GRAPH.node -> int -> unit
    end
  module Make :
    functor (X : GRAPH->
      sig
        val fold :
          '->
          (X.node -> '-> 'a) -> '-> ('-> '-> 'b) -> X.graph -> 'b
        val list : X.graph -> X.node list list
        val unify : (X.node -> X.node -> unit) -> X.graph -> unit
      end
end