Perché il comitato di Haskell ha scelto le monadi per rappresentare l'I / O?

36

La lingua pulita utilizza tipi di unicità per gestire l'I / O in un ambiente puramente funzionale. Perché il comitato di Haskell ha scelto invece monade ? Esistevano altre proposte di trattamento che la commissione ha esaminato ma ha deciso contro?

Nota : non sto cercando una guerra santa tra monadi e altre forme di calcolo. Manteniamo l'argomento solo per le scelte del comitato in merito all'I / O.

    
posta chrisaycock 21.05.2012 - 02:40
fonte

2 risposte

16

Secondo Una storia di Haskell: essere pigri Con Class (vedere la sezione 7) inizialmente sono stati considerati tre diversi modelli: stream , continuations e "world passing" (I don So molto di Clean, ma sembra che questo sia il modo pulito?).

L'ultimo paragrafo della sezione 7.2 indica che il concetto di unicità non è stato sviluppato in questo momento:

This “world-passing” model was never a serious contender for Haskell, however, because we saw no easy way to ensure “single-threaded” access to the world state. (The Clean designers eventually solved this problem through the use of “uniqueness types”)

Il concetto di monade sembra essere stato introdotto (riutilizzato da altri lavori) nelle revisioni successive di Haskell poiché ha portato a un codice più pulito (rispetto a continuazioni / flussi):

The monadic approach rapidly dominated earlier models. The types are more compact, and more informative.

    
risposta data 27.05.2012 - 21:12
fonte
10

La migliore spiegazione che ho visto è quella di Simon Peyton-Jones " Affrontare il problema Squadra Awkward . "

Da quello che ricordo dal giornale, le questioni riguardanti la pigrizia hanno giocato un ruolo importante nella decisione. (Non sono sicuro che Clean sia pigro di default allo stesso modo di Haskell.)

    
risposta data 21.05.2012 - 17:20
fonte

Leggi altre domande sui tag