我想知道下面是否是将Wai与数据库池相结合的正确约定。
我基本上要做的是,创建一个池,部分应用Pool -> Application类型的函数,并使用它将其传递给Warp的run。它看起来还好吗,还是我来重构它?
{-# LANGUAGE OverloadedStrings #-}
import Network.Wai
import Network.HTTP.Types
import Network.Wai.Handler.Warp (run)
import Database.MySQL.Simple
import Data.Pool (Pool, createPool, withResource)
newConn = connect defaultConnectInfo
{ connectHost = "db"
, connectUser = "root"
, connectPassword = "secret"
, connectDatabase = "test" }
getPool = createPool newConn close 1 10 5
app :: Pool Connection -> Application
app pool _ respond = do
withResource pool $ \c -> query_ c "SELECT 1" :: IO [Only Int]
respond $ responseLBS
status200
[("Content-Type", "text/plain")]
"Hello, Web!"
main :: IO ()
main = do
putStrLn $ "http://localhost:8080/"
pool <- getPool
run 8080 $ app $ pool发布于 2018-08-07 08:04:52
恐怕没有什么可移除的了。$在putStrLn之后以及app和pool之间是多余的。您可以编写最后两行run 8080 . app <$> getPool。我会给getPool打个内联。您可能对https://github.com/alevy/simple/blob/master/simple/src/Web/Simple.hs#L134的样板还原感兴趣。
https://codereview.stackexchange.com/questions/200310
复制相似问题