@@ -61,6 +61,8 @@ module Network.Wai
6161 , requestHeaderUserAgent
6262 , strictRequestBody
6363 , lazyRequestBody
64+ -- ** Request modifiers
65+ , mapRequestHeaders
6466 -- * Response
6567 , Response
6668 , StreamingBody
@@ -80,6 +82,7 @@ module Network.Wai
8082 , mapResponseStatus
8183 -- * Middleware composition
8284 , ifRequest
85+ , modifyRequest
8386 , modifyResponse
8487 ) where
8588
@@ -303,6 +306,10 @@ defaultRequest = Request
303306type Middleware = Application -> Application
304307
305308
309+-- | apply a function that modifies a request as a 'Middleware'
310+modifyRequest :: (Request -> Request) -> Middleware
311+modifyRequest f app req respond = app (f req) $ respond
312+
306313-- | apply a function that modifies a response as a 'Middleware'
307314modifyResponse :: (Response -> Response) -> Middleware
308315modifyResponse f app req respond = app req $ respond . f
@@ -344,3 +351,7 @@ lazyRequestBody req =
344351 else do
345352 bss <- loop
346353 return $ LI.Chunk bs bss
354+
355+-- | Apply the provided function to the response header list of the Response.
356+mapRequestHeaders :: (H.RequestHeaders -> H.RequestHeaders) -> Request -> Request
357+mapRequestHeaders f request = request { requestHeaders = f (requestHeaders request) }