4

我正在尝试使用 Happstack 实现一个简单的请求处理程序:

main :: IO ()
main = simpleHTTP nullConf app

app :: ServerPart Response
app = msum [
             dir "hello" $ method GET  >> helloGet
           , dir "hello" $ method POST >> helloPost
           ]

如何在不重复的情况下实现类似的目标dir "hello"

这个,

app :: ServerPart Response
app = msum [
             dir "hello" $ do
                method GET  >> helloGet
                method POST >> helloPost
           , okResponse home
           ]

只会“落入”默认部分。

4

2 回答 2

2
app :: ServerPart Response
app = msum [
             dir "hello" $ (method GET >> helloGet) <|> (method POST >> helloPost)
           , okResponse home
           ]

..假设ServerPart有适当的Alternative实例。如果由于某种原因丢失,您可以替换(<|>)mplus. 这里的主要思想是您只是将一个路由组合器嵌套在另一个路由组合器中。

于 2013-06-27T21:15:25.743 回答
1

这已经很接近了:

app :: ServerPart Response
app = msum [
             dir "hello" $ do
                method GET  >> helloGet
                method POST >> helloPost
           , okResponse home
           ]

你只需要一个额外的嵌套msum

app :: ServerPart Response
app = msum [
             dir "hello" $
                msum [ method GET  >> helloGet
                     , method POST >> helloPost
                     ]
           , okResponse home
           ]

正如其他人建议的那样,您还可以使用<|>or或与andmplus相关的其他功能。AlternativeMonadPlus

  • 杰里米
于 2013-06-28T02:06:56.227 回答