我正在尝试使用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
]
只会“落到”默认部分。
答案 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
或与Alternative
和MonadPlus
相关的其他功能。