[Haskell-cafe] How to reliably open and close resources in MonadIO in the presence of exceptions?