MyStuff) m, MonadIO m) => m ()
foo = handle (\(e :: SomeException) -> putTextLn $ show e) $ do
doSomethingThatUpdatesIORef -- тут будет неконсистентное состояние
doSomethingElse -- тут будет throw
finishUpdatingIORef -- тут состяние снова станет консистентным
после бросание эксепшена состояние будет такое, будто foo вообще не вызывали, или данные в иорефе поменяются?
Поменяются. Можешь ресторить иореф в хендлере
а если вместо иореф будет StateT, то ничего не надо ресторить
Потому что за тебя по капотом ресторится
Обсуждают сегодня