在Happstack路由过滤器中组合GET和POST部分

时间:2013-06-27 20:44:29

标签: haskell filter routes happstack

我正在尝试使用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
           ]

只会“落到”默认部分。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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
           ]

正如其他人建议您也可以使用<|>mplus或与AlternativeMonadPlus相关的其他功能。

  • 杰里米