Я следую учебнику для библиотеку reform. В настоящее время у меня есть форма с двумя обязательными полями и ее настройка, поэтому сообщение об ошибке для каждого поля отображается рядом с ним.
postForm :: MyForm MyRequest
postForm =
MyRequest <$> name <*> msg <* inputSubmit "post it!"
where
name = labelText "name:" ++>
(inputText "" `transformEither` required "Name is required") <++ br <++ errorList
msg = labelText "message:" ++>
(inputText "" `transformEither` required "Message is required") <++ br <++ errorList
Например, если я отправлю эту форму пустой, проверка завершится неудачно, и пользователю будет предложено заполнить ее снова, и она будет выглядеть так:
name: [______]
* Name is Required
message: [_____]
* Message is required
Я хотел бы знать, как сделать единый список ошибок для формы, например:
name: [______]
message: [_____]
* Name is Required
* Message is required
я пытался сделать
postForm :: MyForm MyRequest
postForm =
(MyRequest <$> name <*> msg <* inputSubmit "post it!") <++ errorList
where
name = labelText "name:" ++>
(inputText "" `transformEither` required "Name is required") <++ br
msg = labelText "message:" ++>
(inputText "" `transformEither` required "Message is required") <++ br
но тогда сообщения об ошибках вообще не отображаются!
Я не привожу полный исполняемый пример, потому что для этого требуется куча дополнительных шаблонов, и я надеюсь, что моя проблема заключается просто в том, чтобы немного лучше понять аппликативную нотацию. Вот сигнатуры типов для некоторых задействованных функций на случай, если это поможет:
type MyForm = Form (ServerPartT IO) [Input] ReqError H.Html ()
<++ :: (Monad m, Monoid view)
=> Form m input error view proof a
-> Form m input error view () ()
-> Form m input error view proof a
errorList :: (Monad m, ToMarkup error)
=> Form m input error Html () ()
http://hackage.haskell.org/package/reform-0.2.1/docs/Text-Reform-Core.html#v:-60--43--43-
http://hackage.haskell.org/package/reform-blaze-0.2.0/docs/Text-Reform-Blaze-Common.html#v:errorList