X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Lucu.git;a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FContentCoding.hs;h=45a8b4e7dcd903deed0b9cecf92640c0b17ba7ff;hp=3ce7806dee86d5271ec50e8e1d4a68d7fd97a1ad;hb=90fca0675b1694e69b8e431c989343855cbd125d;hpb=6126eb9cbe5b38c300d855d96d2238831e59b5dd diff --git a/Network/HTTP/Lucu/ContentCoding.hs b/Network/HTTP/Lucu/ContentCoding.hs index 3ce7806..45a8b4e 100644 --- a/Network/HTTP/Lucu/ContentCoding.hs +++ b/Network/HTTP/Lucu/ContentCoding.hs @@ -1,11 +1,12 @@ {-# LANGUAGE - OverloadedStrings + FlexibleInstances + , MultiParamTypeClasses + , TypeSynonymInstances + , OverloadedStrings , UnicodeSyntax #-} module Network.HTTP.Lucu.ContentCoding ( AcceptEncoding(..) - - , acceptEncodingListP , normalizeCoding , unnormalizeCoding ) @@ -13,6 +14,7 @@ module Network.HTTP.Lucu.ContentCoding import Control.Applicative import Data.Ascii (CIAscii, toCIAscii) import Data.Attoparsec.Char8 +import Data.Default import Data.Ord import Data.Maybe import Network.HTTP.Lucu.Parser.Http @@ -34,24 +36,28 @@ instance Ord AcceptEncoding where q1' = fromMaybe 0 q1 q2' = fromMaybe 0 q2 -acceptEncodingListP ∷ Parser [AcceptEncoding] -acceptEncodingListP = listOf accEncP +instance Default (Parser [AcceptEncoding]) where + {-# INLINE def #-} + def = listOf def -accEncP ∷ Parser AcceptEncoding -accEncP = do coding ← toCIAscii <$> token +instance Default (Parser AcceptEncoding) where + {-# INLINEABLE def #-} + def = do coding ← toCIAscii <$> token qVal ← option Nothing - $ do _ ← string ";q=" - q ← qvalue - return $ Just q + $ do _ ← string ";q=" + q ← qvalue + return $ Just q return $ AcceptEncoding (normalizeCoding coding) qVal normalizeCoding ∷ CIAscii → CIAscii +{-# INLINEABLE normalizeCoding #-} normalizeCoding coding | coding ≡ "x-gzip" = "gzip" | coding ≡ "x-compress" = "compress" | otherwise = coding unnormalizeCoding ∷ CIAscii → CIAscii +{-# INLINEABLE unnormalizeCoding #-} unnormalizeCoding coding | coding ≡ "gzip" = "x-gzip" | coding ≡ "compress" = "x-compress"