Les functors sont des objets portant des traitements. La plupart des algorithmes ont besoin d’être adaptés pour tenir compte du contexte. Par exemple, un algorithme de tri à besoin de comparer deux objets. La notion de comparaison est variable suivant les contextes.
Comparer des données scalaires n’est pas identique à comparer des coordonnées d’objets complexes à plusieurs attributs. Pourtant, l’algorithme de tri n’a pas en s’en préoccuper. La seule chose qu’il a besoin est de pouvoir savoir si un objet doit être placé avant ou après un autre. Comment livrer la règle à appliquer pour comparer les objets ? La première idée consiste à intégrer différentes déclinaisons pour effectuer la comparaison et à ajouter un paramètre permettant de le sélectionner. Par exemple, l’algorithme peut proposer de comparer les différents types primitifs et proposer deux déclinaisons pour les chaînes de caractères. La fonction reçoit alors un paramètre de " mode ".