A reduction in generality, usually for the sake of increased efficiency. If a piece of code is specialised for certain values of certain variables (usually function arguments), this is known as "partial evaluation". In a language with overloading (e.g. Haskell), an overloaded function might be specialised to a non-overloaded instance at compile-time if the types of its arguments are known.