¿Por qué el comité de Haskell eligió mónadas para representar las E / S?

36

El lenguaje Clean utiliza tipos únicos para manejar E / S en un entorno puramente funcional. ¿Por qué el comité de Haskell fue con mónadas ? ¿Hubo otras propuestas para manejar el estado que el comité investigó pero en contra?

Nota : No estoy buscando una guerra santa entre mónadas y otras formas de computación. Mantengamos el tema solo para las elecciones del comité con respecto a E / S.

chrisaycock
fuente

Respuestas:

16

De acuerdo con A History of Haskell: Being Lazy With Class (ver sección 7) inicialmente se consideraron tres modelos diferentes: transmisiones , continuaciones y "pasaje del mundo" (no sé mucho sobre Clean, pero parece que esta es la manera Clean) ?)

El último párrafo de la sección 7.2 indica que el concepto de tipo de unicidad no se desarrolló en este momento:

Sin embargo, este modelo de "traspaso mundial" nunca fue un contendiente serio para Haskell, porque no vimos una manera fácil de garantizar el acceso "de un solo hilo" al estado mundial. (Los diseñadores de Clean finalmente resolvieron este problema mediante el uso de "tipos de unicidad")

El concepto de mónadas parece haberse introducido (reutilizado de otro trabajo) en revisiones posteriores de Haskell, ya que resultó en un código más limpio (en comparación con las continuaciones / secuencias):

El enfoque monádico dominó rápidamente los modelos anteriores. Los tipos son más compactos y más informativos.

johlo
fuente
10

La mejor explicación que he visto es " Tackling the Awkward Squad " de Simon Peyton-Jones .

Por lo que recuerdo del artículo, los problemas relacionados con la pereza jugaron un papel importante en la decisión. (No estoy seguro si Clean es perezoso por defecto de la misma manera que lo es Haskell).

rtperson
fuente
55
Limpio es perezoso también.
chrisaycock