[Haskell-fr] Éclaircissements sur les monades

Gautier DI FOLCO gautier.difolco at gmail.com
Wed Mar 26 18:32:11 UTC 2014


Le 26 mars 2014 17:55, Alp Mestanogullari <alpmestan at gmail.com> a écrit :

> 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-fr/attachments/20140326/08372cf7/attachment.html>


More information about the Haskell-fr mailing list