{-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedStrings #-} {-# OPTIONS_GHC -fno-warn-orphans #-} -- | Lucid support for Yesod. -- -- Example Handler for a route, using Lucid to generate html, -- including a rendered url: -- -- > import Yesod.Lucid -- > import Lucid -- > -- > getExampleR :: Handler LucidHtml -- > getExampleR = lucid $ \url -> -- > p_ $ a_ [href_ (url ExampleR)] "self link" module Yesod.Lucid where import Control.Monad.Identity import Data.Text (Text) import Lucid import Yesod.Core (ToTypedContent, MonadHandler, ToContent, Route, HandlerSite, HasContentType(..)) import qualified Yesod.Core as Y -- | Handler LucidHtml can be used for yesod handlers that use lucid to -- generate html. type LucidHtml = Html () -- | A lucid generator. type LucidGen a = (Route a -> Text) -> LucidHtml -- | Output some lucid, passes a URL renderer to the continuation. lucid :: MonadHandler m => LucidGen (HandlerSite m) -> m LucidHtml lucid cont = fmap cont Y.getUrlRender instance ToTypedContent (Html ()) where toTypedContent m = Y.TypedContent (getContentType (Just m)) (Y.toContent m) instance ToContent (Html ()) where toContent html = Y.ContentBuilder (runIdentity (execHtmlT html)) Nothing instance HasContentType (Html ()) where getContentType _ = "text/html"