[Haskell-fr] Fw: Éclaircissements sur les monades

Gautier DI FOLCO gautier.difolco at gmail.com
Sun May 18 13:19:42 UTC 2014


Le 18 mai 2014 13:49, Arnaud Bailly <arnaud.oqube at gmail.com> a écrit :

> computation m = …
>
> ne peut pas fonctionner puisque computation à la type Reader … donc ne
> prend pas d’argument: tout est encapsulé dans la fonction runReader.
>
> La magie provient de >>= qui, d’après ta définition, construit un nouveau
> reader en chaînant et décapsulant la première monade et la continuation
> (k): on applique la fonction contenue dans Reader  avec (runReader m r), on
> produit une nouvelle monade en applicant k, on décapsule cette deuxième
> monade avec le descend appel à runReader. Tout ça est une fonction qui est
> encapsulée dans un Reader, donc qui devient le champ runReader de Reader.
>

Raaah, je l'avais oublié (le >>=), effectivement, tout s'éclaire !


>
> Donc pour répondre à tes questions:
>
> Q1: la fonction est un champ de Reader accessible avec runReader :: r ->
> a, donc tu extraies cette fonction du reader, et ensuite tu peux lui passer
> un argument.
> Q2: cf. le chaînage ci-dessus. Le MyState est passé lors de la première
> invocation à runReader qui va dérouler la “computation”
> Q3: pareil.
>
> Le “principe”de reader et de beaucoup de code monadique est de construire
> des expressions, qui ne sont évaluées qu’au toplevel, en passant un
> argument à runXXX pour “démarrer” la chaîne de calcul. IO est un cas
> particulier qui démarre par l’appel à main. Tu ne peux pas (sauf magie)
> extraire une valeur de IO, alors que tu peux extraire une valeur (une
> fonction) depuis un Reader.
>

ok, compris, merci.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-fr/attachments/20140518/d445f1e4/attachment.html>


More information about the Haskell-fr mailing list