Я не думаю, что это эффективный подход делать дополнительный параметр для каждого аспекта вроде СУБД.
Как я уже говорил, мне кажется, что компоненты, требующие персиста должны отдельно реализоваться в ConnectionIO, а затем транслироваться с помощью mapK или applyK в конечный тип
На самом деле, логика в транзакции может быть слегка развесистой, а ConnectionIO нормальному продакшен-грейд приложению никогда не хватит. Поэтому абстрактный DB[_] эффект, на котором строим транзакционную логику. В него уже лифтим ConnectionIO (скорее всего это будет какой-то РидерТ над ним).