Functor Strongly_connected_components.Make

module Make: (Id: Identifiable.S) => S with module Id := Id;
Parameters:
Id : Identifiable.S

module Id: Identifiable.S;
type directed_graph = Id.Map.t(Id.Set.t);

If (a -> set) belongs to the map, it means that there are edges from a to every element of set. It is assumed that no edge points to a vertex not represented in the map.

type component = 
| Has_loop of Id.t list
| No_loop of Id.t
let connected_components_sorted_from_roots_to_leaf:
  directed_graph => array(component);
let component_graph: directed_graph => array((component, list(int)));