module type G = sig ... endmodule Dijkstra : functor (G : G) -> functor (W : sig ... end) -> sig ... endmodule BellmanFord : functor (G : G) -> functor (W : sig ... end) -> sig ... endmodule type WJ = sig ... endmodule Johnson : functor (G : G) -> functor (W : sig ... end) -> sig ... endmodule Check : functor (G : sig ... end) -> sig ... end