首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在简单的wai应用程序中使用wai-handler-devel

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

Stack Overflow用户
提问于 2011-12-11 15:07:45
回答 1查看 751关注 0票数 5

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

代码语言:javascript
复制
{-# 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)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-17 15:11:25

wai-handler-devel的Hackage page表示应该从命令行调用它,如下所示:

代码语言:javascript
复制
$ wai-handler-devel <port> My.App.Module myApp

并且您的应用程序的类型必须如下所示:

代码语言:javascript
复制
myApp :: (Application -> IO ()) -> IO ()

在这种情况下,您应该按如下方式定义myApp

代码语言:javascript
复制
myApp :: (Application -> IO ()) -> IO ()
myApp handler = handler app

尽管您可能希望完全内联app

代码语言:javascript
复制
myApp :: (Application -> IO ()) -> IO ()
myApp handler = handler $ \_ -> return $ responseLBS
    status200
    [("Content-Type", "text/plain")]
    "Hello, World!"

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

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

然后,您应该能够重写main,如下所示:

代码语言:javascript
复制
main :: IO ()
main = do
    putStrLn $ "http://localhost:8080/"
    myApp (run 8080)

当然,您也可以很容易地从wai-handler-fastcgiwai-handler-scgi甚至wai-handler-webkit传递run函数。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8462493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档