Haskell 如何将wai处理程序devel与简单的wai应用程序一起使用

Haskell 如何将wai处理程序devel与简单的wai应用程序一起使用,haskell,yesod,haskell-wai,Haskell,Yesod,Haskell Wai,我有使用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 a

我有使用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”的问题,这里有一个修复()wai handler-devel说应该从命令行调用它,如下所示:

$ wai-handler-devel <port> My.App.Module myApp
在这种情况下,您应该定义
myApp
,如下所示:

myApp :: (Application -> IO ()) -> IO ()
myApp handler = handler app
main :: IO ()
main = do
    putStrLn $ "http://localhost:8080/"
    myApp (run 8080)
尽管您可能希望完全内联
应用程序

myApp :: (Application -> IO ()) -> IO ()
myApp handler = handler $ \_ -> return $ responseLBS
    status200
    [("Content-Type", "text/plain")]
    "Hello, World!"
该类型如下所示,以便您可以在启动时进行初始化,以及在
IO
中执行类似操作。我建议阅读wai handler-devel的git存储库中的代码和示例;后者特别有用,因为它有调试输出,显示重新加载期间的代码流,并显示如何集成长期运行的数据库连接

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

然后,您应该能够按如下方式重写
main

myApp :: (Application -> IO ()) -> IO ()
myApp handler = handler app
main :: IO ()
main = do
    putStrLn $ "http://localhost:8080/"
    myApp (run 8080)

当然,您也可以轻松地从或甚至从中传递
run
函数。

从命令行运行wai-handler-devel时,我遇到了一个“wai-handler-devel:command-not-found”错误。我在周末升级了Haskell,不知道这是否破坏了命令。非常奇怪。请尝试
~/.cabal/bin/wai handler devel
-如果这样做有效,那么您需要将
$HOME/.cabal/bin
添加到
$PATH
中。如果失败,您可能想尝试再次安装它。好的。我根本没有~/.cabal/bin。我可能会重新安装Haskell并重新启动。在$HOME/Library/Haskell/bin中找到它并添加到路径