
Le 26 mars 2014 17:55, Alp Mestanogullari
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.
En gros tu crée une dépendance qui force ton exécution dans un certain ordre en lui passant le précédent monde ?
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:
Tu entends quoi par "computation" (désolé, je bloque sur ce terme, ça ne rentre pas :/) Tu veux dire truc en moins ou Monade ? si non, je sur largué. Je ne comprends pas la dernière partie de la phrase.
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.
Perdu :/ Quelle est la "déclaration" (je ne sais pas comment ça se dit : data/type/newtype) de Parser ? Comment le monde est "passé" aux parse* ? Comment il sait quel type de Parser il doit produire ? (le première ligne du corps de blah appel le Constructeur du type Parser, comment sait-il qu'il va "retourner" une valeur de type Parser Person ? vu que Person n'est indiqué nul part dans le corps).
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
Je vais le rererelire, à chaque fois je comprends un truc de nouveau.