Here I'm using coroutines + context-parameters. I find much more convenient when I explicitly handle db transactions with context-parameters. Also, using arrow's Raise context adds typed error handling, without too dsl usage.