Я пишу CRUD-интерфейс для своего сайта на основе Yesod, но у меня возникли проблемы с некоторыми значениями. В частности, я пытаюсь CRUD для таких значений, как:
data Value = Value { valueId :: UUID
, otherStuff :: Stuff
}
У меня возникли проблемы с поиском хорошего способа создать один из них с помощью инструментов, которые предоставляют Yesod и Aeson. Когда я использовал формлеты в далеком прошлом, я использовал версию формы для преобразования монад, чтобы сделать что-то вроде:
Value <$> (liftIO getUUID)
<*> textField Nothing
(Возможно, я не совсем правильно понимаю синтаксис формлетов, но, надеюсь, Хаскеллеры поймут суть). Это привело к созданию формы, которая не включала поле UUID и анализатор формы, который выполнял действие ввода-вывода для создания данных в пост-времени.
Я не уверен, что делать дальше. Я рассматривал ту же идею с парсингом Aeson, но attoparsec (основной парсер) также не является преобразователем монад.
Может ли кто-нибудь придумать какие-либо другие варианты, кроме представления промежуточных данных?