Il est difficile de trouver des exemples où vous avez besoin de foncteurs applicatifs. Je peux comprendre pourquoi un programmeur Haskell intermédiaire se poserait cette question, car la plupart des textes d'introduction présentent des cas dérivés de Monades en utilisant uniquement des Foncteurs Applicatifs comme interface pratique.
L'idée clé, comme mentionné ici et dans la plupart des introductions au sujet, est que les Foncteurs Applicatifs se situent entre les Foncteurs et les Monades (même entre les Foncteurs et les Flèches). Toutes les Monades sont des Foncteurs Applicatifs mais tous les Foncteurs ne sont pas Applicatifs.
Par conséquent, parfois nous pouvons utiliser des combinateurs applicatifs pour quelque chose pour laquelle nous ne pouvons pas utiliser des combinateurs monadiques. Un tel exemple est ZipList
(voir aussi cette question SO pour quelques détails), qui est juste un wrapper autour des listes afin d'avoir une différente instance Applicative que celle dérivée de l'instance Monad de liste. La documentation sur les Foncteurs Applicatifs utilise la ligne suivante pour donner une notion intuitive de ce que ZipList
est :
f <$> ZipList xs1 <*> ... <*> ZipList xsn = ZipList (zipWithn f xs1 ... xsn)
Comme signalé ici, il est possible de créer des instances quasi-fonctionnelles de Monade qui fonctionnent presque pour ZipList.
Il existe d'autres Foncteurs Applicatifs qui ne sont pas des Monades (voir cette question SO) et ils sont faciles à trouver. Avoir une interface alternative pour les Monades est bien, mais parfois créer une Monade est inefficace, compliqué, voire impossible, et c'est à ce moment-là que vous avez besoin de Foncteurs Applicatifs.
Avertissement : Créer des Foncteurs Applicatifs pourrait également être inefficace, compliqué et impossible, en cas de doute, consultez votre théoricien de la catégorie local pour l'utilisation correcte des Foncteurs Applicatifs.
0 votes
Il s'agit seulement d'un lien que je peux donner, mais ici se trouve une belle description des Foncteurs Applicatifs avec des exemples.
1 votes
Possible duplicate: Comment utiliser Control.Applicative pour écrire un code Haskell plus propre?