]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/MIMEType.hs
Examples now compile.
[Lucu.git] / Network / HTTP / Lucu / MIMEType.hs
index acd76b67b1bfc7b9796498fd6b2cbfa2adbcdf8e..fdc112c7eea12ac560492795616b66f446c18faa 100644 (file)
@@ -6,6 +6,8 @@
 -- |Manipulation of MIME Types.
 module Network.HTTP.Lucu.MIMEType
     ( MIMEType(..)
+    , mkMIMEType
+
     , parseMIMEType
     , printMIMEType
 
@@ -33,8 +35,15 @@ data MIMEType = MIMEType {
     , mtParams ∷ !(Map CIAscii Text)
     } deriving (Eq, Show)
 
+-- |Construct a 'MIMEType' without any parameters.
+mkMIMEType ∷ CIAscii → CIAscii → MIMEType
+{-# INLINE mkMIMEType #-}
+mkMIMEType maj min
+    = MIMEType maj min (∅)
+
 -- |Convert a 'MIMEType' to 'AsciiBuilder'.
 printMIMEType ∷ MIMEType → AsciiBuilder
+{-# INLINEABLE printMIMEType #-}
 printMIMEType (MIMEType maj min params)
     = A.toAsciiBuilder (A.fromCIAscii maj) ⊕
       A.toAsciiBuilder "/" ⊕
@@ -44,17 +53,20 @@ printMIMEType (MIMEType maj min params)
 -- |Parse 'MIMEType' from an 'Ascii'. This function throws an
 -- exception for parse error.
 parseMIMEType ∷ Ascii → MIMEType
+{-# INLINEABLE parseMIMEType #-}
 parseMIMEType str
-    = let p  = do t ← mimeTypeP
-                  endOfInput
-                  return t
-          bs = A.toByteString str
-      in
-        case parseOnly p bs of
-          Right  t → t
-          Left err → error ("unparsable MIME Type: " ⧺ A.toString str ⧺ ": " ⧺ err)
+    = case parseOnly p $ A.toByteString str of
+        Right  t → t
+        Left err → error ("unparsable MIME Type: " ⧺ A.toString str ⧺ ": " ⧺ err)
+    where
+      p ∷ Parser MIMEType
+      {-# INLINE p #-}
+      p = do t ← mimeTypeP
+             endOfInput
+             return t
 
 mimeTypeP ∷ Parser MIMEType
+{-# INLINEABLE mimeTypeP #-}
 mimeTypeP = do maj    ← A.toCIAscii <$> token
                _      ← char '/'
                min    ← A.toCIAscii <$> token
@@ -62,4 +74,5 @@ mimeTypeP = do maj    ← A.toCIAscii <$> token
                return $ MIMEType maj min params
 
 mimeTypeListP ∷ Parser [MIMEType]
+{-# INLINE mimeTypeListP #-}
 mimeTypeListP = listOf mimeTypeP