bein-0.3: Bein/Web/Elements/Base.hs
{-# LANGUAGE FlexibleInstances, Rank2Types, TypeSynonymInstances #-}
module Bein.Web.Elements.Base where
import Data.Monoid
import qualified Text.XHtml as X
import Text.XHtml ((!),HTML,Html,HtmlAttr,ADDATTRS)
import Control.Monad
(<!>) :: (ADDATTRS a, Monad m) => m a -> [HtmlAttr] -> m a
t <!> a = liftM (!a) t
(<!) :: (ADDATTRS a, Monad m) => (b -> m a) -> [HtmlAttr] -> (b -> m a)
t <! a = \x -> t x <!> a
(=<<:) :: Monad m => TagM -> [m Html] -> m Html
f =<<: gs = f =<< mconcatM gs
infixr 1 =<<:
(<<) :: (Monad m, HTML a) => TagM -> a -> m Html
t << v = t =<< html v
infixr 7 <<
type TagM = Monad m => Html -> m Html
type ITagM = Monad m => m Html
html :: (Monad m, HTML a) => a -> m Html
html = return . X.toHtml
noHtmlM :: Monad m => m Html
noHtmlM = return X.noHtml
noHtml :: Html
noHtml = X.noHtml
mconcatM :: (Monad m, Monoid a) => [m a] -> m a
mconcatM [] = return mempty
mconcatM (x:xs) = do
v <- x
vs <- mconcatM xs
return (v `mappend` vs)