Por que o comitê Haskell escolheu mônadas para representar E / S?

36

A linguagem Clean usa tipos de exclusividade para manipular E / S em uma configuração puramente funcional. Por que o comitê Haskell optou por mônadas ? Houve outras propostas de tratamento que o comitê investigou, mas decidiu contra?

Nota : Não estou procurando uma guerra santa entre mônadas e outras formas de computação. Vamos manter o tópico apenas nas opções do comitê em relação à E / S.

chrisaycock
fonte

Respostas:

16

De acordo com A History of Haskell: Being Lazy With Class (consulte a seção 7), três modelos diferentes foram considerados inicialmente: fluxos , continuações e "passagem pelo mundo" (não sei muito sobre o Clean, mas parece que esse é o caminho do Clean) ?).

O último parágrafo da seção 7.2 indica que o conceito de tipo de exclusividade não foi desenvolvido no momento:

Esse modelo de “passagem pelo mundo” nunca foi um candidato sério para Haskell, no entanto, porque não vimos uma maneira fácil de garantir o acesso “de thread único” ao estado mundial. (Os designers do Clean resolveram esse problema com o uso de "tipos de exclusividade")

O conceito de mônadas parece ter sido introduzido (reutilizado em outros trabalhos) em revisões posteriores de Haskell, uma vez que resultou em código mais limpo (comparado a continuações / fluxos):

A abordagem monádica rapidamente dominou os modelos anteriores. Os tipos são mais compactos e mais informativos.

johlo
fonte
10

A melhor explicação que eu vi é " Tackling the Awkward Squad ", de Simon Peyton-Jones .

Pelo que me lembro do artigo, questões relacionadas à preguiça tiveram um papel importante na decisão. (Não tenho certeza se o Clean é preguiçoso por padrão, da mesma forma que Haskell.)

rtperson
fonte
5
Limpo também é preguiçoso.
Chrisaycock #