servant/servant-blaze/src/Servant/HTML/Blaze.hs

36 lines
1.2 KiB
Haskell
Raw Normal View History

2015-05-02 12:04:47 +02:00
{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
2015-12-27 17:54:29 +01:00
#include "overlapping-compat.h"
2015-05-02 12:04:47 +02:00
-- | An @HTML@ empty data type with `MimeRender` instances for @blaze-html@'s
-- `ToMarkup` class and `Html` datatype.
-- You should only need to import this module for it's instances and the
-- `HTML` datatype.:
--
-- >>> type Eg = Get '[HTML] a
--
-- Will then check that @a@ has a `ToMarkup` instance, or is `Html`.
module Servant.HTML.Blaze where
import Data.Typeable (Typeable)
import qualified Network.HTTP.Media as M
import Servant.API (Accept (..), MimeRender (..))
import Text.Blaze.Html (Html, ToMarkup, toHtml)
import Text.Blaze.Html.Renderer.Utf8 (renderHtml)
data HTML deriving Typeable
2015-05-29 16:08:14 +02:00
-- | @text/html;charset=utf-8@
2015-05-02 12:04:47 +02:00
instance Accept HTML where
contentType _ = "text" M.// "html" M./: ("charset", "utf-8")
2015-12-27 17:54:29 +01:00
instance OVERLAPPABLE_ ToMarkup a => MimeRender HTML a where
2015-05-02 12:04:47 +02:00
mimeRender _ = renderHtml . toHtml
2015-12-27 17:54:29 +01:00
instance OVERLAPPING_ MimeRender HTML Html where
2015-05-02 12:04:47 +02:00
mimeRender _ = renderHtml