Почему комитет Haskell выбрал монады для представления ввода / вывода?

36

Чистый язык использует уникальность типов для обработки ввода / вывода в чисто функциональном назначении. Почему комитет Хаскелла пошел с монадами вместо этого? Были ли другие предложения по обращению с государством, которые комитет расследовал, но отклонил?

Примечание : я не ищу священную войну между монадами и другими формами вычислений. Давайте оставим тему только для выбора комитета относительно ввода / вывода.

chrisaycock
источник

Ответы:

16

Согласно «Истории Хаскелла: быть ленивым с классом» (см. Раздел 7), изначально рассматривались три разные модели: потоки , продолжения и «прохождение мира» (я не знаю много о Чистоте, но, похоже, это Чистый путь ?).

Последний абзац раздела 7.2 указывает, что концепция типа уникальности не была разработана в это время:

Однако эта «проходящая по миру» модель никогда не была серьезным соперником для Haskell, потому что мы не видели простого способа обеспечить «однопоточный» доступ к мировому государству. (Дизайнеры Clean в конечном итоге решили эту проблему с помощью «типов уникальности»)

Концепция монад, кажется, была введена (повторно использована из другой работы) в более поздних версиях Haskell, поскольку она привела к более чистому коду (по сравнению с продолжениями / потоками):

Монадный подход быстро доминировал над ранними моделями. Типы более компактны и более информативны.

johlo
источник
10

Лучшее объяснение, которое я видел, - « Борьба с неуклюжим отрядом » Саймона Пейтона-Джонса .

Из того, что я помню из газеты, вопросы, связанные с ленью, сыграли большую роль в решении. (Я не уверен, что Clean по умолчанию ленив, как и Haskell.)

rtperson
источник
5
Чистый тоже ленивый.
Крисайкок