`sig
module type S =
sig
module Id : Identifiable.S
type directed_graph = Id.Set.t Id.Map.t
type component = Has_loop of Id.t list | No_loop of Id.t
val connected_components_sorted_from_roots_to_leaf :
Strongly_connected_components.S.directed_graph ->
Strongly_connected_components.S.component array
val component_graph :
Strongly_connected_components.S.directed_graph ->
(Strongly_connected_components.S.component * int list) array
end
module Make :
functor (Id : Identifiable.S) ->
sig
type directed_graph = Id.Set.t Id.Map.t
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
end
end`