
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
Le 26 mars 2014 17:31, Arnaud Bailly
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