{-# LANGUAGE OverloadedStrings #-} module Symantic.HTTP.Mime.Type where import Data.Function (($)) import Data.Proxy (Proxy(..)) import qualified Network.HTTP.Media as Media -- * Class 'MediaTypeable' class MediaTypeable mt where mimeType :: Proxy mt -> MediaType mimeTypes :: Proxy mt -> [MediaType] mimeTypes mt = [mimeType mt] type MediaType = Media.MediaType instance MediaTypeable () where mimeType _mt = mimeAny charsetUTF8 :: MediaType -> MediaType charsetUTF8 = (Media./: ("charset", "utf-8")) mimeAny :: MediaType mimeAny = "*/*" -- ** Type 'JSON' data JSON mimeJSON :: Proxy JSON mimeJSON = Proxy instance MediaTypeable JSON where mimeType _mt = charsetUTF8 $ "application"Media.//"json" mimeTypes mt = [mimeType mt, "application"Media.//"json"] -- ** Type 'HTML' data HTML mimeHTML :: Proxy HTML mimeHTML = Proxy instance MediaTypeable HTML where mimeType _mt = charsetUTF8 $ "text"Media.//"html" mimeTypes mt = [mimeType mt, "text"Media.//"html"] -- ** Type 'FormUrlEncoded' data FormUrlEncoded mimeFormUrlEncoded :: Proxy FormUrlEncoded mimeFormUrlEncoded = Proxy instance MediaTypeable FormUrlEncoded where mimeType _mt = "application"Media.//"x-www-form-urlencoded" -- ** Type 'OctetStream' data OctetStream mimeOctetStream :: Proxy OctetStream mimeOctetStream = Proxy instance MediaTypeable OctetStream where mimeType _mt = "application"Media.//"octet-stream" -- ** Type 'PlainText' data PlainText mimePlainText :: Proxy PlainText mimePlainText = Proxy instance MediaTypeable PlainText where mimeType _mt = charsetUTF8 $ "text"Media.//"plain"