我正在尝试将 Happstack 教程中的 GET 和 POST 放入一个处理程序函数中,以便它始终在一起,我已经实现了这一点,但它看起来很难看。
login :: ServerPart Response
login = msum [
do methodM POST
user <- look "user"
pass <- look "pass"
success <- query $ CheckPassword user pass
ok $ toResponse (user ++ ", " ++ pass ++ ": " ++ (if success then "Valid" else "Invalid")),
ok $ toResponse $ html $ do
B.head $ do
title "Login Form"
B.body $ do
form ! enctype "multipart/form-data" ! B.method "POST" $ do
B.label "user: " >> input ! type_ "text" ! name "user" ! size "10"
B.label "pass: " >> input ! type_ "text" ! name "pass" ! size "10"
input ! type_ "submit" ! name "upload"]
我想改变的事情是:
明确地呼吁methodM GET
而不是让它成为失败者。拉出多余
ok $ toResponse
的,只在一个地方。最好也让 POST 返回 HTML。对于有更多经验的人来说,其他任何看起来“不正常”的东西。有任何想法吗?
更新:找出#1;添加do methodM GET
上面的ok $ toResponse $ ...
作品很好,但像我这样的新手需要注意的是必须垂直排列,即 m inmethodM
需要直接在 o in 上方ok
。希望这可以节省几个小时的挫败感。
更新 2:#3 相当简单——只需将 POST 的最后一行更新为ok $ toResponse $ html $ do B.body $ toHtml $ user ++ ...