Есть ли способ реорганизовать часть этого кода формы Happstack? - PullRequest
2 голосов
/ 22 августа 2011

Я пытаюсь получить GET и POST из учебника Happstack в одну функцию-обработчик, чтобы они всегда были вместе, чего я добился, но это выглядит ужасно.

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"]

ВещиЯ хотел бы изменить следующее:

  1. Явно вызывать methodM GET, а не просто падать.

  2. Извлеките избыточный ok $ toResponse и храните его только в одном месте.

  3. Желательно также иметь HTML-код возврата POST.

  4. Все остальное, что выглядит "неприлично" для всех, у кого больше опыта.Есть идеи?

ОБНОВЛЕНИЕ : выяснил # 1;добавление do methodM GET над ok $ toResponse $ ... работает нормально, но новичкам, таким как я, следует отметить, что должен располагаться вертикально , т. е. m в methodM должно быть прямо над o inok.Надеюсь, это сэкономит кому-то часы разочарования.

ОБНОВЛЕНИЕ 2 : # 3 было довольно просто - просто обновите последнюю строку POST до ok $ toResponse $ html $ do B.body $ toHtml $ user ++ ...

1 Ответ

2 голосов
/ 23 августа 2011

Поиск формул (они работают с Happstack) и / или пищеварительных функторов (которые работают с Snap и, возможно, даже Happstack):

http://hackage.haskell.org/package/formlets

http://hackage.haskell.org/package/digestive-functors

Я не исследовал, как пищеварительные функторы лучше формул, но он более новый и может быть проще, чем старый.

Есть несколько примеров

В F # есть даже библиотека, которая компилируется в JavaScript и выполняет аналогичные функции на стороне клиента.Он позволяет проверять такие вещи, как доступность входа в систему из JS, и в то же время писать в хорошем стиле формул / функциональности.Он называется WebSharper: WebSharper

...