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