, OverloadedStrings
, RecordWildCards
, TemplateHaskell
+ , TypeSynonymInstances
, UnicodeSyntax
, ViewPatterns
#-}
import Data.Ascii (Ascii, AsciiBuilder, CIAscii)
import Data.Attempt
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
+import Data.Default
import Data.Monoid.Unicode
import Data.Typeable
import Language.Haskell.TH.Syntax
instance ConvertAttempt Ascii MIMEType where
{-# INLINEABLE convertAttempt #-}
convertAttempt str
- = case parseOnly (finishOff parser) (cs str) of
+ = case parseOnly (finishOff def) (cs str) of
Right t → return t
Left err → fail ("Unparsable MIME Type: " ⧺ cs str ⧺ ": " ⧺ err)
-instance Parsable ByteString MIMEType where
- {-# INLINEABLE parser #-}
- parser = do media ← cs <$> token
- _ ← char '/'
- sub ← cs <$> token
- params ← parser
- return $ MIMEType media sub params
+instance Default (Parser MIMEType) where
+ {-# INLINEABLE def #-}
+ def = do media ← cs <$> token
+ _ ← char '/'
+ sub ← cs <$> token
+ params ← def
+ return $ MIMEType media sub params
-instance Parsable ByteString [MIMEType] where
- {-# INLINE parser #-}
- parser = listOf parser
+instance Default (Parser [MIMEType]) where
+ {-# INLINE def #-}
+ def = listOf def
-- |'QuasiQuoter' for 'MIMEType' literals.
--