`val iter : ?pre:(V.t -> unit) -> ?post:(V.t -> unit) -> t -> unit`

`iter pre post g` visits all nodes of `g` in depth-first search, applying `pre` to each visited node before its successors, and `post` after them. Each node is visited exactly once.

`val prefix : (V.t -> unit) -> t -> unit`

applies only a prefix function

`val postfix : (V.t -> unit) -> t -> unit`

applies only a postfix function

`val fold : (V.t -> 'a -> 'a) -> 'a -> t -> 'a`

Same thing, but for a single connected component

`val iter_component : ?pre:(V.t -> unit) -> ?post:(V.t -> unit) -> t -> V.t -> unit`
`val prefix_component : (V.t -> unit) -> t -> V.t -> unit`
`val postfix_component : (V.t -> unit) -> t -> V.t -> unit`
`val fold_component : (V.t -> 'a -> 'a) -> 'a -> t -> V.t -> 'a`
`val has_cycle : t -> bool`