Warum hat das Haskell-Komitee Monaden ausgewählt, um I / O zu repräsentieren?


36

In der Sprache " Bereinigen" werden Eindeutigkeitstypen verwendet , um E / A in einer rein funktionalen Einstellung zu verarbeiten. Warum ging das Haskell-Komitee stattdessen mit Monaden ? Gab es andere Vorschläge für den Umgang mit Staaten, die das Komitee untersucht, sich aber dagegen entschieden hat?

Hinweis : Ich suche keinen heiligen Krieg zwischen Monaden und anderen Computerformen. Lassen Sie uns das Thema auf die Entscheidungen des Komitees in Bezug auf I / O beschränken.


Antworten:


16

Laut A History of Haskell: Lazy With Class (siehe Abschnitt 7) wurden anfangs drei verschiedene Modelle betrachtet: Streams , Fortsetzungen und "World Passing" (ich weiß nicht viel über Clean, aber es hört sich so an, als wäre dies der Clean-Weg ?).

Der letzte Absatz von Abschnitt 7.2 zeigt, dass das Konzept des Eindeutigkeitstyps zu diesem Zeitpunkt noch nicht entwickelt wurde:

Dieses "weltweite" Modell war jedoch für Haskell nie ein ernstzunehmender Konkurrent, da wir keinen einfachen Weg sahen, um einen "einsträngigen" Zugang zum Weltstaat zu gewährleisten. (Die Clean-Designer haben dieses Problem schließlich durch die Verwendung von "Eindeutigkeitstypen" gelöst.)

Das Konzept der Monaden scheint in späteren Überarbeitungen von Haskell eingeführt worden zu sein (wiederverwendet von anderen Arbeiten), da es zu saubererem Code führte (verglichen mit Fortsetzungen / Streams):

Der monadische Ansatz dominierte schnell frühere Modelle. Die Typen sind kompakter und informativer.


10

Die beste Erklärung, die ich gesehen habe, ist Simon Peyton-Jones '" Bekämpfung der Peinlichen Truppe ".

Soweit ich mich an die Zeitung erinnere, spielten Fragen der Faulheit eine große Rolle bei der Entscheidung. (Ich bin nicht sicher, ob Clean standardmäßig so faul ist wie Haskell.)


5
Sauber ist auch faul.
Chrisaycock
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.