Je veux un monade State où fail
modifie l'état plutôt que de déclencher une exception. L'échec en début d'une telle action devrait également sauter toutes les actions ultérieures.
Par exemple, ce qui suit devrait produire "FAILED: foo"
comme état final :
execState (fail "foo") ""
ceci devrait produire le même résultat
execState (fail "foo" >> put "hi") ""
En utilisant la monade State standard, la première déclenche une exception et la deuxième produit "hi"
Je suppose qu'il y a une manière astucieuse d'utiliser StateT
pour créer ma propre monade avec ce comportement, mais je ne l'ai pas encore découvert. Quelle est une bonne manière d'accomplir ceci ?