Warum kommt der Transformator als erstes Argument von "run" Funktionen?

8

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:

%Vor%

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.

    
Nikita Volkov 27.03.2014, 06:53
quelle

3 Antworten

4

Im HaskellWiki-Eintrag für Parameterreihenfolge und in

  • Setzen Sie die Datenstruktur zuletzt .
  • 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.

        
    danidiaz 27.03.2014 07:22
    quelle
    3

    Ich bin sicher, dass es ein Element der Zweckdienlichkeit gibt. Es ist sehr einfach zu definieren

    %Vor%

    und damit fertig sein.

        
    Tom Ellis 27.03.2014 08:14
    quelle
    0

    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.

        
    Thomas Eding 28.03.2014 23:59
    quelle

    Tags und Links