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