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