-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