• [^] # Re: chaud

    Posté par . En réponse au journal Tagless-final ou l'art de l'interprétation modulaire.. Évalué à 4. Dernière modification le 23 novembre 2016 à 14:40.

    La notion de foncteur a ses origines dans un domaine des maths appelé "théorie des catégorie". C'est une théorie très abstraite dans le sens qu'elle s'intéresse aux transformations qu'on peut faire entre différent pans des mathématiques, principalement.

    Les catégories sont construites à partir d'objets mathématiques (les ensembles, les classes, les théories mathématiques elle même (comme les groupes en algèbre abstraite - les groupes de symétrie entre les solutions du rubix-cube par exemple).

    Pour tenter de donner une idée d'une catégorie, mettons qu'on s'intéresse aux groupes de symétrie du Rubix-cube. La Catégorie_des_groupes c'est la donnée de tous les groupes et de toutes les transformations qu'on peut établir entre les groupes. Le groupe de symétrie du Rubix cube en est un des objet. La notion de Morphisme_de_groupes permet de définir comment on transforme un groupe en un autre groupe.

    Le second exemple de catégorie qu'on peux donner est la catégorie des ensembles, et là le rapport avec les langages de programmations fonctionnel sera plus apparent : La Catégorie_des_ensembles. Dans la catégorie des ensembles, les objets de base sont les ensembles (Les entiers naturels y sont au même niveau que le groupe de symétrie du rubix cube l'était dans la catégorie des groupes). Dans cette catégorie, les transformations qui transforment un ensemble en un autre ensemble sont ... les fonctions. Les lambdas, quoi.

    Maintenant pour la notion de foncteur. Un foncteur est une généralisation de ce qu'est une fonction entre deux ensembles, mais pour les catégories. Le "domaine" d'un foncteur est une catégorie, son co-domaine est une autre catégorie. Mais comme on est dans un niveau d'abstraction supérieur, on ne peux pas se contenter de dire quelle est l'image d'un membre d'une catégorie - imaginons que l'image du groupe de symétrie du Rubix-Cube si notre catégorie domaine est la catégorie des groupe soit l'ensemble des entiers naturels - parce que les catégorie ne sont pas QUE ces objets. On doit aussi établir quels morphisme de groupe correspond à quelle fonction.

    Voilà pourquoi la notion de foncteur est intéressante quand on parle de langage de programmation et de compilation / optimisation : on peut avoir des foncteurs dont le "domaine" et le "co-domaine" sont la même catégorie, et comme un foncteur transforme dans ce cadre une fonction en fonction, on trouve naturellement un cadre théorique pour modéliser tout ça. C'est intéressant pour les théoriciens naturellement, parce que l'arsenal théorique des catégorie est applicable pour raisonner sur les programmes, et que le niveau d'abstraction est bon - ainsi, la notion de foncteur est implémentée dans Haskell par exemple, et son analogue (ou plutôt la manière dont c'est implémenté dans Ocaml) sont les modules. Comme les modules sont paramétrée par des type, en l'occurence un type de départ et un type d'arrivée, les fonction définies dans ce modules définissent de facto des foncteurs qui transforment les programmes en programme dans une représentation différente. Oui parce que le truc que j'ai pas dit à propos de la théorie des catégorie c'est qu'on choisit pas les transformations au hasard, on les choisit de manière à ce que certaines structures ou certains invariants soient préservés par les transformations entre les différentes catégories. C'est ce qui fait qu'elles sont intéressantes mathématiquement.