functor (M : sig val module_name : string end) () -> S