]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/ContentCoding.hs
Done.
[Lucu.git] / Network / HTTP / Lucu / ContentCoding.hs
index a5f02b13ecf69ac28f15e747016f4af124eb2191..033b48b4d941b6d462cfa4ebac231d0f3f1869d2 100644 (file)
@@ -1,11 +1,11 @@
 {-# LANGUAGE
-    OverloadedStrings
+    FlexibleInstances
+  , MultiParamTypeClasses
+  , OverloadedStrings
   , UnicodeSyntax
   #-}
 module Network.HTTP.Lucu.ContentCoding
     ( AcceptEncoding(..)
-
-    , acceptEncodingList
     , normalizeCoding
     , unnormalizeCoding
     )
@@ -13,6 +13,8 @@ module Network.HTTP.Lucu.ContentCoding
 import Control.Applicative
 import Data.Ascii (CIAscii, toCIAscii)
 import Data.Attoparsec.Char8
+import Data.Attoparsec.Parsable
+import Data.ByteString (ByteString)
 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
 
-acceptEncodingList ∷ Parser [AcceptEncoding]
-acceptEncodingList = listOf accEnc
+instance Parsable ByteString [AcceptEncoding] where
+    {-# INLINE parser #-}
+    parser = listOf parser
 
-accEnc ∷ Parser AcceptEncoding
-accEnc = do coding ← toCIAscii <$> token
-            qVal   ← option Nothing
-                     $ do _ ← string ";q="
-                          q ← qvalue
-                          return $ Just q
-            return $ AcceptEncoding (normalizeCoding coding) qVal
+instance Parsable ByteString AcceptEncoding where
+    {-# INLINE parser #-}
+    parser = do coding ← toCIAscii <$> token
+                qVal   ← option Nothing
+                             $ 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"