Wie kann ich eine Zustands-Monade schreiben, die auch Fehler behandelt?

7

Ich muss eine Zustands-Monade schreiben, die auch die Fehlerbehandlung unterstützt. Ich dachte an die Verwendung der Entweder-Monade für diesen Zweck, weil es auch Details darüber geben kann, was den Fehler verursacht hat. Ich habe eine Definition für eine staatliche Monade gefunden, die die Maybe-Monade verwendet, aber ich bin nicht in der Lage, sie so zu modifizieren, dass sie entweder statt Maybe verwendet. Hier ist der Code:

%Vor%     
HaskellNoob 31.10.2010, 14:58
quelle

5 Antworten

9

Verwenden Sie ExceptT von Control.Monad.Trans.Except (anstelle von Entweder).

%Vor%

Wenn Sie sich nicht mit Monaden und Monad-Transformatoren auskennen, dann würde ich das zuerst machen ! Sie sind eine große Hilfe und Programmierer Produktivität Leistung gewinnen.

    
Thomas M. DuBuisson 31.10.2010 22:09
quelle
6

Es gibt zwei mögliche Lösungen. Dasjenige, das dem oben angegebenen Code am nächsten kommt, ist:

%Vor%

Das andere Formular verschiebt die Fehlerbehandlung innerhalb der Statusbehandlung:

%Vor%     
Michael Snoyman 31.10.2010 15:24
quelle
4

Sie benötigen einen Monodentrafo. Monad-Transformer-Bibliotheken wie mtl ermöglichen es Ihnen, verschiedene Monaden zu erstellen, um eine neue Version zu erstellen. Mit mtl könnten Sie

definieren %Vor%

Damit können Sie sowohl auf den Status als auch auf die Fehlerbehandlung innerhalb Ihres StateMonad zugreifen.

    
John L 31.10.2010 15:29
quelle
4

Ich habe niemanden hier gesehen, der das Papier Monad Transformers Step by Step von Martin Grabmüller

Ich fand es sehr hilfreich beim Lernen über die Kombination von Monaden.

    
dino 02.11.2010 00:38
quelle
2

Sie können immer einen ErrorT-Monade-Transformer mit einer State-Monade verwenden (oder umgekehrt). Sehen Sie sich die Transformatoren von alles über Monaden an.

HTH,

    
Ozgur 31.10.2010 15:32
quelle