, OverloadedStrings
, RecordWildCards
, TemplateHaskell
+ , TypeSynonymInstances
, UnicodeSyntax
#-}
-- |An internal module for entity tags.
( ETag(..)
, strongETag
, weakETag
- , eTag
- , eTagList
)
where
import Control.Applicative
-import Control.Monad
import Data.Ascii (Ascii, AsciiBuilder)
import Data.Attoparsec.Char8
import Data.Convertible.Base
import Data.Convertible.Instances.Ascii ()
import Data.Convertible.Utils
import Data.Data
+import Data.Default
import Data.Monoid.Unicode
import Language.Haskell.TH.Syntax
import Network.HTTP.Lucu.OrphanInstances ()
{-# 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 Default (Parser ETag) where
+ {-# INLINEABLE def #-}
+ def = 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 Default (Parser [ETag]) where
+ {-# INLINE def #-}
+ def = listOf def