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

标签 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"

最佳答案

WAI 应用程序的类型是:

type Application = Request -> Iteratee ByteString IO Response

这意味着 WAI 应用程序在 Iteratee 中运行。 monad 变压器超过 IO , 所以你必须使用 liftIO定期执行IO行动。
import Control.Monad.Trans

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

关于haskell - 如何在 WAI (Warp) 应用程序中执行 IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7771523/

相关文章:

io - 在 Perl 6 REPL 中使用 chdir 的奇怪(内部?)默认构造函数错误消息

java - 将大型结果集写入文件

haskell - 启动程序(例如 : Vim) from Haskell

haskell - 使用列表理解来构建函数

windows - 运行从Haskell项目构建的exe文件时,停止打开命令提示符

haskell -::运算符语法在有界类型类的上下文中如何工作?

c - 尝试将输入存储在具有意外行为的结构类型数组中

haskell - Haskell 是否旨在鼓励匈牙利符号?

java - 将 Optaplanner 集成到 Java Web 应用程序中

java - 为什么我总是需要将 FileReader 链接到其他阅读器?