Dlaczego komitet Haskell wybrał monady do reprezentowania we / wy?

36

Czysty język wykorzystuje wyjątkowość typy do obsługi I / O w warunkach czysto funkcjonalnego. Dlaczego komitet Haskell zamiast tego poszedł z monadami ? Czy były inne propozycje postępowania, w których komisja zbadała sprawę, ale podjęła decyzję odmowną?

Uwaga : nie szukam świętej wojny między monadami i innymi formami obliczeń. Pozostańmy przy temacie wyborów komitetu dotyczących wejścia / wyjścia.

chrisaycock
źródło

Odpowiedzi:

16

Według A History of Haskell: Bycie leniwym w klasie (patrz sekcja 7) początkowo rozważano trzy różne modele: strumienie , kontynuacje i „przemijanie świata” (niewiele wiem o Clean, ale wygląda na to, że jest to czysty sposób ?).

Ostatni akapit sekcji 7.2 wskazuje, że koncepcja typu unikatowości nie została opracowana w tym czasie:

Ten „przemijający świat” model nigdy nie był poważnym konkurentem dla Haskell, ponieważ nie znaleźliśmy łatwego sposobu na zapewnienie „jednowątkowego” dostępu do stanu na świecie. (Projektanci Clean ostatecznie rozwiązali ten problem poprzez zastosowanie „typów wyjątkowości”)

Wydaje się, że koncepcja monad została wprowadzona (ponownie wykorzystana w innych pracach) w późniejszych wersjach Haskell, ponieważ zaowocowała czystszym kodem (w porównaniu do kontynuacji / strumieni):

Podejście monadyczne szybko zdominowało wcześniejsze modele. Typy są bardziej kompaktowe i zawierają więcej informacji.

johlo
źródło
10

Najlepszym wytłumaczeniem, jakie widziałem, jest „ Zajęcie się niezręcznym oddziałem ” Simona Peytona-Jonesa .

Z tego, co pamiętam z gazety, problemy związane z lenistwem odegrały dużą rolę w tej decyzji. (Nie jestem pewien, czy Clean jest domyślnie leniwy tak samo jak Haskell).

rtperson
źródło
5
Czystość też jest leniwa.
chrisaycock