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% Verwenden Sie ExceptT
von Control.Monad.Trans.Except
(anstelle von Entweder).
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.
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%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.
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.
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,
Tags und Links haskell state monads state-monad monad-transformers