Вот как это сделать сейчас .В будущих выпусках я надеюсь добавить несколько удобных обёрток;приветствуется вклад в это.
Объяснение: Каждая функция-обработчик живет в монаде GGHandler sub master (Iteratee ByteString IO)
.Это довольно сложно, но это означает, что это монадный преобразователь Handler вокруг Iteratee, который получает поток ByteStrings.Этот поток ByteStrings является необработанным телом запроса.
Так что нам нужно использовать функцию потребления перечислителя, чтобы взять весь этот поток ByteStrings и сохранить их в виде списка.И нам нужно использовать функцию lift, чтобы поднять ее во внутреннюю монаду (Iteratee).Затем L.fromChunks преобразует из списка строгих ByteStrings в ленивую ByteString, которую можно анализировать с любой произвольной библиотекой JSON (Yesod стандартизирует AESON).
Я предполагаю, что наиболее удобная функция, которую я мог бы предоставитьбудет parseRequestJson :: GGHandler s m (Iteratee ByteString IO) (Maybe Data.Aeson.Value)
.Я могу добавить это в точечной версии yesod-json.