我有一个简单的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"
Run Code Online (Sandbox Code Playgroud)
ham*_*mar 13
WAI应用程序的类型是:
type Application = Request -> Iteratee ByteString IO Response
Run Code Online (Sandbox Code Playgroud)
这意味着WAI应用程序在Iteratee
monad转换器中运行IO
,因此您必须使用它liftIO
来执行常规IO
操作.
import Control.Monad.Trans
app _ = do
liftIO $ putStrLn "Said hi"
return hello
Run Code Online (Sandbox Code Playgroud)