Réponse dans le texte :2013/12/20 Gautier DI FOLCO <gautier.difolco@gmail.com>
Nous avons pure :: Applicative f => a -> f aA2 : '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.
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 ? :-)
Q9 : J'ai du mal à saisir cette notion de calcul, est-ce qu'il est possible de me l'expliquer en deux mots ?Q8 : Quel est l'intérêt de Control.Applicative.Lift ?liftA3 :: Applicative f => (a -> b -> c -> d) -> f a -> f b -> f c -> f dA10 : idem mais avec trois arguments
Il est écrit : "Adding a new kind of pure computation to an applicative functor"
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...