On Fri, Oct 12, 2012 at 12:49 PM, Dmitry Vyal <akamaus@gmail.com> wrote:
Greetings,
I found The MonadCatchIO-mtl package while looking for a way to catch exceptions in my custom StateT s (ReaderT r IO) monad. CatchIO worked flawlessly when handlers used the environment r from Reader, but things broken when I tried to use state. According to source, the handler is run with the same state which was passed to runStateT.
instance MonadCatchIO m => MonadCatchIO (StateT s m) where
m `catch` f = StateT $ \s -> (runStateT m s)
`Control.Monad.CatchIO.catch` (\e -> runStateT (f e) s)
And my finalizing action depends on the current state. Can you give an advice how to get the behavior I need?