2013-01-10 9 views
7

In che modo la costruzione della monade aiuta a mantenere la purezza (in Haskell) mentre allo stesso tempo fa cose impure? Quando ad esempio si fornisce print "Hello" se si sta eseguendo codice puro o impuro? È un dettaglio molto sottile ma qualcosa che aiuta a capire meglio l'idea di purezza e impurità nei linguaggi funzionali.Impurità monadica e purezza di Haskell. Come sono combinati?

+1

[Si può dare un'occhiata alla mia risposta su questo argomento] (http://stackoverflow.com/questions/14201994/keep-variable-inside-another-function-in-haskell/14206044#14206044) maggio si può essere d'aiuto. – zurgl

risposta

17

L'espressione

print "Hello" 

è davvero pura. Poiché non stampa nulla, ma piuttosto costruisce qualcosa che, una volta eseguito, stampa "Ciao".

Ecco un'analogia:

Un monaco scrive su un foglio di carta:

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

Possiamo accusare il monaco a causa di adulterio, proprio perché ha scritto un'istruzione di impegnarsi in adulterio?

+3

Real World Haskell davvero. +1 –

+0

Sì, possiamo accusarlo. – Dragno

5

La domanda in StackOverflow può rispondere alla tua domanda: In what sense is the IO Monad pure?

Insomma, Monade è di per sé puro, ma può emettere impuri istruzioni. Per essere un po 'più specifici, le monadi possono essere viste come una serie di descrizioni computabili. Alcuni di questi calcoli possono essere sporchi (cioè hanno un effetto collaterale), ma la descrizione stessa è totalmente pura e pulita.

Problemi correlati