gpt4 book ai didi

haskell - 如何在简单的 wai 应用程序中使用 wai-handler-devel

转载 作者:行者123 更新时间:2023-12-04 19:16:44 25 4
gpt4 key购买 nike

我使用 wai 进行了基本的“hello world”应用程序设置,并且想使用 wai-handler-devel,但我不确定如何进行,并且在 wai 项目中找不到任何使用它的示例。

{-# LANGUAGE OverloadedStrings #-}
import Network.Wai
import Network.HTTP.Types
import Network.Wai.Handler.Warp (run)
import Data.ByteString.Lazy.Char8 () -- Just for an orphan instance

app :: Application
app _ = return $ responseLBS
status200
[("Content-Type", "text/plain")]
"Hello, World!"

main :: IO ()
main = do
putStrLn $ "http://localhost:8080/"
run 8080 app

我需要做什么才能让 wai-handler-devel 使用基本的 wai 应用程序?

笔记:
如果您遇到“wai-handler-devel: command not found”的问题,这里有一个修复( https://gist.github.com/1499226 )

最佳答案

wai-handler-devel Hackage page说它应该像这样从命令行调用:

$ wai-handler-devel <port> My.App.Module myApp

并且您的应用程序类型必须如下所示:
myApp :: (Application -> IO ()) -> IO ()

在这种情况下,您应该定义 myApp如下:
myApp :: (Application -> IO ()) -> IO ()
myApp handler = handler app

尽管您可能想内联 app完全:
myApp :: (Application -> IO ()) -> IO ()
myApp handler = handler $ \_ -> return $ responseLBS
status200
[("Content-Type", "text/plain")]
"Hello, World!"

类型是这样的,这样你就可以在 IO中进行启动时的初始化等操作。 .我建议阅读 SmallAppFullApp wai-handler-devel 的 git 存储库中的示例;后者特别有用,因为它具有显示重新加载期间代码流的调试输出,并显示如何集成长时间运行的数据库连接。

run script对于 FullApp 示例,还展示了如何以编程方式使用 wai-handler-devel,包括手动指定 Hamlet 模板依赖项(即 wai-handler-devel 命令行工具 determines automatically)。

然后你应该能够重写你的 main如下:
main :: IO ()
main = do
putStrLn $ "http://localhost:8080/"
myApp (run 8080)

当然,您也可以轻松通过 run函数来自 wai-handler-fastcgi , wai-handler-scgi甚至 wai-handler-webkit .

关于haskell - 如何在简单的 wai 应用程序中使用 wai-handler-devel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8462493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com