Ces termes ont été mentionnés dans mon cours universitaire. La recherche rapide sur Google m'a indiqué des articles universitaires, mais je cherche une explication simple.
functional-programming
haskell
Gaurav Abbi
la source
la source
C
est un objet dans une catégorie (disonsCC
),F
est un foncteur deCC -> CC
sorte qu'il se mappeCC
sur lui-même. Maintenant,F CC -> CC
c'est juste une flèche normale dans la catégorieCC
. Ainsi , uneF
algèbre est un objetC : CC
et une flècheF C -> C
enCC
Réponses:
Même si 2 réponses ont déjà été fournies, je ne pense pas que le "split banane" ait été expliqué ici.
Il est en effet défini dans "Programmation fonctionnelle avec bananes, lentilles, enveloppes et barbelés, Erik Meijer Maarten Fokkinga, Ross Paterson, 1991"; cet article est difficile à lire (pour moi) en raison de son utilisation intensive de Squiggol. Cependant, "Un tutoriel sur l'universalité et l'expressivité du pli, Graham Hutton, 1999" contient une définition plus facile à analyser:
la source
Il s'agit donc en fait d'une référence à un article de Meijer et de quelques autres intitulé " Programmation fonctionnelle avec des bananes, des lentilles, des enveloppes et des barbelés ", l'idée de base est que nous pouvons prendre n'importe quel type de données récursives, comme par exemple
et nous pouvons factoriser la récursivité dans une variable de type
la raison pour laquelle j'ai ajouté cela
F
parce que c'est maintenant un foncteur! Cela nous permet également d'imiter des listes, mais avec une torsion: pour construire des listes, nous devons imbriquer le type de listePour récupérer notre liste d'origine, nous devons continuer à l'imbriquer indéfiniment . Cela nous donnera un type
ListFF
oùPour ce faire, définissez un "type de point fixe"
En tant qu'exercice, vous devriez vérifier que cela satisfait notre équation ci-dessus. Maintenant, nous pouvons enfin définir ce que sont les bananes (catamorphismes)!
ListAlg
s sont le type "d'algèbres de liste", et nous pouvons définir une fonction particulièreEn outre
Semble familier?
cata
est exactement le même que les plis droits!Ce qui est vraiment intéressant, c'est que nous pouvons faire cela plus que de simples listes, tout type qui est défini avec ce "point fixe d'un foncteur" a un
cata
et pour les accomder, il suffit de relâcher la signature de typeCeci est en fait inspiré d'un morceau de théorie des catégories sur lequel j'ai écrit , mais c'est la viande du côté Haskell.
la source
Bien que jozefg ait fourni une réponse, je ne sais pas s'il a répondu à la question. La "loi de fusion" est expliquée dans l'article suivant:
Fondamentalement, il dit que dans certaines conditions, vous pouvez combiner ("fusionner") la composition d'une fonction et la plier en un seul pli, donc en gros
Les conditions de cette égalité sont
La "loi banane split" ou "banana split law" est tirée de l'article
Malheureusement, l'article est très difficile à déchiffrer car il utilise le formalisme Bird – Meertens, je ne pouvais donc pas en faire la tête ou la queue. Pour autant que je comprenne la "loi du partage des bananes", cela dit que si vous avez 2 plis opérant sur le même argument, ils peuvent être fusionnés en un seul pli.
la source