我有一个简单的WAI应用程序(在这种情况下为Warp),它响应所有带有“Hi”的Web请求。我还希望每次处理请求时在服务器上显示“Said hi”。如何在WAI响应处理程序中执行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"
答案 0 :(得分:13)
WAI应用程序的类型是:
type Application = Request -> Iteratee ByteString IO Response
这意味着WAI应用程序在Iteratee
上的IO
monad转换器中运行,因此您必须使用liftIO
执行常规IO
操作。
import Control.Monad.Trans
app _ = do
liftIO $ putStrLn "Said hi"
return hello