Mavryk_workers.WorkerWorkers, their types and signatures, and a functor to make them.
module type T = sig ... endFunctor to build a group of workers. At that point, all the types are fixed and introspectable, but the actual parameters and event handlers can be tweaked for each individual worker.
module MakeGroup
(Name : Mavryk_base.Worker_intf.NAME)
(Request : Mavryk_base.Worker_intf.REQUEST) :
sig ... endmodule WG = MakeGroup (Name) (Request) defines a worker group all using the same Name, Event, etc. To instantiate a worker from a group, you must give the Types parameter: WG.MakeWorker(Types). This defines a Worker module of type T. This last instantiation can be safely used as first class module.
module MakeSingle
(Name : Mavryk_base.Worker_intf.NAME)
(Request : Mavryk_base.Worker_intf.REQUEST)
(Types : Mavryk_base.Worker_intf.TYPES) :
T
with module Name = Name
and module Request = Request
and module Types = TypesMakeSingle (Name) (Request) (Types) is the same as using MakeGroup and then MakeWorker. It's a special case which you can use if you only ever need a single instantiation.