Vous avez très peu de bonnes réponses. Je vais planter dans:
Un foncteur, dans le sens mathématique, est un type spécial de fonction sur une algèbre. C'est un minimum de la fonction qui associe à une algèbre à l'autre de l'algèbre. "Minimality" est exprimé par le foncteur lois.
Il y a deux façons de regarder cette. Par exemple, les listes sont des foncteurs sur un certain type. C'est, étant donné une algèbre de plus d'un type 'a', vous pouvez générer un compatible algèbre de listes contenant des choses du type "un". (Par exemple: la carte qui prend un élément à une liste singleton contenant: f(a) = [a]) Encore une fois, la notion de compatibilité est exprimé par le foncteur lois.
D'autre part, compte tenu d'un foncteur f "sur" un type a, (qui est, f a est le résultat de l'application du foncteur f de l'algèbre de type a), et la fonction de g: a -> b, on peut calculer une nouvelle foncteur F = (fmap g) qui associe f a et f b. En bref, fmap est la partie de F que les cartes "foncteur parties" à "foncteur pièces", et g est la partie de la fonction que les cartes de "l'algèbre des parties" à "l'algèbre de parties". Elle prend une fonction, un foncteur, et une fois terminé, il EST un foncteur.
Il pourrait sembler que les différentes langues à l'aide de différentes notions de foncteurs, mais ils ne sont pas. Ils sont simplement à l'aide de foncteurs sur différentes algèbres. OCamls a une algèbre de modules et foncteurs de plus que l'algèbre vous permettent d'attacher, de nouvelles déclarations d'un module dans une "compatible".
Un Haskell foncteur n'est PAS un type de classe. C'est un type de données à une variable libre qui satisfait le type de classe. Si vous êtes prêt à creuser dans les entrailles d'un type de données (sans variables libres), vous pouvez réinterpréter un type de données comme un foncteur sur une algèbre sous-jacente. Par exemple:
données F = F Int
est isomorphe a ' la classe d'Entiers. Donc F, en tant que constructeur de valeurs, est une fonction des cartes Int à F Int, un équivalent de l'algèbre. C'est un foncteur. D'autre part, vous n'obtenez pas fmap gratuitement ici. C'est ce que le filtrage est pour.
Les foncteurs sont bonnes pour la "fixation" des choses à des éléments de algèbres, dans un algébriquement compatible.