# Four Functors

"Functor" is one of those words that seems to be adopted for domain-specific use rather regularly. I know of four distinct-ish meanings of the word, all of which belong to languages, three of which belong to formal languages, and two of which belong to programming languages.

1. In linguistics, a functor is a "function word", a word who's use is not chiefly lexical, but grammatical or discursive. Function words are contrasted with "content words", which chiefly carry meaning. A good way to understand the distinction is to consider that function words don't denote unless paired with one or more content words.

2. In mathematics, a functor is a device of category theory, a structure-preserving map between two (or one) categories. In essence, functors facilitate the transportation of reasoning carried out with respect to one sort of structure into the context/form of another sort of structure.

3. In the programming language OCaml, a functor is a module-level function, i.e. a module that is parametric with respect to other modules that satisfy the properties it requires. Functors are most commonly used to generate specialized instances of generic modules by passing concrete details such as types and functions--- packaged as a module--- into a generic implementation.

4. In C++, functors behave very similarly to their counterparts in OCaml, except with classes rather than with modules. The effect is slightly less powerful, but the goal is the same: to generate new classes by the application of a parametric class to another, usually more concrete class.

Isn't it neat, how one word takes on several distinct but related meanings?