gpt4 book ai didi

haskell - 如何使用 Scotty 设置 wai-handler-devel 以自动重新加载代码?

转载 作者:行者123 更新时间:2023-12-02 13:51:40 25 4
gpt4 key购买 nike

我一直在玩Scotty web framework并尝试使其与 wai-handler-devel 一起工作启用代码重新加载。这是一个示例应用

{-# LANGUAGE OverloadedStrings #-}

module Example where

import Data.Monoid (mconcat)
import Network.Wai
import Web.Scotty

handler :: ScottyM ()
handler = get "/:word" $ do
beam <- param "word"
html $ mconcat ["<h1>Scotty, ", beam, " me up!</h1>"]

main :: IO ()
main = scotty 3000 handler

这里的问题是 wai-handler-devel 期望获得一个 (Application -> IO ()) -> IO () 函数来使事情正常工作,但在本例中我只有 ScottyM ()IO ()Web.Scotty中有几个功能和 Web.Scotty.Trans包,即如下

scottyApp::ScottyM () -> IO Application 这可以将我们的handler变成IO Network.Wai.Application,这更接近符合 wai-handler-devel 的预期,但不完全符合。

还有 scottyAppT:: type signature omitted ...但在这种情况下,我什至不确定如何读取类型签名。

我发现有 some examples of using wai-handler-devel仅在 WAI 应用程序上,但我只是不知道如何将 Scotty 应用程序转换为具有所需签名的 WAI 应用程序。

我还想问,由于 wai-handler-devel 已被弃用,取而代之的是 yesod-bin,是否应该取代它,即使是简单的 WAI/像这样的 Scotty 应用程序,还是 yesod-bin 仅适用于 yesod 应用程序?

最佳答案

事实证明这相当简单。假设应用程序有一个 router 函数,其类型为 router::ScottyM ()

通常运行应用程序的方式是

main :: IO ()
main = scotty 3000 router

要使此功能与 wai-handler-devel 配合使用,唯一需要做的是定义另一个函数,例如 dev,如下所示

dev :: (Application -> IO ()) -> IO ()
dev h = scottyApp router >>= h

之后,您只需要运行 wai-handler-devel 3000 MyModule dev 即可完美运行:)

关于haskell - 如何使用 Scotty 设置 wai-handler-devel 以自动重新加载代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884134/

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