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

Valentin Robert valentin.robert.42 at gmail.com
Sat May 24 18:22:08 UTC 2014


As-tu testé avec des fonctions f et g qui ne commutent pas ?

- Valentin


2014-05-24 11:03 GMT-07:00 Gautier DI FOLCO <gautier.difolco at gmail.com>:

> Le 18 mai 2014 15:27, Arnaud Bailly <arnaud.oqube at gmail.com> a écrit :
>
> Je plussoie sur le cours NICTA que j’ai découvert récemment.
>>
>> Tony Morris est un génie, dommage que ce soit aussi un connard.
>>
>> On 18 May 2014, at 15:20, Gautier DI FOLCO <gautier.difolco at gmail.com>
>> wrote:
>>
>> Le 18 mai 2014 14:36, Simon Marechal <simon at banquise.net> a écrit :
>>
>>> On 05/18/2014 12:04 PM, Gautier DI FOLCO wrote:
>>> > Merci par avance pour vos réponses et votre patience.
>>>
>>> A mon avis, le plus efficace pour vraiment comprendre ce qu'il se passe,
>>> c'est de désucrer le code à la main. Pour moi le truc qui m'a vraiment
>>> permis d'avancer ça a été d'écrire "State" et "Maybe" moi même, juste en
>>> suivant les types, puis de faire "StateT" et "MaybeT".
>>>
>>> Il y a ce "cours", qui est en fait une succession d'exercices, qui je
>>> pense est excellent :
>>>
>>> https://github.com/NICTA/course
>>>
>>
>> ça a l'air génial ce dépôt, merci.
>> _______________________________________________
>> Haskell-fr mailing list
>> Haskell-fr at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-fr
>>
>>
>>
>> _______________________________________________
>> Haskell-fr mailing list
>> Haskell-fr at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-fr
>>
>>
> Je suis de retour...
>
> Je suis sur le cours de NICTA et je suis sur la définition de l'instance
> Apply de State.
>  Voilà à quoi j'arrive :
> State f <*> State g = State $ \x -> let (a, b) = g x in let (c, d) = f b
> in (c a, d)
>
> Ce qui n'est pas très éloigné de la solution (
> https://github.com/tonymorris/course/blob/master/src/Course/State.hs#L45)
> :
>
> instance Apply (State s) where
>   State f <*> State a =
>     State (\s -> let (g, t) = f s
>                      (z, u) = a t
>                  in (g z, u))
>
> Si je les met côte à côte :
> State f <*> State g = State $ \x -> let (a, b) = g x in let (c, d) = f b
> in (c a, d)
> State f <*> State g = State $ \x -> let (c, d) = f x in let (a, b) = g d
> in (c a, b)
>
> Et là, je suis troublé...
> J'inverse l'évaluation de f et de g et ça continue de fonctionner (selon
> les tests et 2-3 cas fait à la main).
>
> J'ai trois questions :
> 1. Est-ce que j'ai bon ?
> 2. Si oui, pourquoi en général on fait plus comme la solution ?
> 3. Si oui (1), pourquoi est-ce que les deux sont équivalents ?
>
> Merci par avance.
>
> _______________________________________________
> Haskell-fr mailing list
> Haskell-fr at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-fr
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-fr/attachments/20140524/3b581858/attachment.html>


More information about the Haskell-fr mailing list