]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/ETag.hs
Merge branch 'parsable'
[Lucu.git] / Network / HTTP / Lucu / ETag.hs
index 6d09aee5673634d273d0296623404b5f29704761..b04912002be300ad01ad2b17b9a167caff195ebc 100644 (file)
@@ -12,14 +12,14 @@ module Network.HTTP.Lucu.ETag
     ( ETag(..)
     , strongETag
     , weakETag
-    , eTag
-    , eTagList
     )
     where
 import Control.Applicative
 import Control.Monad
 import Data.Ascii (Ascii, AsciiBuilder)
 import Data.Attoparsec.Char8
+import Data.Attoparsec.Parsable
+import Data.ByteString (ByteString)
 import Data.Convertible.Base
 import Data.Convertible.Instances.Ascii ()
 import Data.Convertible.Utils
@@ -81,17 +81,15 @@ weakETag ∷ Ascii → ETag
 {-# INLINE weakETag #-}
 weakETag = ETag True
 
--- |'Parser' for an 'ETag'.
-eTag ∷ Parser ETag
-{-# INLINEABLE eTag #-}
-eTag = do isWeak ← option False (string "W/" *> return True)
-          str    ← quotedStr
-          return $ ETag isWeak str
+instance Parsable ByteString ETag where
+    {-# INLINEABLE parser #-}
+    parser = do isWeak ← option False (string "W/" *> return True)
+                str    ← quotedStr
+                return $ ETag isWeak str
 
--- |'Parser' for a list of 'ETag's.
-eTagList ∷ Parser [ETag]
-{-# INLINEABLE eTagList #-}
-eTagList = do xs ← listOf eTag
-              when (null xs) $
-                  fail "empty list of ETags"
-              return xs
+instance Parsable ByteString [ETag] where
+    {-# INLINEABLE parser #-}
+    parser = do xs ← listOf parser
+                when (null xs) $
+                    fail "empty list of ETags"
+                return xs