Ich meine, warum kommt es nicht zuletzt?
Wegen dieser Konvention, einen Transformatorstapel auszuwerten, muss man eine unangenehme Sache schreiben:
%Vor%anstelle von:
%Vor% Und die Kombination mit sofortigem do
wird umständlicher:
anstelle von:
%Vor% Hat das irgendeine Motivation hinter sich oder ist das nur eine unglückliche Konvention?Übrigens, ich weiß, dass die aktuelle Konvention es einfach macht, die "run" -Funktion unter Verwendung der Datensatzsyntax zu implementieren, aber dies kann kein Argument sein, da Bibliotheken Usability der Einfachheit der Implementierung vorziehen müssen.
Im HaskellWiki-Eintrag für Parameterreihenfolge und in
Nach meiner Erfahrung mit der Reader / State-Monade wird dieselbe Berechnung häufiger in verschiedenen Umgebungen / Zuständen aufgerufen, als andere monadische Berechnungen in derselben Umgebung / demselben Zustand aufgerufen werden. Die aktuelle Parameterreihenfolge ist dafür geeignet. Ein weiterer Grund: Die monadischen Werte von Reader / State verhalten sich sehr ähnlich wie Funktionen, die eine Umgebung / den Ausgangszustand als Parameter annehmen. Und in Haskell Funktionen gehen Parameter vor. Um die Notwendigkeit verschachtelter ReaderT
/ StateT
/ RWST
-Transformatoren zu vermeiden, können Sie mit einem einzelnen RWST
-Transformator mit globalem Status / Umgebung arbeiten und zoom
und magnify
von der Objektiv Bibliothek, um Berechnungen anzupassen, die in eingeschränkteren Umgebungen funktionieren.
Ich würde gerne Konsistenz als Antwort auf den Mix hinzufügen. Dies ist alles Spekulation, also nehmen Sie das mit einem Körnchen Salz:
Die anfänglichen Implementierungen verwendeten newtype Datensatzsyntax, um diese Datendefinitionen zu schreiben, so dass die Daten bei der Ausführung zuerst kommen, ohne zu wissen, ob dies den Daten, die als letztes Argument eingehen, vorzuziehen ist oder nicht. Neuere Datentypen folgen einfach dieser Konvention.
Tags und Links haskell monad-transformers