2011-10-14 99 views
8

我有一個簡單的WAI應用程序(在此情況下爲Warp),以「Hi」響應所有Web請求。每次處理請求時,我也希望它在服務器上顯示「Said hi」。我如何在我的WAI響​​應處理程序中執行IO?這裏是我的應用程序:如何在WAI(Warp)應用程序內部執行IO

{-# LANGUAGE OverloadedStrings #-} 
import Network.Wai 
import Network.HTTP.Types (status200) 
import Network.Wai.Handler.Warp (run) 

main :: IO() 
main = do 
    putStrLn "http://localhost:3000/" 
    run 3000 app 

app :: Application 
app _ = return hello 

hello = responseLBS status200 [("Content-Type", "text/plain")] "Hi" 

回答

13

的類型WAI應用的是:

type Application = Request -> Iteratee ByteString IO Response 

這意味着WAI應用在Iteratee單子互感器過IO運行,所以你必須使用liftIO來執行常規的IO操作。

import Control.Monad.Trans 

app _ = do 
    liftIO $ putStrLn "Said hi" 
    return hello 
+1

我只是浪費了幾個小時谷歌搜索,這就是答案。在進入Haskell時,人們應該在哪裏學習像這樣的主題? – Victor