Bonsoir,

Merci de la rapidité de ta réponse, la suite dans le texte :


Le 20 décembre 2013 23:16, Valentin Robert <valentin.robert.42@gmail.com> a écrit :
Réponse dans le texte :


2013/12/20 Gautier DI FOLCO <gautier.difolco@gmail.com>
Nous avons pure :: Applicative f => a -> f a
A2 : 'f a' signifie de type a implémentant le typeclass f (Applicative dans ce cas précis

Hmm pas vraiment. `f a` signifie de type `f a`, où `f` est un foncteur applicatif.

Donc pour 'f a', 'f' est un type paramétrique qui implémente le typeclass Applicative et qui a un paramètre 'a' ?
Ça signifie donc que les types n'ayant pas ou plusieurs paramètre de type ne peuvent pas être utilisé dans cette fonction ? Comme Either ?
 
liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c
A8 : idem mais avec deux arguments
A9 : liftA2 (+) (Just 2) (Just 1) est équivalent à liftA (+) (Just 2) <*> Just 1
Q7 : Quel est l'intérêt du coup ?

Même réponse. Tu sembles chercher à éviter toute redondance. Pourquoi ne pas écrire tout ton code avec juste des lambdas et des applications ? :-)

En fait je cherche à savoir pourquoi il y a plusieurs formes, mais visiblement je me pose trop de questions :/
 
 
liftA3 :: Applicative f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d
A10 : idem mais avec trois arguments

Q8 : Quel est l'intérêt de Control.Applicative.Lift ?
Il est écrit : "Adding a new kind of pure computation to an applicative functor"
Q9 : J'ai du mal à saisir cette notion de calcul, est-ce qu'il est possible de me  l'expliquer en deux mots ?

Je ne saurai expliquer ça clairement, mais tu peux jeter un coup d'oeil ici :


En particulier, l'implémentation de `fmap` et le commentaire du type Errors peuvent te donner une idée de ce qu'il se passe...

Même une piste m'aiderais :/
J'ai l'impression qu'il s'agit de gérer soit une valeur soit une valeur et une fonction à lui appliquer, mais en quoi la valeur seule serait Pure ? Qu'est-ce que pure dans ce contexte ?

Merci par avance de votre réponse.