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.
functional-programming
history
haskell
chrisaycock
źródło
źródło
Odpowiedzi:
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:
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):
źródło
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).
źródło