conduit icon indicating copy to clipboard operation
conduit copied to clipboard

bracketP with custom monad stack

Open emlautarom1 opened this issue 2 years ago • 1 comments

I have the following function:

withPostgreSQL :: MonadResource m => ByteString -> (SQL.Connection -> ConduitT i o m r) -> ConduitT i o m r
withPostgreSQL cs f = bracketP (SQL.connectPostgreSQL cs) SQL.close f

I would like to catch any exception that connectPostgreSQL throws and log it using monad-logger, something like:

withPostgreSQL cs f = (bracketP (SQL.connectPostgreSQL cs) SQL.close f) `catch` (\(e :: IOException) -> $(logError) (show e))

Now it seems that I can't do that since catch from base is fixed to IO. Using catch from unliftIO requires ConduitT to have an instance of MonadUnliftIO. After trying stuff for a while I just gave up.

My question would be "how do I log that bracketP failed using monad-logger"?

emlautarom1 avatar Jun 03 '22 18:06 emlautarom1

You can't do that. You would need to do the exception handling inside the arguments to bracketP.

snoyberg avatar Jun 06 '22 14:06 snoyberg