Transformation naturelle en Haskell
Bonjour,
Je cherche à comprendre la notion de "Transformation naturelle" (en théorie des catégories) en jouant un peu avec Haskell.
J'ai donc pris les deux foncteurs qui me parlent le plus : "List" et "Maybe" et tenté de voir si je peux construire une transformation naturelle entre les deux. Je me place dans la catégorie des types de Haskell (les objets sont les types, les morphismes sont les fonctions).
Le plus simple auquel j'ai abouti serait : $\alpha: Maybe \to List$, donné pour tout type $a$ par: $\alpha a(Just\ x) = [x]$ pour tout $x$ de type $a$ et $\alpha a(Nothing) = []$.
Dans la même idée, j'ai pensé à $First: List\to Maybe$, donné pour tout type $a$ par $First\, a(x::\_) = Just\ x$ et $First\,a ([]) = Nothing$.
N'étant pas très satisfait de mon $First$ (on jette tous les éléments à part le premier), j'en ai cherché un moins "sauvage". J'ai été obligé pour cela de me restreindre à la catégorie $M$ des types étant des monoïdes. Dans ce cas, je prends la transformation $Prod: List\to Maybe$, qui est définie pour tout type $m$ de $M$ par $Prod\,m(l) = Just\ (mconcat_m\ l)$ pour une liste $l$ d'éléments de $m$ non vide et par $Prod\,m([]) = Nothing$.
(l'opération $mconcat_m\ [x_1, \dots, x_n]$ renvoie $x_1 *\dots*x_n$ où $*$ désigne la composition dans $m$)
Mes questions :
1. Les transformations $\alpha$ et $First$ que je propose me semblent bien être des transformations naturelle... Est-ce déjà bien le cas ?
2. Même question avec mon "Prod". Ici ça me semble un peu plus suspect car Haskell autorisant les listes infinies, le $mconcat\ l$ peut ne peut s'arrêter et donc ne pas être défini mathématiquement parlant.
3. Y a-t-il une notion ou construction "en Haskell" qui utilise ces transformations naturelles (je n'ai pas l'impression de bien formuler la question....) ?
Je cherche à comprendre la notion de "Transformation naturelle" (en théorie des catégories) en jouant un peu avec Haskell.
J'ai donc pris les deux foncteurs qui me parlent le plus : "List" et "Maybe" et tenté de voir si je peux construire une transformation naturelle entre les deux. Je me place dans la catégorie des types de Haskell (les objets sont les types, les morphismes sont les fonctions).
Le plus simple auquel j'ai abouti serait : $\alpha: Maybe \to List$, donné pour tout type $a$ par: $\alpha a(Just\ x) = [x]$ pour tout $x$ de type $a$ et $\alpha a(Nothing) = []$.
Dans la même idée, j'ai pensé à $First: List\to Maybe$, donné pour tout type $a$ par $First\, a(x::\_) = Just\ x$ et $First\,a ([]) = Nothing$.
N'étant pas très satisfait de mon $First$ (on jette tous les éléments à part le premier), j'en ai cherché un moins "sauvage". J'ai été obligé pour cela de me restreindre à la catégorie $M$ des types étant des monoïdes. Dans ce cas, je prends la transformation $Prod: List\to Maybe$, qui est définie pour tout type $m$ de $M$ par $Prod\,m(l) = Just\ (mconcat_m\ l)$ pour une liste $l$ d'éléments de $m$ non vide et par $Prod\,m([]) = Nothing$.
(l'opération $mconcat_m\ [x_1, \dots, x_n]$ renvoie $x_1 *\dots*x_n$ où $*$ désigne la composition dans $m$)
Mes questions :
1. Les transformations $\alpha$ et $First$ que je propose me semblent bien être des transformations naturelle... Est-ce déjà bien le cas ?
2. Même question avec mon "Prod". Ici ça me semble un peu plus suspect car Haskell autorisant les listes infinies, le $mconcat\ l$ peut ne peut s'arrêter et donc ne pas être défini mathématiquement parlant.
3. Y a-t-il une notion ou construction "en Haskell" qui utilise ces transformations naturelles (je n'ai pas l'impression de bien formuler la question....) ?
Connectez-vous ou Inscrivez-vous pour répondre.