Writer Monad Beispiel kann nicht kompiliert werden von "Learn you a Haskell"

8

Der folgende Code, der wörtlich von LYAH lautet, wird nicht kompiliert. Code- und Kompilierzeitfehler sind unten enthalten. Auf der LYAH-Seite ist der Code ~ 15% auf der Seite, yay emacs browser:)

Irgendwelche Ideen warum? Betrachte ich etwas völlig Offensichtliches?

(Trotz der Ähnlichkeit in den Posttiteln denke ich, dass meine Frage anders ist als dieser .)

Hier ist der Code (in einer Datei, die ich testcopy.hs genannt habe)

%Vor%

Und hier ist der Kompilierungsfehler:

%Vor%     
iceman 16.10.2014, 22:43
quelle

2 Antworten

14

LYAH ist in diesem Beispiel veraltet. Sie sollten die Konstruktormethode writer smart anstelle des (jetzt nicht vorhandenen) Writer -Datenkonstruktors verwenden.

Um ein bisschen zu erweitern, wurden diese Datentypen aktualisiert, um besser mit Monad-Transformatoren kompatibel zu sein. Daher gibt es ein allgemeines WriterT für die Verwendung in einem Monad-Transformer-Stack und ein Writer type-Synonym, das WriterT mit Identity zusammensetzt. Aus diesem Grund gibt es nicht mehr einen Datenkonstruktor, der speziell dem Writer -Typ zugeordnet ist (da Writer ein Typ-Synonym ist).

Glücklicherweise ist die Lösung trotz dieser Komplikation ziemlich einfach: Ersetzen Sie Writer durch writer .

    
David Young 16.10.2014, 22:48
quelle
0

Die korrekte Version in GHC 7.10.3 sollte so aussehen

%Vor%     
wshcdr 08.07.2016 04:20
quelle

Tags und Links