( 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
{-# 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