sig
  module type EDGE_TYPE =
    sig
      type t
      val name : string
      val compare : t -> t -> int
      val pair : t -> t -> t
      val of_string : string -> t
      val to_string : t -> string
      val print : ?oc:out_channel -> t -> unit
      val print_ : ?oc:out_channel -> t -> unit
      type node
      type label
      val origin : t -> Edges.EDGE_TYPE.node
      val terminus : t -> Edges.EDGE_TYPE.node
      val label : t -> Edges.EDGE_TYPE.label
      val make :
        Edges.EDGE_TYPE.node ->
        Edges.EDGE_TYPE.node -> Edges.EDGE_TYPE.label -> t
      val label_compare :
        Edges.EDGE_TYPE.label -> Edges.EDGE_TYPE.label -> int
      val to_dotstring : t -> string
    end
  module Make :
    functor (Node : X.X_TYPE->
      functor (Label : X.X_TYPE->
        functor (D : Delim.DELIM_TYPE->
          sig
            type t
            val name : string
            val compare : t -> t -> int
            val pair : t -> t -> t
            val of_string : string -> t
            val to_string : t -> string
            val print : ?oc:out_channel -> t -> unit
            val print_ : ?oc:out_channel -> t -> unit
            type node = Node.t
            type label = Label.t
            val origin : t -> node
            val terminus : t -> node
            val label : t -> label
            val make : node -> node -> label -> t
            val label_compare : label -> label -> int
            val to_dotstring : t -> string
          end
end