# Functor Strongly_connected_components.Make

    module Make: functor (Id : Identifiable.S) -> S  with module Id := Id

Parameters: |
`Id` | : | `Identifiable.S`

    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