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?
risposta
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?
Real World Haskell davvero. +1 –
Sì, possiamo accusarlo. – Dragno
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.
- 1. Purezza funzionale usando 'let' in Haskell
- 2. Albero decisionale Apprendimento e impurità
- 3. Selettore selettore Sass e combinati
- 4. Calcoli paralleli con casualità e purezza veloci?
- 5. Quali sono i vantaggi del parsing applicativo sull'analisi monadica?
- 6. Haskell: come scrivere una funzione variadica monadica, con parametri che usano il contesto monadico
- 7. I margini CSS si sommano o sono combinati?
- 8. Visualizzazione dati atmosferici combinati
- 9. jQuery UI selezionabili e ordinabili combinati
- 10. Guess My Number, un mal di testa monadica
- 11. Che cos'è la "riflessione monadica"?
- 12. Come sono correlati i programmi `ghc-pkg` e` cabal`? (Haskell)
- 13. Kotlin supporta la comprensione monadica?
- 14. Rails 3: Convalida valori combinati
- 15. HTML5: acquisizione audio e video combinati dal browser
- 16. Purezza di predicati Prolog che utilizzano le primitive impuri
- 17. R - Titolo comune e legenda per grafici combinati
- 18. JFreeChart: è possibile combinare barre e grafici a linee combinati?
- 19. sorgenti video multipli combinati in un unico
- 20. quali sono le differenze tra Haskell e PureScript?
- 21. Come posso usare parMap con una funzione monadica?
- 22. Un compilatore può rilevare automaticamente le funzioni pure senza le informazioni sul tipo di purezza?
- 23. Feeding un'espressione monadica in meno o quando
- 24. Ricerca Entity Framework 4 su campi combinati
- 25. Come modellare questa convalida complessa per l'univocità nei campi combinati
- 26. I modelli aritmetici sono legali Haskell?
- 27. Gli array Haskell sono troppo rigidi?
- 28. I tipi di dati haskell sono co-algebre di default?
- 29. Quali sono le differenze e le similitudini dei sistemi di tipo Scala e Haskell?
- 30. Perché sono le espressioni disapprovate in Haskell?
[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