2
我想要一個狀態monad,其中fail
修改狀態而不是拋出異常。儘早在這種行動中失敗也應該跳過以後的任何行動。Haskell State monad with custom fail
例如,以下應該產生"FAILED: foo"
爲最終狀態:
execState (fail "foo") ""
本應產生相同的結果
execState (fail "foo" >> put "hi") ""
使用標準的國家單子,前者拋出一個異常,後者生產"hi"
我假設有一些巧妙的方法使用StateT
來使我的ow n monad有這種行爲,但尚未弄清楚。什麼是完成這個的好方法?