• [^] # Re: cat troll.hs

    Posté par (site web personnel) . En réponse à la dépêche Sortie du Glorious Haskell Compiler 7.8. Évalué à -1.

    D’un point de vue moins pragmatique, tu te trompes. Ta fonction foo n’a pas renvoyé un résultat différent à chaque fois. Elle a toujours renvoyé une Num a => IO a. Le fait qu’a un moment donné quelque chose (une valeur numérique, probablement un Int) ait été généré à partir de cette IO n’affecte pas la pureté de foo.

    La fonction n'est pas pure, car son résultat dépend d'un état caché, celui de la monade IO. Plus précisément, elle dépend de randomIO qui n'est pas pure et dont elle extrait une valeur qu'elle retourne. On en a pour preuve que le résultat est effectivement différent.

    Tu parles de toujours retourner Num a => IO a, mais c'est le type, non la valeur. Le type est habité par un grand nombre de valeurs, plusieurs desquelles peuvent être retournées par des appels successifs à foo, ce qui s'observe en pratique.

    (NB: on peut tout à fait avoir une fonction pure dans IO:

    bar x = do
     inutile <- return 5
     return x

    Cette fonction retournera toujours la même valeur, et n'effectue aucun effet de bord observable, en dépit du fait qu'elle est "marquée".)