conduit と persist を連携させ、例えば上流から String 型のデータを受けて、
「persistを使って」データベースへデータを挿入する Sink を作るとする。
次のようにコネクションプールを使って簡単な例を作ってみたんだが、
この方法はやっぱりスジが悪いかな?
連携方法について他に良い案があれば教えてほしい。

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Ingredient
 name String
|]

sinkInsertion :: Sink String (ResourceT IO) ()
sinkInsertion = bracketP createPool deletePool insertRecord

createPool :: IO ConnectionPool
createPool = runNoLoggingT $ createMySQLPool 省略 1

deletePool :: ConnectionPool -> IO ()
deletePool = destroyAllResources

insertRecord :: ConnectionPool -> Sink String (ResourceT IO) ()
insertRecord pool = do
 liftIO $ runResourceT $ runSqlPool (runMigration migrateAll) pool
 let loop = do
    mname <- await
    case mname of
     Nothing -> return ()
     Just name -> (liftIO $ runResourceT $ runSqlPool (insert_ (Ingredient name)) pool) >> loop
 loop

main = runResourceT $ sourceList ["nasu", "tomato"] $$ sinkInsertion