-instance Read MIMEType where
- readsPrec _ s = [(parseMIMEType s, "")]
-
--- |Parse 'MIMEType' from a 'Prelude.String'. This function throws an
--- exception for parse error.
-parseMIMEType :: String -> MIMEType
-parseMIMEType str = case parseStr mimeTypeP str of
- (# Success t, r #) -> if B.null r
- then t
- else error ("unparsable MIME Type: " ++ str)
- (# _ , _ #) -> error ("unparsable MIME Type: " ++ str)
-
-
-mimeTypeP :: Parser MIMEType
-mimeTypeP = allowEOF $!
- do maj <- token
- _ <- char '/'
- min <- token
- params <- many paramP
- return $ MIMEType maj min params
- where
- paramP :: Parser (String, String)
- paramP = do _ <- many lws
- _ <- char ';'
- _ <- many lws
- name <- token
- _ <- char '='
- value <- token <|> quotedStr
- return (name, value)
+-- |'Parser' for an 'MIMEType'.
+mimeType ∷ Parser MIMEType
+{-# INLINEABLE mimeType #-}
+mimeType = do media ← A.toCIAscii <$> token
+ _ ← char '/'
+ sub ← A.toCIAscii <$> token
+ params ← mimeParams
+ return $ MIMEType media sub params