Le truc du contexte, je pense qu'ya une bonne image pour le représenter.

Ce qui est propre au monade et que n'ont pas les applicatives, c'est que la suite d'une fonction dépende de ce qui se passe à un moment donné.
Exemple:

foo :: IO ()
foo = do
  s <- getLine
  case s of
      "hello" -> putStrLn " world!"
      _        -> foo

ici, on fait quelque chose dans IO, et selon le résultat, il peut se passer deux choses complètement différentes. On se sert beucoup de ce genre de "contexte" dans les parsers par exemple, c'est littéralement explicit, les parsers ont une forte analogie avec la monade State.

Alors qu'avec Applicative, tu peux avoir des "effets", des computations avec un petit truc en plus (parseurs qui retournent une valeur mais qui entre temps ont consumé une partie de l'input pour produire ces valeurs), etc, mais t'es obligé de garder la même "structure" pour ton code, ex:

data Person = Person { age :: Int, name :: String }

blah :: Parser Person
blah =   Parser
     <$> parseInt
     <*> parseString

T'auras beau faire ce que tu veux, taper dans tes mains, danser la salsa, etc, tu pourras pas changer le comportement de ce parseur de "personnes" selon la valeur de l'Int ou de la chaine de caractères.

Enfin, pour terminer, c'est cet article que j'ai trouvé le plus profond sur les monades: http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html

En espérant que ça t'aide à comprendre!


2014-03-26 17:47 GMT+01:00 Gautier DI FOLCO <gautier.difolco@gmail.com>:
Le 26 mars 2014 17:31, Arnaud Bailly <arnaud.oqube@gmail.com> a écrit :

Qu’est ce qui est un peu flou dans la notion de contexte ? A part le fait que ce soit justement un mot flou… qui peut désigner n’importe quoi (une liste, une valeur optionnelle, le monde).

Par exemple que représente le fait d'avoir comme contexte/cadre de calcul une liste ? que je ne peux utiliser que les fonctions propres aux listes ?
 
Sur le fait que les monade soient plus aptes à contenir les effets de bord, il me semble que c’est parce que le concept d’effet de bord implique la séquentialité, un avant et un après : l’ordre dans lequel les effets de bord opèrent est important. Et c’est justement la propriété essentielle des monades qui n’est pas celle des foncteurs applicatifs que de séquencer des “opérations”.

Je trouve l’article de Wikipedia très clair : https://en.wikipedia.org/wiki/Monads_in_functional_programming

Arnaud

Ma question est là, qu'est-ce qui défini cette notion de séquence ? en quoi les 4-5 fonctions du typeclass font qu'il y a une notion de séquence ?

_______________________________________________
Haskell-fr mailing list
Haskell-fr@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-fr




--
Alp Mestanogullari