X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FMIMEType.hs;h=da4f503b33e838207e4cc27d380b302e21e79e87;hb=078fc2851ceae061fe368f2bc09fcd16d67ae00f;hp=9f653230d3597ae298cdeec99fca07276242b9f6;hpb=858129cb755aa09da2b7bd758efb8519f2c89103;p=Lucu.git diff --git a/Network/HTTP/Lucu/MIMEType.hs b/Network/HTTP/Lucu/MIMEType.hs index 9f65323..da4f503 100644 --- a/Network/HTTP/Lucu/MIMEType.hs +++ b/Network/HTTP/Lucu/MIMEType.hs @@ -3,14 +3,13 @@ -- |Manipulation of MIME Types. module Network.HTTP.Lucu.MIMEType ( MIMEType(..) - , () - , (<:>) - , (<=>) + , parseMIMEType , mimeTypeP , mimeTypeListP ) where +import qualified Data.ByteString.Lazy as B import Network.HTTP.Lucu.Parser import Network.HTTP.Lucu.Parser.Http import Network.HTTP.Lucu.Utils @@ -40,31 +39,17 @@ instance Show MIMEType where value -infix 9 , <=> -infixl 8 <:> +instance Read MIMEType where + readsPrec _ s = [(parseMIMEType s, "")] --- |@\"major\" \<\/\> \"minor\"@ constructs a MIME Type --- \"major\/minor\". -() :: String -> String -> MIMEType -maj min - = MIMEType maj min [] - --- |This operator appends a @(name, value)@ pair to a MIME Type. -(<:>) :: MIMEType -> (String, String) -> MIMEType -mt@(MIMEType _ _ params) <:> pair - = pair `seq` - mt { - mtParams = mtParams mt ++ [pair] - } - --- |This operator takes two strings and makes a tuple of them. So you --- can say --- --- > "text" "xml" <:> "charset" <=> "UTF-8" <:> "q" <=> "0.9" --- --- to represent \"text\/xml; charset=UTF-8; q=0.9\". -(<=>) :: String -> String -> (String, String) -name <=> value = (name, value) +-- |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