Чому комітет Haskell обрав монадів для представлення вводу-виводу?


36

Чистий мову використовує унікальність типів для обробки введення / виводу в чисто функціональне призначення. Чому комітет Хаскелла натомість пішов з монадами ? Чи були інші пропозиції щодо розгляду, що комітет розслідував, але вирішив проти?

Примітка : я не шукаю священної війни між монадами та іншими формами обчислень. Давайте збережемо цю тему лише на виборах комітету щодо вводу / виводу.


Відповіді:


16

Відповідно до «Історії Хаскелла: Бути ледачим із класом» (див. Розділ 7) спочатку розглядалися три різні моделі: потоки , продовження та «проходження світу» (я не знаю багато про Clean, але це звучить так, як це Clean Way ?).

Останній абзац розділу 7.2 вказує, що наразі концепція типу унікальності не була розроблена:

Ця модель, що проходить у світі, ніколи не була серйозним претендентом на Haskell, тому що ми не бачили простого способу забезпечити "однопоточний" доступ до світової держави. (Дизайнери «Чистих» врешті вирішили цю проблему завдяки використанню «унікальних типів»)

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

Монадичний підхід швидко домінував у попередніх моделях. Типи більш компактні та більш інформативні.


10

Найкраще пояснення, що я бачив, - це " Заходи проти неприємного загону " Саймона Пейтона-Джонса .

З того, що я пам’ятаю з паперу, питання навколо лінощів відігравали велику роль у прийнятті рішення. (Я не впевнений, чи Clean за замовчуванням лінивий так само, як і Haskell.)


5
Чисте теж ледачий.
chrisaycock
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.