如何在WAI(Warp)应用程序中执行IO

时间:2011-10-14 17:48:59

标签: haskell io

我有一个简单的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"

1 个答案:

答案 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