sig
  type t
  module V :
    sig
      type t
      type label
      val create : label -> t
      val label : t -> label
      val hash : t -> int
      val equal : t -> t -> bool
    end
  module E :
    sig
      type t
      val compare : t -> t -> int
      type vertex = V.t
      val src : t -> vertex
      val dst : t -> vertex
      type label = unit
      val create : vertex -> label -> vertex -> t
      val label : t -> label
    end
  val create : ?size:int -> unit -> t
  val add_vertex : t -> V.t -> unit
  val add_edge_e : t -> E.t -> unit
end