Ist es möglich die IO Monade von Haskell in Clojure zu machen?

8

Ich habe mir die algo.monads und fluokitten Dokumentation. Ich habe auch Monad Blog-Einträge durch Jim Duey , Konrad Hinsen und Leonardo Borges .

Der nächste, den ich finden kann, ist Konrad Hinsens Bibliothek monadische IO-Streams - aber das scheint die Monad-Schnittstelle nicht zu implementieren (mangels einer besseren Formulierung)

Dies ist ein Beispiel mit ST in Haskell

%Vor%

Meine Frage ist: Ist es möglich, die IO Monade von Haskell in Clojure zu machen? Können Sie ein Beispiel geben?

    
hawkeye 17.02.2014, 10:35
quelle

1 Antwort

14

Es gibt einige Möglichkeiten, diese Frage zu beantworten.

Ja

  • Trivial: Stellen Sie sich IO als einen Monadentransformator vor, der die besondere Erlaubnis erteilt, mit Nebenwirkungen zu arbeiten. Dann ist jede Monade in Clojure eine IO-Monade, da das Ausführen von Nebenwirkungen keine privilegierte Operation in Clojure ist.

  • Fatuously: Clojure ist Turing-vollständig, also könntest du alle Haskell implementieren, einschließlich der IO-Monade in Clojure. Haskell ist Turing-vollständig, also könntest du Clojure in Haskell implementieren und die IO-Monade aufdecken.

Nein

  • Philosophisch: Die Essenz der IO-Monade, die Wahrung der Reinheit bei der Integration mit dem Typsystem, ist mit Clojures Unbefangenheit und dynamischer Typisierung nicht vereinbar. Jeder Versuch, in der IO-Monade zu schüren, würde entweder mit Clojures Philosophie im Widerspruch stehen oder den wesentlichen Punkt, eine IO-Monade zu haben, nicht erfassen.

Vielleicht

  • Teilweise: Die mit der Frage verknüpfte monadische-io-streams-Bibliothek ist für die Verwendung mit der algo.monads-Bibliothek oder ihrem Vorgänger gedacht. Die monadische Schnittstelle ist die Zustands-Monade. Monadic-io-streams bietet einige inhaftierte IO monadische Funktionen, um damit zu arbeiten. Das hindert Sie nicht daran, irgendwelche anderen Funktionen mit Nebeneffekten zu benutzen, und ohne ein Typsystem, das IO integriert, gibt es keinen systematischen Weg zu sagen, welches was ist. Dies ist nicht die IO Monade; es macht nur ein paar Dinge ähnlich wie die IO-Monade. Dies ist interessant, aber von zweifelhaftem Nutzen.

  • Eines Tages: Es gibt Interesse an Clojure . Wenn dem Typsystem Nebenwirkungen hinzugefügt werden, dann kann es wünschenswert werden, sie für bestimmte Zwecke in einer strukturierten Weise zu isolieren und einen Grund für die Existenz von etwas wie einer IO-Monade in typisierter Clojure zu geben.

A. Webb 19.02.2014, 03:10
quelle

Tags und Links