Le 6 janvier 2014 15:06, Dan Popa <popavdan@yahoo.com> a écrit :
Bon jour,


Le typeclass Applicative à la tête suivante :
class Functor f => Applicative f where
  pure :: a -> f a
  (<*>) :: f (a -> b) -> f a -> f b
  (*>) :: f a -> f b -> f b
  (<*) :: f a -> f b -> f a

A1 : Ce qui signifie que tout type implémentant ces fonctions doivent également implémenter les fonctions de Functor.
Q1 : quelle est l'intérêt ?

Rep1. Plus! Le matematicien doit montre que une instance de cette classe est un Functor, et apres ca,
 il peut utiliser cette instance de la classe, sans probleme. Quand on ecrit quelque chose comme
CommutativeRing x =>  l'auteur du logiciel doit etre confient que l-operation a la proprietait d'etre commutatif et
toute les autre.

Rep1. More!The matematician should prove that a specific instance of a class is actually a functor, and, after it,
he can use this instance, without problems. So, when is written something like CommutativeRing x =>
the programer may base on the asumption that the operation is commutative etc.



Q4 : quel est l'intérêt ? liftA (+1) $ Just 1 n'est pas égale à pure (+1) <*> Just 1 ?

------------------------------------------------------------------------------------------------------------------------
4.Numero:   1,             +
Maybe Numero: Just 1,    donc qui ?
Rep4: La premiere expression signifier: (liftA (+1)) $ (Just 1). La cause est l'associativite a la gauche de l'aplication
de fonction. Une autre cause: la petite priorite de l'operateur $. Donc il est la derniere operation.
Rep4: The previous expression means: (liftA (+1)) $ (Just 1). The cause it the right associativity of the functional
 application. Also, the small priority of the "$" operator. It becomes the last one, here.
------------------------------------------------------------------------------------------------------------------------

Q6 : dans le cas de version Functor, quel est l'intérêt de la passer Applicative ?
liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c

Rep6: Ca signifier que f este quelque chose qui peut etre aplique a a b et c. Une abstraction, une fonction, c'est ca.
Rep6: This means that f is something that can be aplied to a b and c and all. It's an abstraction (anonymous function) or a function.
---------------------------------------------------------------------------------------------------------------------------
Quand on transfere une calcul dans la Monade Maybe on doit transfere les valeurs, donc 1 deviene Just 1,
les operations (n'emporte pas quelques arguments) - donc on va avait plusieurs variants de lifting -
et aussi la non valeur qui devien Nothing.
Donc: (Just 1) `(lifting2 (+)) (Just 2) = (Just 3)  et  biensure, 3=1+2.
Nais: (Just 1) `(lifting2 (/)) (Just 0) = Nothing  

Dans cette maniere on peu utiliser les non valeurs. "Nothing" est une erreur qui a ete ajouter a la structure algebrieque quie nous enteresee.

Escuse-moi pour ma langue. Je ne suit pas natif. Et le clavier, ici, est "anglophone".

Enjoy !
Dan

Merci beaucoup pour ces précisions.