関数型プログラミング言語Haskell Part29 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0746デフォルトの名無しさん
2015/11/29(日) 10:55:13.94ID:DI7OadCE「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
■ このスレッドは過去ログ倉庫に格納されています