
Bonsoir,
Merci de la rapidité de ta réponse, la suite dans le texte :
Le 20 décembre 2013 23:16, Valentin Robert
Réponse dans le texte :
2013/12/20 Gautier DI FOLCO
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 :
http://hackage.haskell.org/package/transformers-0.3.0.0/docs/src/Control-App...
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.