`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`