Compile-time sequences of types are one of the basic concepts of C++
template metaprogramming. Differences in types of objects being
manipulated is the most common point of variability of similar, but
not identical designs, and these are a direct target for
metaprogramming. Templates were originally designed to address this
exact problem. However, without predefined mechanisms for
representing and manipulating sequences of types as opposed to
standalone template parameters, high-level template metaprogramming
is severely limited in its capabitilies.

The MPL recognizes the importance of type sequences as a fundamental
building block of many higher-level metaprogramming designs by
providing us with a conceptual framework for formal reasoning
and understanding of sequence properties, guarantees and
characteristics, as well as a first-class implementation of that
framework — a wealth of tools for concise, convenient,
conceptually precise and efficient sequence manipulation.