我有使用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)。
发布于 2011-12-17 15:11:25
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中进行启动时的初始化等等。我建议阅读wai-handler-devel的git存储库中的SmallApp和FullApp示例;后者特别有用,因为它的调试输出显示了重新加载期间的代码流,并展示了如何集成长期运行的数据库连接。
FullApp示例的run script还展示了如何以编程方式使用wai-handler-devel,包括手动指定FullApp模板依赖项( wai-handler-devel命令行工具determines automatically)。
然后,您应该能够重写main,如下所示:
main :: IO ()
main = do
putStrLn $ "http://localhost:8080/"
myApp (run 8080)当然,您也可以很容易地从wai-handler-fastcgi、wai-handler-scgi甚至wai-handler-webkit传递run函数。
https://stackoverflow.com/questions/8462493
复制相似问题