@@ -1,6 +1,4 @@
1−{-# LANGUAGE Rank2Types #-}
2−{-# LANGUAGE ScopedTypeVariables #-}
3−{-# LANGUAGE OverloadedStrings #-}
1+{-# LANGUAGE Rank2Types, ScopedTypeVariables #-}
42---------------------------------------------------------
53-- |
64-- Module : Network.Wai.Middleware.Gzip
@@ -29,9 +27,8 @@ import Data.Maybe (fromMaybe, isJust)
2927import qualified Data.ByteString.Char8 as S8
3028import qualified Data.ByteString as S
3129import Data.Default.Class
32−import Network.HTTP.Types (Status, Header)
33−import Control.Monad.IO.Class (liftIO)
34−import Control.Monad.Trans.Resource (runResourceT)
30+import Network.HTTP.Types ( Status, Header, hContentEncoding, hUserAgent
31+ , hContentType, hContentLength)
3532import System.Directory (doesFileExist, createDirectoryIfMissing)
3633import Blaze.ByteString.Builder (fromByteString)
3734import Control.Exception (try, SomeException)
@@ -85,7 +82,7 @@ gzip set app env sendResponse = app env $ \res ->
8582 then
8683 case (res, gzipFiles set) of
8784 (ResponseFile s hs file Nothing, GzipCacheFolder cache) ->
88− case lookup "content-type" hs of
85+ case lookup hContentType hs of
8986 Just m
9087 | gzipCheckMime set m -> compressFile s hs file cache sendResponse
9188 _ -> sendResponse res
@@ -94,9 +91,9 @@ gzip set app env sendResponse = app env $ \res ->
9491 where
9592 enc = fromMaybe [] $ (splitCommas . S8.unpack)
9693 `fmap` lookup "Accept-Encoding" (requestHeaders env)
97− ua = fromMaybe "" $ lookup "user-agent" $ requestHeaders env
94+ ua = fromMaybe "" $ lookup hUserAgent $ requestHeaders env
9895 isMSIE6 = "MSIE 6" `S.isInfixOf` ua
99− isEncoded res = isJust $ lookup "Content-Encoding" $ responseHeaders res
96+ isEncoded res = isJust $ lookup hContentEncoding $ responseHeaders res
10097
10198compressFile :: Status -> [Header] -> FilePath -> FilePath -> (Response -> IO a) -> IO a
10299compressFile s hs file cache sendResponse = do
@@ -118,7 +115,7 @@ compressFile s hs file cache sendResponse = do
118115 Z.PRNext bs -> do
119116 S.hPut outH bs
120117 loop
121− Z.PRError e -> throwIO e
118+ Z.PRError ex -> throwIO ex
122119 fix $ \loop -> do
123120 bs <- S.hGetSome inH defaultChunkSize
124121 unless (S.null bs) $ do
@@ -145,11 +142,11 @@ compressE :: GzipSettings
145142 -> (Response -> IO a)
146143 -> IO a
147144compressE set res sendResponse =
148− case lookup "content-type" hs of
145+ case lookup hContentType hs of
149146 Just m | gzipCheckMime set m ->
150147 let hs' = fixHeaders hs
151148 in wb $ \body -> sendResponse $ responseStream s hs' $ \sendChunk flush -> do
152− (blazeRecv, blazeFinish) <- B.newBlazeRecv B.defaultStrategy
149+ (blazeRecv, _) <- B.newBlazeRecv B.defaultStrategy
153150 deflate <- Z.initDeflate 1 (Z.WindowBits 31)
154151 let sendBuilder builder = do
155152 popper <- blazeRecv builder
@@ -164,8 +161,8 @@ compressE set res sendResponse =
164161 deflatePopper $ Z.flushDeflate deflate
165162 flush
166163 deflatePopper popper = fix $ \loop -> do
167− res <- popper
168− case res of
164+ result <- popper
165+ case result of
169166 Z.PRDone -> return ()
170167 Z.PRNext bs' -> do
171168 sendChunk $ fromByteString bs'
@@ -183,9 +180,9 @@ compressE set res sendResponse =
183180-- different length after gzip compression.
184181fixHeaders :: [Header] -> [Header]
185182fixHeaders =
186− (("Content-Encoding", "gzip") :) . filter notLength
183+ ((hContentEncoding, "gzip") :) . filter notLength
187184 where
188− notLength (x, _) = x /= "content-length"
185+ notLength (x, _) = x /= hContentLength
189186
190187splitCommas :: String -> [String]
191188splitCommas [] = []