Как прочитать тело ответа в промежуточном программном обеспечении WAI?

Я пытаюсь создать промежуточное программное обеспечение, которое будет отправлять 500 ошибок на удаленный сервер. Информация об ошибке находится в теле ответа.

Как я могу получить тело ответа от Response как любой вид строки? я вижу responseToStream но я не могу понять, как его использовать.

import Network.Wai
import Data.ByteString.Lazy (ByteString)

responseBody :: Response -> IO ByteString
responseBody res = _

1 ответ

Реализация комментария от @user2407038:

import Data.IORef (newIORef,modifyIORef',readIORef)
import Data.Monoid ((<>))
import Data.ByteString.Lazy (ByteString)
import Data.ByteString.Builder (toLazyByteString)

import Network.Wai

responseBody :: Response -> IO ByteString
responseBody res =
  let (status,headers,body) = responseToStream res in
  body $ \f -> do
    content <- newIORef mempty
    f (\chunk -> modifyIORef' content (<> chunk)) (return ())
    toLazyByteString <$> readIORef content
Другие вопросы по тегам