module Make: `functor (X : GRAPH) -> sig end`

val fold : `'a -> (X.node -> 'a -> 'a) -> 'b -> ('a -> 'b -> 'b) -> X.graph -> 'b`

`fold empty add_class singleton add g`

runs the Tarjan's algorithm
on the graph

`g`

. It returns a partition of the set of the nodes
of the graph (i.e. a set of set of nodes), which is computed as
follows:

`empty`

is the empty partition,
`add_class c p`

adds the class `c`

to the partition `p`

,
`singleton nd`

returns the class with one element `nd`

,
`add nd c`

add the node `nd`

to the class `c`

.

val list : `X.graph -> X.node list list`

`list g`

computes the SCCs of a graph. The result is a list of list
of nodes: each list gives the nodes of one of the SCCs.

val unify : `(X.node -> X.node -> unit) -> X.graph -> unit`

`unify unifier graph`

computes the SCCs of a graph. For every SCC,
it chooses a particular node `nd`

, and for every other node `nd'`

of
the SCC, `unifier nd nd'`

is called.