2013-03-05 4 views
0

Я последовал за Happstack ускоренного курса и теперь я пытаюсь принести разные вещи вместе:Попытки принести HSP и кислотно-состояние вместе в форме с Happstack

От «Тип-Safe Форма обработки с использованием реформы» (http://happstack.com/docs/crashcourse/Reform.html#reform) Я закодировал эту регистрационную форму:

register :: AcidState UserBase -> ServerPart Response 
register acid = unXMLGenT $ 
    appTemplate "register"() $ 
     reform (form "/register") "register" (insertAndRenderUser acid) Nothing registerForm 

insertAndRenderUser :: (Monad m) => AcidState UserBase -> User -> AppT m XML 
insertAndRenderUser acid user = 
    <dl> 
     <dt>lastname:</dt> <dd><% lastName user %></dd> 
     <dt>firstname:</dt> <dd><% firstName user %></dd> 
     <dt>email:</dt> <dd><% email user %></dd> 
     <dt>birthday:</dt> <dd><% show (birthday user) %></dd> 
    </dl> 


registerForm :: SimpleForm User 
registerForm = 
    User (UserId 0) 
    <$> (errorList ++> label "Last name:" ++> (inputText "" `transformEither` required) <++ br) 
    <*> (errorList ++> label "First name:" ++> (inputText "" `transformEither` required) <++ br) 
    <*> (errorList ++> label "E-mail:"  ++> (inputText "" `transformEither` required) <++ br) 
    <*> (errorList ++> label "Birthday:" ++> (inputText "" `transformEither` requireDate) <++ br) 
    <* inputSubmit "Register" 

Теперь я хочу добавить зарегистрированного пользователя, когда форма будет успешной. я закодированы эту UserBase с помощью кислотно-состояния (http://happstack.com/docs/crashcourse/AcidState.html#ixset)

insertUser :: MonadIO m => AcidState (EventState InsertUserIntern) -> User -> m (EventResult InsertUserIntern) 
insertUser acid user = do 
    update' acid (InsertUserIntern user) 

Фрагменты работают отдельно, но где можно вставить insertUser acid user в insertAndRenderUser?

Я надеюсь, что вы можете помочь мне
Благодаря
Фло

ответ

1

получил это сам

insertAndRenderUser acid user = do 
    insertUser acid user 
    appTemplate "Your Registration"() $ 
    <dl> 
     <dt>lastname:</dt> <dd><% lastName user %></dd> 
     <dt>firstname:</dt> <dd><% firstName user %></dd> 
     <dt>email:</dt> <dd><% email user %></dd> 
     <dt>birthday:</dt> <dd><% show (birthday user) %></dd> 
    </dl> 
Смежные вопросы