happstack 教程提供了以下示例:
main :: IO ()
main = simpleHTTP nullConf $ msum
[ do methodM GET
ok $ "You did a GET request.\n"
, do methodM POST
ok $ "You did a POST request.\n"
, dir "foo" $ do methodM GET
ok $ "You did a GET request on /foo.\n"
]
这里似乎ok $
是多余的——有没有办法把它拉出来,msum
这样你就不必写ok $
三遍了?我尝试了以下方法,但它甚至没有编译:
main :: IO ()
main = simpleHTTP nullConf $ ok $ msum
[ do methodM GET
"You did a GET request.\n"
, do methodM POST
"You did a POST request.\n"
, dir "foo" $ do methodM GET
"You did a GET request on /foo.\n"
]
有没有正确的方法来做到这一点(或者甚至更好,拉出整个ok $ "You did a "
and ".\n"
),还是不可能?
我仍在了解 monads 在 Haskell 中的工作方式,但如果上述情况不可行,那么您能否从高层次上解释为什么没有合理的方法来完成这项工作,或者需要更改哪些内容让它成为可能?我只是想弄清楚在这里可以做什么和不能做什么。