functor (G : GM) ->
  sig val dfs : Traverse.G.t -> unit val has_cycle : Traverse.G.t -> bool end