# Module type Strongly_connected_components.S

    module type S = sig .. end

    module Id: Identifiable.S

    type directed_graph = Id.Set.t Id.Map.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``

    val connected_components_sorted_from_roots_to_leaf : directed_graph ->
           component array

    val component_graph : directed_graph ->
           (component * int list) array