The Standard ML module language comprises the mechanisms for structuring programs into separate units.  Program units are called structures.  A structure consists of a collection of components, including types and values, that constitute the unit.  Composition of units to form a larger unit is mediated by a signature, which describes the components of that unit.  A signature may be thought of as the type of a unit.  Large units may be structured into hierarchies using substructures.   Generic, or parameterized, units may be defined as functors.