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

mnd*_*rix 8 io haskell

我有一个简单的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应用程序在Iterateemonad转换器中运行IO,因此您必须使用它liftIO来执行常规IO操作.

import Control.Monad.Trans

app _ = do
    liftIO $ putStrLn "Said hi"
    return hello
Run Code Online (Sandbox Code Playgroud)