module Header : sig ... endmodule type ASYNC = sig ... endmodule type READER = sig ... endmodule type WRITER = sig ... endmodule HeaderReader : functor (Async : ASYNC) -> functor (Reader : READER with type 'a t = 'a Async.t) -> sig ... endmodule HeaderWriter : functor (Async : ASYNC) -> functor (Writer : WRITER with type 'a t = 'a Async.t) -> sig ... endmodule type IO = sig ... end