Abstract. Standard ML has a module system that allows one to define parametric modules, called /urictots. Functors are "first-order, " meaning that runetots themselves cannot be passed as parameters or returned as results of functor apphcations. This paper presents a semantics for a higher-order module system which generalizes the module system of Standard ML. The higher-order functors described here are implemented in the current version of Standard ML of New Jersey and have proved useful in programming practice.