@@ -80,6 +80,7 @@ import Blaze.ByteString.Builder (fromByteString)
8080import Control.Monad (unless)
8181import qualified Data.ByteString as B
8282import qualified Data.ByteString.Lazy as L
83+import qualified Data.ByteString.Lazy.Internal as LI
8384import Data.ByteString.Lazy.Internal (defaultChunkSize)
8485import Data.ByteString.Lazy.Char8 ()
8586import Data.Function (fix)
@@ -88,6 +89,7 @@ import qualified Network.HTTP.Types as H
8889import Network.Socket (SockAddr (SockAddrInet))
8990import Network.Wai.Internal
9091import qualified System.IO as IO
92+import System.IO.Unsafe (unsafeInterleaveIO)
9193
9294----------------------------------------------------------------
9395
@@ -247,4 +249,13 @@ defaultRequest = Request
247249--
248250-- Since 1.4.1
249251lazyRequestBody :: Request -> IO L.ByteString
250−lazyRequestBody = error "lazyRequestBody" -- fmap L.fromChunks . lazyConsume . requestBody
252+lazyRequestBody req =
253+ loop
254+ where
255+ loop = unsafeInterleaveIO $ do
256+ bs <- requestBody req
257+ if B.null bs
258+ then return LI.Empty
259+ else do
260+ bss <- loop
261+ return $ LI.Chunk bs bss