2013-01-10 1 views
7

Comment la construction de la monade aide-t-elle à maintenir la pureté (à Haskell) tout en faisant des choses impures? Quand par exemple vous donnez print "Hello" exécutez-vous du code pur ou impur? C'est un détail très subtil mais quelque chose qui aide à mieux comprendre l'idée de pureté et d'impureté dans les langages fonctionnels.L'impureté monadique et la pureté de Haskell. Comment sont-ils combinés?

+1

[Vous pouvez jeter un oeil à ma réponse à ce sujet] (http://stackoverflow.com/questions/14201994/keep-variable-inside-another-function-in-haskell/14206044#14206044) mai que cela puisse t'aider. – zurgl

Répondre

17

L'expression

print "Hello" 

est en effet pur. Comme il n'imprime rien, mais construit plutôt quelque chose qui, lorsqu'il est exécuté, affiche "Hello".

Voici une analogie:

Un moine écrit sur une feuille de papier:

Go to a bordell and do filthy things with the prostitutes there. 

Peut-on accuser le moine à cause d'adultère, simplement parce qu'il a écrit une instruction de se livrer à l'adultère?

+3

Le monde réel Haskell en effet. +1 –

+0

Oui on peut l'accuser. – Dragno

5

La question stackoverflow peut répondre à votre question: In what sense is the IO Monad pure?

En bref, monade lui-même est pur , mais il peut donner des instructions impures. Pour être un peu plus précis, les monades peuvent être considérées comme une série de descriptions de calcul composables. Certains de ces calculs peuvent être sales (c'est-à-dire avoir un effet secondaire), mais la description elle-même est totalement pure et propre.

Questions connexes