Формы Yesod или JSON/Ajax или другое

Я пишу CRUD-интерфейс для своего сайта на основе Yesod, но у меня возникли проблемы с некоторыми значениями. В частности, я пытаюсь CRUD для таких значений, как:

data Value = Value { valueId :: UUID
                   , otherStuff :: Stuff
                   }

У меня возникли проблемы с поиском хорошего способа создать один из них с помощью инструментов, которые предоставляют Yesod и Aeson. Когда я использовал формлеты в далеком прошлом, я использовал версию формы для преобразования монад, чтобы сделать что-то вроде:

Value <$> (liftIO getUUID)
      <*> textField Nothing

(Возможно, я не совсем правильно понимаю синтаксис формлетов, но, надеюсь, Хаскеллеры поймут суть). Это привело к созданию формы, которая не включала поле UUID и анализатор формы, который выполнял действие ввода-вывода для создания данных в пост-времени.

Я не уверен, что делать дальше. Я рассматривал ту же идею с парсингом Aeson, но attoparsec (основной парсер) также не является преобразователем монад.

Может ли кто-нибудь придумать какие-либо другие варианты, кроме представления промежуточных данных?


person nomen    schedule 21.09.2013    source источник


Ответы (1)


Если то, что вы пытаетесь сделать, это вызвать действие ввода-вывода в аппликативной форме, вы можете использовать трюк:

lift (liftIO action)

Проблема в том, что Applicative не может быть экземпляром MonadIO, но может быть экземпляром MonadTrans.

person Michael Snoyman    schedule 22.09.2013