{-# 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 ( (b -> m a) -> [HtmlAttr] -> (b -> m a) t 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)