Сгруппированные флажки в Haskell / Yesod


В настоящее время я работаю с Haskell на веб-платформе Yesod, и мне нужно создать форму на одной из моих веб-страниц. Эта форма должна содержать несколько флажков, но они должны быть сгруппированы по категориям. Например, пользователю нужно будет выбрать 3 дисциплины в списке из 10 флажков, 5 предметов, и из них максимум 2 могут быть оружием.

Я прочитал части книги на веб-сайте Yesod, и, исходя из моего понимания, мне нужно будет создать пользовательское поле для создания групп флажки. К сожалению, я не очень хорошо справляюсь с Haskell (только начал использовать его 1-2 недели назад), и у меня есть некоторые трудности с пониманием того, как я мог бы достичь этого. Для справки, это страница, которую я прочитал в книге на веб-сайте Yesod, где говорится о пользовательских полях: http://www.yesodweb.com/book/forms

Зная это, мой вопрос будет: как создать групповые флажки в Haskell/Yesod?

EDIT: в ссылке, которую я предоставил, я понимаю последнее два значения конструктора Field (fieldView и fieldEnctype), это первое (fieldParse), которое я не знаю, как изменить для моей цели. Вот пример в ссылке, на которую я ссылался:

passwordConfirmField :: Field Handler Text
passwordConfirmField = Field
    { fieldParse = rawVals _fileVals ->
        case rawVals of
            [a, b]
                | a == b -> return $ Right $ Just a
                | otherwise -> return $ Left "Passwords don't match"
            [] -> return $ Right Nothing
            _ -> return $ Left "You must enter two values"
    , fieldView = idAttr nameAttr otherAttrs eResult isReq ->
        [whamlet|
            <input id=#{idAttr} name=#{nameAttr} *{otherAttrs} type=password>
            <div>Confirm:
            <input id=#{idAttr}-confirm name=#{nameAttr} *{otherAttrs} type=password>
        |]
    , fieldEnctype = UrlEncoded
    }
1 6

1 ответ:

Таким образом, после долгих исследований я понял, что в моем случае, чтобы вернуть значения флажков, которые были проверены, мне нужно сделать:

fieldParse  = \rawVals _fileVals ->
        return $ Right $ Just rawVals

Так как rawVals содержит список текста всех значений флажков, которые были проверены.