randomIO ne retourne pas une monade (les monades ne sont pas des citoyens de première classe en Haskell). randomIO, fonction zéro-adique, retourne une valeur dans la monade IO. Et c'est différent.
Quand tu fais f = randomIO tu n'évalues pas randomIO, tu crées un nouveau binding vers la fonction randomIO (en gros, un alias). En évaluant ta variable f plusieurs fois, tu appelles la fonction zéro-adique randomIO autant de fois, et tu obtiens donc des résultats différents (résultats qui sont extraits par <- et non par =).
Ce comportement se comprend mieux si on compare à la monade State qui fonctionne de manière similaire, mais à laquelle tu fournies l'objet de type World explicitement. Tu peux écrire une fonction randomState qui se comporte de façon similaire. Cette fonction serait pure. Mais avec IO, tu es incapable de reproduire l'exécution, car tu es incapable de fournir ou extraire le monde (contrairement à la monade State). En pratique, c'est donc impure. C'est important, car on programme plus en pratique qu'en théorie.
[^] # Re: cat troll.hs
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse à la dépêche Sortie du Glorious Haskell Compiler 7.8. Évalué à -3.
randomIOne retourne pas une monade (les monades ne sont pas des citoyens de première classe en Haskell).randomIO, fonction zéro-adique, retourne une valeur dans la monade IO. Et c'est différent.Quand tu fais
f = randomIOtu n'évalues pasrandomIO, tu crées un nouveau binding vers la fonctionrandomIO(en gros, un alias). En évaluant ta variablefplusieurs fois, tu appelles la fonction zéro-adiquerandomIOautant de fois, et tu obtiens donc des résultats différents (résultats qui sont extraits par<-et non par=).Ce comportement se comprend mieux si on compare à la monade
Statequi fonctionne de manière similaire, mais à laquelle tu fournies l'objet de typeWorldexplicitement. Tu peux écrire une fonctionrandomStatequi se comporte de façon similaire. Cette fonction serait pure. Mais avec IO, tu es incapable de reproduire l'exécution, car tu es incapable de fournir ou extraire le monde (contrairement à la monadeState). En pratique, c'est donc impure. C'est important, car on programme plus en pratique qu'en théorie.