Yesod Advent Calendar 2016の16日目です。
YesodでのDB操作についての話題です。
トランザクションの境界
runDB
関数でまとめた操作は同一トランザクションで実行されます。
_ <- runDB $
insert ...
>> insert ...
>> update ...
>> delete ...
ですので、runDBから複数の戻り値を返すには少し工夫が必要です。
一番簡単なのはタプルを使うことでしょう。
tuple <- runDB $ do
retA <- selectList ...
retB <- selectList ...
return (retA, retB)