sig
  type edge_kind = [ `Back | `Cross | `Forward ]
  type ('v, 'e) t =
      [ `Edge of 'v * 'e * 'v * CCGraph.Traverse.Event.edge_kind
      | `Enter of 'v * int * ('v, 'e) CCGraph.Traverse.path
      | `Exit of 'v ]
  val get_vertex :
    ('v, 'e) CCGraph.Traverse.Event.t -> ('v * [ `Enter | `Exit ]) option
  val get_enter : ('v, 'e) CCGraph.Traverse.Event.t -> 'v option
  val get_exit : ('v, 'e) CCGraph.Traverse.Event.t -> 'v option
  val get_edge : ('v, 'e) CCGraph.Traverse.Event.t -> ('v * 'e * 'v) option
  val get_edge_kind :
    ('v, 'e) CCGraph.Traverse.Event.t ->
    ('v * 'e * 'v * CCGraph.Traverse.Event.edge_kind) option
  val dfs :
    ?tbl:'CCGraph.set ->
    ?eq:('-> '-> bool) ->
    graph:('v, 'e) CCGraph.graph ->
    'CCGraph.sequence ->
    ('v, 'e) CCGraph.Traverse.Event.t CCGraph.sequence_once
  val dfs_tag :
    ?eq:('-> '-> bool) ->
    tags:'CCGraph.tag_set ->
    graph:('v, 'e) CCGraph.graph ->
    'CCGraph.sequence ->
    ('v, 'e) CCGraph.Traverse.Event.t CCGraph.sequence_once
end