Por que o comitê Haskell escolheu mônadas para representar I / O?

36

A linguagem Limpar usa tipos de exclusividade para manipular E / S em uma configuração puramente funcional. Por que o comitê de Haskell foi com monads ? Houve outras propostas para lidar com o estado que a comissão investigou, mas decidiu contra?

Nota : Eu não estou procurando por uma guerra santa entre mônadas e outras formas de computação. Vamos manter o tópico apenas para as escolhas do comitê sobre I / O.

    
por chrisaycock 21.05.2012 / 02:40
fonte

2 respostas

16

De acordo com Uma história de Haskell: sendo preguiçoso Com a Classe (consulte a seção 7), três modelos diferentes foram considerados inicialmente: fluxos , continuações e "passagem pelo mundo" não sei muito sobre Clean, mas parece que esta é a maneira limpa?).

O último parágrafo da seção 7.2 indica que o conceito tipo de exclusividade não foi desenvolvido no 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”)

O conceito de mônadas parece ter sido introduzido (reutilizado de outro trabalho) em revisões posteriores do Haskell, pois resultou em código mais limpo (comparado a continuações / streams):

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

    
por 27.05.2012 / 21:12
fonte
10

A melhor explicação que vi é a de " de Simon Peyton-Jones Esquadrão desajeitado . "

Do que eu me lembro do artigo, as questões sobre a preguiça tiveram um papel importante na decisão. (Não tenho certeza se o Clean é preguiçoso por padrão da mesma maneira que o Haskell é.)

    
por 21.05.2012 / 17:20
fonte