-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Clear to write, read and edit DSL for HTML
--   
--   Clear to write, read and edit DSL for HTML.
--   
--   
--   
- Names are consistent, and do not conflict with base or are
--   keywords (all have suffix _)
--   
- Same combinator can be used for attributes and elements (e.g.
--   style_)
--   
- For more, read the blog post
--   
--   
--   See the Lucid module for more documentation.
@package lucid
@version 2.11.20250303

-- | Base types and combinators.
module Lucid.Base

-- | Render the HTML to a lazy Text.
--   
--   This is a convenience function defined in terms of execHtmlT,
--   runIdentity and toLazyByteString, and decodeUtf8.
--   Check the source if you're interested in the lower-level behaviour.
renderText :: Html a -> Text

-- | Render the HTML to a lazy ByteString.
--   
--   This is a convenience function defined in terms of execHtmlT,
--   runIdentity and toLazyByteString. Check the source if
--   you're interested in the lower-level behaviour.
renderBS :: Html a -> ByteString

-- | Render the HTML to a lazy Text, but in a monad.
--   
--   This is a convenience function defined in terms of execHtmlT
--   and toLazyByteString, and decodeUtf8. Check the source
--   if you're interested in the lower-level behaviour.
renderTextT :: Monad m => HtmlT m a -> m Text

-- | Render the HTML to a lazy ByteString, but in a monad.
--   
--   This is a convenience function defined in terms of execHtmlT
--   and toLazyByteString. Check the source if you're interested in
--   the lower-level behaviour.
renderBST :: Monad m => HtmlT m a -> m ByteString

-- | Render the HTML to a lazy ByteString.
--   
--   This is a convenience function defined in terms of execHtmlT,
--   runIdentity and toLazyByteString. Check the source if
--   you're interested in the lower-level behaviour.
renderToFile :: FilePath -> Html a -> IO ()

-- | Build the HTML. Analogous to execState.
--   
--   You might want to use this is if you want to do something with the raw
--   Builder. Otherwise for simple cases you can just use
--   renderText or renderBS.
execHtmlT :: Monad m => HtmlT m a -> m Builder

-- | Evaluate the HTML to its return value. Analogous to
--   evalState.
--   
--   Use this if you want to ignore the HTML output of an action completely
--   and just get the result.
--   
--   For using with the Html type, you'll need runIdentity
--   e.g.
--   
--   
--   >>> runIdentity (evalHtmlT (p_ "Hello!"))
--   ()
--   
evalHtmlT :: Monad m => HtmlT m a -> m a

-- | This is the low-level way to run the HTML transformer, finally
--   returning an element builder and a value. You can pass mempty
--   for this argument for a top-level call. See evalHtmlT and
--   execHtmlT for easier to use functions.
runHtmlT :: HtmlT m a -> m (Seq Attribute -> Builder, a)

-- | Generalize the underlying monad.
--   
--   Some builders are happy to deliver results in a pure underlying monad,
--   here Identity, but have trouble maintaining the polymorphic
--   type. This utility generalizes from Identity.
relaxHtmlT :: forall (m :: Type -> Type) a. Monad m => HtmlT Identity a -> HtmlT m a

-- | Commute inner m to the front.
--   
--   This is useful when you have impure HTML generation, e.g. using
--   StateT. Recall, there is `MonadState s HtmlT` instance.
--   
--   
--   exampleHtml :: MonadState Int m => HtmlT m ()
--   exampleHtml = ul_ $ replicateM_ 5 $ do
--     x <- get
--     put (x + 1)
--     li_ $ toHtml $ show x
--   
--   exampleHtml' :: Monad m => HtmlT m ()
--   exampleHtml' = evalState (commuteHtmlT exampleHtml) 1
--   
commuteHtmlT :: forall m (n :: Type -> Type) a. (Functor m, Monad n) => HtmlT m a -> m (HtmlT n a)

-- | Make an HTML builder.
makeElement :: forall (m :: Type -> Type) a. Functor m => Text -> HtmlT m a -> HtmlT m a

-- | Make an HTML builder for elements which have no ending tag.
makeElementNoEnd :: forall (m :: Type -> Type). Applicative m => Text -> HtmlT m ()

-- | Make an XML builder for elements which have no ending tag.
makeXmlElementNoEnd :: forall (m :: Type -> Type). Applicative m => Text -> HtmlT m ()

-- | Make an attribute builder.
makeAttribute :: Text -> Text -> Attribute

-- | Simple HTML builder type. Defined in terms of HtmlT. Check out
--   that type for instance information.
--   
--   Simple use-cases will just use this type. But if you want to
--   transformer over Reader or something, you can go and use HtmlT.
type Html = HtmlT Identity

-- | A monad transformer that generates HTML. Use the simpler Html
--   type if you don't want to transform over some other monad.
--   
--   Don't rely on the internal representation of this type. Use the monad
--   and functor classes.
newtype HtmlT (m :: Type -> Type) a
HtmlT :: m (Seq Attribute -> Builder, a) -> HtmlT (m :: Type -> Type) a

-- | A simple attribute. Don't use the constructor, use
--   makeAttribute. Attributes are case sensitive, so if you want
--   attributes to be merged properly, use a single case representation.
data Attribute
Attribute :: !Text -> !Text -> Attribute

-- | Used to construct HTML terms.
--   
--   Simplest use: p_ = term "p" yields p_.
--   
--   Very overloaded for three cases:
--   
--   
--   
- The first case is the basic arg of [(Text,Text)]
--   which will return a function that wants children.
--   
- The second is an arg which is HtmlT m (), in
--   which case the term accepts no attributes and just the children are
--   used for the element.
--   
- Finally, this is also used for overloaded attributes, like
--   style_ or title_. If a return type of
--   (Text,Text) is inferred then an attribute will be made.
--   
--   
--   The instances look intimidating but actually the constraints make it
--   very general so that type inference works well even in the presence of
--   things like OverloadedLists and such.
class Term arg result | result -> arg

-- | Used for constructing elements e.g. term "p" yields
--   p_.
term :: Term arg result => Text -> arg -> result

-- | Use this if you want to make an element which inserts some
--   pre-prepared attributes into the element.
termWith :: Term arg result => Text -> [Attribute] -> arg -> result

-- | Same as the Term class, but will not HTML escape its children.
--   Useful for elements like style_ or script_.
class TermRaw arg result | result -> arg

-- | Used for constructing elements e.g. termRaw "p" yields
--   p_.
termRaw :: TermRaw arg result => Text -> arg -> result

-- | Use this if you want to make an element which inserts some
--   pre-prepared attributes into the element.
termRawWith :: TermRaw arg result => Text -> [Attribute] -> arg -> result

-- | Can be converted to HTML.
class ToHtml a

-- | Convert to HTML, doing HTML escaping.
toHtml :: forall (m :: Type -> Type). (ToHtml a, Monad m) => a -> HtmlT m ()

-- | Convert to HTML without any escaping.
toHtmlRaw :: forall (m :: Type -> Type). (ToHtml a, Monad m) => a -> HtmlT m ()

-- | With an element use these attributes. An overloaded way of adding
--   attributes either to an element accepting attributes-and-children or
--   one that just accepts attributes. See the two instances.
class With a

-- | With the given element(s), use the given attributes.
with :: With a => a -> [Attribute] -> a
instance GHC.Internal.Base.Applicative m => GHC.Internal.Base.Applicative (Lucid.Base.HtmlT m)
instance GHC.Classes.Eq Lucid.Base.Attribute
instance GHC.Internal.Base.Functor m => GHC.Internal.Base.Functor (Lucid.Base.HtmlT m)
instance Data.Hashable.Class.Hashable Lucid.Base.Attribute
instance (GHC.Internal.Base.Monad m, a GHC.Types.~ ()) => GHC.Internal.Data.String.IsString (Lucid.Base.HtmlT m a)
instance Control.Monad.Morph.MFunctor Lucid.Base.HtmlT
instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Lucid.Base.HtmlT m)
instance GHC.Internal.Control.Monad.Fix.MonadFix m => GHC.Internal.Control.Monad.Fix.MonadFix (Lucid.Base.HtmlT m)
instance GHC.Internal.Base.Monad m => GHC.Internal.Base.Monad (Lucid.Base.HtmlT m)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Lucid.Base.HtmlT m)
instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Lucid.Base.HtmlT m)
instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Lucid.Base.HtmlT m)
instance Control.Monad.Trans.Class.MonadTrans Lucid.Base.HtmlT
instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Lucid.Base.HtmlT m)
instance (a GHC.Types.~ (), GHC.Internal.Base.Applicative m) => GHC.Internal.Base.Monoid (Lucid.Base.HtmlT m a)
instance (a GHC.Types.~ (), GHC.Internal.Base.Applicative m) => GHC.Internal.Base.Semigroup (Lucid.Base.HtmlT m a)
instance GHC.Internal.Show.Show Lucid.Base.Attribute
instance (m GHC.Types.~ GHC.Internal.Data.Functor.Identity.Identity) => GHC.Internal.Show.Show (Lucid.Base.HtmlT m a)
instance (GHC.Internal.Base.Monad m, Lucid.Base.ToHtml f, a GHC.Types.~ ()) => Lucid.Base.TermRaw [Lucid.Base.Attribute] (f -> Lucid.Base.HtmlT m a)
instance Lucid.Base.TermRaw Data.Text.Internal.Text Lucid.Base.Attribute
instance (GHC.Internal.Base.Monad m, a GHC.Types.~ ()) => Lucid.Base.TermRaw Data.Text.Internal.Text (Lucid.Base.HtmlT m a)
instance GHC.Internal.Base.Applicative m => Lucid.Base.Term (Lucid.Base.HtmlT m a) (Lucid.Base.HtmlT m a)
instance (GHC.Internal.Base.Applicative m, f GHC.Types.~ Lucid.Base.HtmlT m a) => Lucid.Base.Term [Lucid.Base.Attribute] (f -> Lucid.Base.HtmlT m a)
instance Lucid.Base.Term Data.Text.Internal.Text Lucid.Base.Attribute
instance Lucid.Base.ToHtml Data.ByteString.Lazy.Internal.ByteString
instance Lucid.Base.ToHtml Data.ByteString.Internal.Type.ByteString
instance (a GHC.Types.~ (), m GHC.Types.~ GHC.Internal.Data.Functor.Identity.Identity) => Lucid.Base.ToHtml (Lucid.Base.HtmlT m a)
instance Lucid.Base.ToHtml GHC.Internal.Base.String
instance Lucid.Base.ToHtml Data.Text.Internal.Lazy.Text
instance Lucid.Base.ToHtml Data.Text.Internal.Text
instance GHC.Internal.Base.Functor m => Lucid.Base.With (Lucid.Base.HtmlT m a -> Lucid.Base.HtmlT m a)
instance GHC.Internal.Base.Functor m => Lucid.Base.With (Lucid.Base.HtmlT m a)

-- | Html5 terms.
module Lucid.Html5

-- | DOCTYPE element
--   
--   This is implemented as "raw output", because the doctype doesn't
--   accept attributes, such as those inserted via with.
doctype_ :: forall (m :: Type -> Type). Applicative m => HtmlT m ()

-- | DOCTYPE element + html element
doctypehtml_ :: forall (m :: Type -> Type) a. Applicative m => HtmlT m a -> HtmlT m a

-- | a element
a_ :: Term arg result => arg -> result

-- | abbr element
abbr_ :: Term arg result => arg -> result

-- | address element
address_ :: Term arg result => arg -> result

-- | area element
area_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | article element
article_ :: Term arg result => arg -> result

-- | aside element
aside_ :: Term arg result => arg -> result

-- | audio element
audio_ :: Term arg result => arg -> result

-- | b element
b_ :: Term arg result => arg -> result

-- | base element
base_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | bdo element
bdo_ :: Term arg result => arg -> result

-- | blockquote element
blockquote_ :: Term arg result => arg -> result

-- | body element
body_ :: Term arg result => arg -> result

-- | br element
br_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | button element
button_ :: Term arg result => arg -> result

-- | canvas element
canvas_ :: Term arg result => arg -> result

-- | caption element
caption_ :: Term arg result => arg -> result

-- | cite element or cite attribute.
cite_ :: Term arg result => arg -> result

-- | code element
code_ :: Term arg result => arg -> result

-- | col element
col_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | colgroup element
colgroup_ :: Term arg result => arg -> result

-- | command element
command_ :: Term arg result => arg -> result

-- | datalist element
datalist_ :: Term arg result => arg -> result

-- | dd element
dd_ :: Term arg result => arg -> result

-- | del element
del_ :: Term arg result => arg -> result

-- | details element
details_ :: Term arg result => arg -> result

-- | dfn element
dfn_ :: Term arg result => arg -> result

-- | div element
div_ :: Term arg result => arg -> result

-- | dl element
dl_ :: Term arg result => arg -> result

-- | dt element
dt_ :: Term arg result => arg -> result

-- | em element
em_ :: Term arg result => arg -> result

-- | embed element
embed_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | fieldset element
fieldset_ :: Term arg result => arg -> result

-- | figcaption element
figcaption_ :: Term arg result => arg -> result

-- | figure element
figure_ :: Term arg result => arg -> result

-- | footer element
footer_ :: Term arg result => arg -> result

-- | form element or form attribute
form_ :: Term arg result => arg -> result

-- | h1 element
h1_ :: Term arg result => arg -> result

-- | h2 element
h2_ :: Term arg result => arg -> result

-- | h3 element
h3_ :: Term arg result => arg -> result

-- | h4 element
h4_ :: Term arg result => arg -> result

-- | h5 element
h5_ :: Term arg result => arg -> result

-- | h6 element
h6_ :: Term arg result => arg -> result

-- | head element
head_ :: Term arg result => arg -> result

-- | header element
header_ :: Term arg result => arg -> result

-- | hgroup element
hgroup_ :: Term arg result => arg -> result

-- | hr element
hr_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | html element
html_ :: Term arg result => arg -> result

-- | i element
i_ :: Term arg result => arg -> result

-- | iframe element
iframe_ :: Term arg result => arg -> result

-- | img element
img_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | input element
input_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | ins element
ins_ :: Term arg result => arg -> result

-- | kbd element
kbd_ :: Term arg result => arg -> result

-- | keygen element
keygen_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | label element or label attribute
label_ :: Term arg result => arg -> result

-- | legend element
legend_ :: Term arg result => arg -> result

-- | li element
li_ :: Term arg result => arg -> result

-- | link element
link_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | map element
map_ :: Term arg result => arg -> result

-- | main element
main_ :: Term arg result => arg -> result

-- | mark element
mark_ :: Term arg result => arg -> result

-- | menu element
menu_ :: Term arg result => arg -> result

-- | menuitem element
menuitem_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | meta element
meta_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | meter element
meter_ :: Term arg result => arg -> result

-- | nav element
nav_ :: Term arg result => arg -> result

-- | noscript element
noscript_ :: Term arg result => arg -> result

-- | object element
object_ :: Term arg result => arg -> result

-- | ol element
ol_ :: Term arg result => arg -> result

-- | optgroup element
optgroup_ :: Term arg result => arg -> result

-- | option element
option_ :: Term arg result => arg -> result

-- | output element
output_ :: Term arg result => arg -> result

-- | p element
p_ :: Term arg result => arg -> result

-- | param element
param_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | The svg attribute.
svg_ :: Term arg result => arg -> result

-- | pre element
pre_ :: Term arg result => arg -> result

-- | progress element
progress_ :: Term arg result => arg -> result

-- | q element
q_ :: Term arg result => arg -> result

-- | rp element
rp_ :: Term arg result => arg -> result

-- | rt element
rt_ :: Term arg result => arg -> result

-- | ruby element
ruby_ :: Term arg result => arg -> result

-- | samp element
samp_ :: Term arg result => arg -> result

-- | script element
script_ :: TermRaw arg result => arg -> result

-- | section element
section_ :: Term arg result => arg -> result

-- | select element
select_ :: Term arg result => arg -> result

-- | small element
small_ :: Term arg result => arg -> result

-- | source element
source_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | span element or span attribute
span_ :: Term arg result => arg -> result

-- | strong element
strong_ :: Term arg result => arg -> result

-- | style element or style attribute
style_ :: TermRaw arg result => arg -> result

-- | sub element
sub_ :: Term arg result => arg -> result

-- | summary element or summary attribute
summary_ :: Term arg result => arg -> result

-- | sup element
sup_ :: Term arg result => arg -> result

-- | table element
table_ :: Term arg result => arg -> result

-- | tbody element
tbody_ :: Term arg result => arg -> result

-- | td element
td_ :: Term arg result => arg -> result

-- | textarea element
textarea_ :: Term arg result => arg -> result

-- | tfoot element
tfoot_ :: Term arg result => arg -> result

-- | th element
th_ :: Term arg result => arg -> result

-- | template element
template_ :: Term arg result => arg -> result

-- | thead element
thead_ :: Term arg result => arg -> result

-- | time element
time_ :: Term arg result => arg -> result

-- | title element or title attribute
title_ :: Term arg result => arg -> result

-- | tr element
tr_ :: Term arg result => arg -> result

-- | track element
track_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | ul element
ul_ :: Term arg result => arg -> result

-- | var element
var_ :: Term arg result => arg -> result

-- | video element
video_ :: Term arg result => arg -> result

-- | wbr element
wbr_ :: forall (m :: Type -> Type). Applicative m => [Attribute] -> HtmlT m ()

-- | The accept attribute.
accept_ :: Text -> Attribute

-- | The acceptCharset attribute.
acceptCharset_ :: Text -> Attribute

-- | The accesskey attribute.
accesskey_ :: Text -> Attribute

-- | The action attribute.
action_ :: Text -> Attribute

-- | The alt attribute.
alt_ :: Text -> Attribute

-- | The async attribute.
async_ :: Text -> Attribute

-- | The autocomplete attribute.
autocomplete_ :: Text -> Attribute

-- | The autofocus attribute.
autofocus_ :: Attribute

-- | The autoplay attribute.
autoplay_ :: Text -> Attribute

-- | The challenge attribute.
challenge_ :: Text -> Attribute

-- | The charset attribute.
charset_ :: Text -> Attribute

-- | The checked attribute.
checked_ :: Attribute

-- | The class attribute.
class_ :: Text -> Attribute

-- | Smart constructor for class attribute.
classes_ :: [Text] -> Attribute

-- | The cols attribute.
cols_ :: Text -> Attribute

-- | The colspan attribute.
colspan_ :: Text -> Attribute

-- | The content attribute.
content_ :: Text -> Attribute

-- | The contenteditable attribute.
contenteditable_ :: Text -> Attribute

-- | The contextmenu attribute.
contextmenu_ :: Text -> Attribute

-- | The controls attribute.
controls_ :: Text -> Attribute

-- | The coords attribute.
coords_ :: Text -> Attribute

-- | The crossorigin attribute.
crossorigin_ :: Text -> Attribute

-- | The data attribute.
data_ :: Text -> Text -> Attribute

-- | The datetime attribute.
datetime_ :: Text -> Attribute

-- | The defer attribute.
defer_ :: Text -> Attribute

-- | The dir attribute.
dir_ :: Text -> Attribute

-- | The disabled attribute.
disabled_ :: Text -> Attribute

-- | The download attribute.
download_ :: Text -> Attribute

-- | The draggable attribute.
draggable_ :: Text -> Attribute

-- | The enctype attribute.
enctype_ :: Text -> Attribute

-- | The for attribute.
for_ :: Text -> Attribute

-- | The formaction attribute.
formaction_ :: Text -> Attribute

-- | The formenctype attribute.
formenctype_ :: Text -> Attribute

-- | The formmethod attribute.
formmethod_ :: Text -> Attribute

-- | The formnovalidate attribute.
formnovalidate_ :: Text -> Attribute

-- | The formtarget attribute.
formtarget_ :: Text -> Attribute

-- | The headers attribute.
headers_ :: Text -> Attribute

-- | The height attribute.
height_ :: Text -> Attribute

-- | The hidden attribute.
hidden_ :: Text -> Attribute

-- | The high attribute.
high_ :: Text -> Attribute

-- | The href attribute.
href_ :: Text -> Attribute

-- | The hreflang attribute.
hreflang_ :: Text -> Attribute

-- | The httpEquiv attribute.
httpEquiv_ :: Text -> Attribute

-- | The icon attribute.
icon_ :: Text -> Attribute

-- | The id attribute.
id_ :: Text -> Attribute

-- | The integrity attribute.
integrity_ :: Text -> Attribute

-- | The ismap attribute.
ismap_ :: Text -> Attribute

-- | The item attribute.
item_ :: Text -> Attribute

-- | The itemprop attribute.
itemprop_ :: Text -> Attribute

-- | The keytype attribute.
keytype_ :: Text -> Attribute

-- | The lang attribute.
lang_ :: Text -> Attribute

-- | The list attribute.
list_ :: Text -> Attribute

-- | The loading attribute.
loading_ :: Text -> Attribute

-- | The loop attribute.
loop_ :: Text -> Attribute

-- | The low attribute.
low_ :: Text -> Attribute

-- | The manifest attribute.
manifest_ :: Text -> Attribute

-- | The max attribute.
max_ :: Text -> Attribute

-- | The maxlength attribute.
maxlength_ :: Text -> Attribute

-- | The media attribute.
media_ :: Text -> Attribute

-- | The method attribute.
method_ :: Text -> Attribute

-- | The min attribute.
min_ :: Text -> Attribute

-- | The minlength attribute.
minlength_ :: Text -> Attribute

-- | The multiple attribute.
multiple_ :: Text -> Attribute

-- | The name attribute.
name_ :: Text -> Attribute

-- | The novalidate attribute.
novalidate_ :: Text -> Attribute

-- | The onbeforeonload attribute.
onbeforeonload_ :: Text -> Attribute

-- | The onbeforeprint attribute.
onbeforeprint_ :: Text -> Attribute

-- | The onblur attribute.
onblur_ :: Text -> Attribute

-- | The oncanplay attribute.
oncanplay_ :: Text -> Attribute

-- | The oncanplaythrough attribute.
oncanplaythrough_ :: Text -> Attribute

-- | The onchange attribute.
onchange_ :: Text -> Attribute

-- | The onclick attribute.
onclick_ :: Text -> Attribute

-- | The oncontextmenu attribute.
oncontextmenu_ :: Text -> Attribute

-- | The ondblclick attribute.
ondblclick_ :: Text -> Attribute

-- | The ondrag attribute.
ondrag_ :: Text -> Attribute

-- | The ondragend attribute.
ondragend_ :: Text -> Attribute

-- | The ondragenter attribute.
ondragenter_ :: Text -> Attribute

-- | The ondragleave attribute.
ondragleave_ :: Text -> Attribute

-- | The ondragover attribute.
ondragover_ :: Text -> Attribute

-- | The ondragstart attribute.
ondragstart_ :: Text -> Attribute

-- | The ondrop attribute.
ondrop_ :: Text -> Attribute

-- | The ondurationchange attribute.
ondurationchange_ :: Text -> Attribute

-- | The onemptied attribute.
onemptied_ :: Text -> Attribute

-- | The onended attribute.
onended_ :: Text -> Attribute

-- | The onerror attribute.
onerror_ :: Text -> Attribute

-- | The onfocus attribute.
onfocus_ :: Text -> Attribute

-- | The onformchange attribute.
onformchange_ :: Text -> Attribute

-- | The onforminput attribute.
onforminput_ :: Text -> Attribute

-- | The onhaschange attribute.
onhaschange_ :: Text -> Attribute

-- | The oninput attribute.
oninput_ :: Text -> Attribute

-- | The oninvalid attribute.
oninvalid_ :: Text -> Attribute

-- | The onkeydown attribute.
onkeydown_ :: Text -> Attribute

-- | The onkeyup attribute.
onkeyup_ :: Text -> Attribute

-- | The onload attribute.
onload_ :: Text -> Attribute

-- | The onloadeddata attribute.
onloadeddata_ :: Text -> Attribute

-- | The onloadedmetadata attribute.
onloadedmetadata_ :: Text -> Attribute

-- | The onloadstart attribute.
onloadstart_ :: Text -> Attribute

-- | The onmessage attribute.
onmessage_ :: Text -> Attribute

-- | The onmousedown attribute.
onmousedown_ :: Text -> Attribute

-- | The onmousemove attribute.
onmousemove_ :: Text -> Attribute

-- | The onmouseout attribute.
onmouseout_ :: Text -> Attribute

-- | The onmouseover attribute.
onmouseover_ :: Text -> Attribute

-- | The onmouseup attribute.
onmouseup_ :: Text -> Attribute

-- | The onmousewheel attribute.
onmousewheel_ :: Text -> Attribute

-- | The ononline attribute.
ononline_ :: Text -> Attribute

-- | The onpagehide attribute.
onpagehide_ :: Text -> Attribute

-- | The onpageshow attribute.
onpageshow_ :: Text -> Attribute

-- | The onpause attribute.
onpause_ :: Text -> Attribute

-- | The onplay attribute.
onplay_ :: Text -> Attribute

-- | The onplaying attribute.
onplaying_ :: Text -> Attribute

-- | The onprogress attribute.
onprogress_ :: Text -> Attribute

-- | The onpropstate attribute.
onpropstate_ :: Text -> Attribute

-- | The onratechange attribute.
onratechange_ :: Text -> Attribute

-- | The onreadystatechange attribute.
onreadystatechange_ :: Text -> Attribute

-- | The onredo attribute.
onredo_ :: Text -> Attribute

-- | The onresize attribute.
onresize_ :: Text -> Attribute

-- | The onscroll attribute.
onscroll_ :: Text -> Attribute

-- | The onseeked attribute.
onseeked_ :: Text -> Attribute

-- | The onseeking attribute.
onseeking_ :: Text -> Attribute

-- | The onselect attribute.
onselect_ :: Text -> Attribute

-- | The onstalled attribute.
onstalled_ :: Text -> Attribute

-- | The onstorage attribute.
onstorage_ :: Text -> Attribute

-- | The onsubmit attribute.
onsubmit_ :: Text -> Attribute

-- | The onsuspend attribute.
onsuspend_ :: Text -> Attribute

-- | The ontimeupdate attribute.
ontimeupdate_ :: Text -> Attribute

-- | The onundo attribute.
onundo_ :: Text -> Attribute

-- | The onunload attribute.
onunload_ :: Text -> Attribute

-- | The onvolumechange attribute.
onvolumechange_ :: Text -> Attribute

-- | The onwaiting attribute.
onwaiting_ :: Text -> Attribute

-- | The open attribute.
open_ :: Text -> Attribute

-- | The optimum attribute.
optimum_ :: Text -> Attribute

-- | The pattern attribute.
pattern_ :: Text -> Attribute

-- | The ping attribute.
ping_ :: Text -> Attribute

-- | The placeholder attribute.
placeholder_ :: Text -> Attribute

-- | The poster attribute.
poster_ :: Text -> Attribute

-- | The preload attribute.
preload_ :: Text -> Attribute

-- | The pubdate attribute.
pubdate_ :: Text -> Attribute

-- | The radiogroup attribute.
radiogroup_ :: Text -> Attribute

-- | The readonly attribute.
readonly_ :: Text -> Attribute

-- | The rel attribute.
rel_ :: Text -> Attribute

-- | The required attribute.
required_ :: Text -> Attribute

-- | The reversed attribute.
reversed_ :: Text -> Attribute

-- | The role attribute.
role_ :: Text -> Attribute

-- | The rows attribute.
rows_ :: Text -> Attribute

-- | The rowspan attribute.
rowspan_ :: Text -> Attribute

-- | The sandbox attribute.
sandbox_ :: Text -> Attribute

-- | The scope attribute.
scope_ :: Text -> Attribute

-- | The scoped attribute.
scoped_ :: Text -> Attribute

-- | The seamless attribute.
seamless_ :: Text -> Attribute

-- | The selected attribute.
selected_ :: Text -> Attribute

-- | The shape attribute.
shape_ :: Text -> Attribute

-- | The size attribute.
size_ :: Text -> Attribute

-- | The sizes attribute.
sizes_ :: Text -> Attribute

-- | The spellcheck attribute.
spellcheck_ :: Text -> Attribute

-- | The src attribute.
src_ :: Text -> Attribute

-- | The srcdoc attribute.
srcdoc_ :: Text -> Attribute

-- | The start attribute.
start_ :: Text -> Attribute

-- | The step attribute.
step_ :: Text -> Attribute

-- | The subject attribute.
subject_ :: Text -> Attribute

-- | The tabindex attribute.
tabindex_ :: Text -> Attribute

-- | The target attribute.
target_ :: Text -> Attribute

-- | The type attribute.
type_ :: Text -> Attribute

-- | The usemap attribute.
usemap_ :: Text -> Attribute

-- | The value attribute.
value_ :: Text -> Attribute

-- | The width attribute.
width_ :: Text -> Attribute

-- | The wrap attribute.
wrap_ :: Text -> Attribute

-- | The xmlns attribute.
xmlns_ :: Text -> Attribute

-- | Bootstrap layout elements. See
--   http://getbootstrap.com/2.3.2/scaffolding.html for more
--   information.
module Lucid.Bootstrap

-- | A grid container.
container_ :: Term arg result => arg -> result

-- | A fluid grid container.
containerFluid_ :: Term arg result => arg -> result

-- | A grid row.
row_ :: Term arg result => arg -> result

-- | A fluid grid row.
rowFluid_ :: Term arg result => arg -> result

-- | A span of 1 column.
span1_ :: Term arg result => arg -> result

-- | A span of 2 columns.
span2_ :: Term arg result => arg -> result

-- | A span of 3 columns.
span3_ :: Term arg result => arg -> result

-- | A span of 4 columns.
span4_ :: Term arg result => arg -> result

-- | A span of 5 columns.
span5_ :: Term arg result => arg -> result

-- | A span of 6 columns.
span6_ :: Term arg result => arg -> result

-- | A span of 7 columns.
span7_ :: Term arg result => arg -> result

-- | A span of 8 columns.
span8_ :: Term arg result => arg -> result

-- | A span of 9 columns.
span9_ :: Term arg result => arg -> result

-- | A span of 10 columns.
span10_ :: Term arg result => arg -> result

-- | A span of 11 columns.
span11_ :: Term arg result => arg -> result

-- | A span of 12 columns.
span12_ :: Term arg result => arg -> result

-- | Clear to write, read and edit DSL for writing HTML
--   
--   See Lucid.Html5 for a complete list of Html5 combinators. That
--   module is re-exported from this module for your convenience.
--   
--   See Lucid.Base for lower level functions like
--   makeElement, makeAttribute, termRaw, etc.
--   
--   To convert html to the lucid DSL, use the (experimental) program
--   lucid-from-html which may eventually be integrated into lucid
--   itself.
module Lucid

-- | Render the HTML to a lazy Text.
--   
--   This is a convenience function defined in terms of execHtmlT,
--   runIdentity and toLazyByteString, and decodeUtf8.
--   Check the source if you're interested in the lower-level behaviour.
renderText :: Html a -> Text

-- | Render the HTML to a lazy ByteString.
--   
--   This is a convenience function defined in terms of execHtmlT,
--   runIdentity and toLazyByteString. Check the source if
--   you're interested in the lower-level behaviour.
renderBS :: Html a -> ByteString

-- | Render the HTML to a lazy Text, but in a monad.
--   
--   This is a convenience function defined in terms of execHtmlT
--   and toLazyByteString, and decodeUtf8. Check the source
--   if you're interested in the lower-level behaviour.
renderTextT :: Monad m => HtmlT m a -> m Text

-- | Render the HTML to a lazy ByteString, but in a monad.
--   
--   This is a convenience function defined in terms of execHtmlT
--   and toLazyByteString. Check the source if you're interested in
--   the lower-level behaviour.
renderBST :: Monad m => HtmlT m a -> m ByteString

-- | Render the HTML to a lazy ByteString.
--   
--   This is a convenience function defined in terms of execHtmlT,
--   runIdentity and toLazyByteString. Check the source if
--   you're interested in the lower-level behaviour.
renderToFile :: FilePath -> Html a -> IO ()

-- | Build the HTML. Analogous to execState.
--   
--   You might want to use this is if you want to do something with the raw
--   Builder. Otherwise for simple cases you can just use
--   renderText or renderBS.
execHtmlT :: Monad m => HtmlT m a -> m Builder

-- | Evaluate the HTML to its return value. Analogous to
--   evalState.
--   
--   Use this if you want to ignore the HTML output of an action completely
--   and just get the result.
--   
--   For using with the Html type, you'll need runIdentity
--   e.g.
--   
--   
--   >>> runIdentity (evalHtmlT (p_ "Hello!"))
--   ()
--   
evalHtmlT :: Monad m => HtmlT m a -> m a

-- | This is the low-level way to run the HTML transformer, finally
--   returning an element builder and a value. You can pass mempty
--   for this argument for a top-level call. See evalHtmlT and
--   execHtmlT for easier to use functions.
runHtmlT :: HtmlT m a -> m (Seq Attribute -> Builder, a)

-- | Simple HTML builder type. Defined in terms of HtmlT. Check out
--   that type for instance information.
--   
--   Simple use-cases will just use this type. But if you want to
--   transformer over Reader or something, you can go and use HtmlT.
type Html = HtmlT Identity

-- | A monad transformer that generates HTML. Use the simpler Html
--   type if you don't want to transform over some other monad.
--   
--   Don't rely on the internal representation of this type. Use the monad
--   and functor classes.
data HtmlT (m :: Type -> Type) a

-- | A simple attribute. Don't use the constructor, use
--   makeAttribute. Attributes are case sensitive, so if you want
--   attributes to be merged properly, use a single case representation.
data Attribute

-- | Used to construct HTML terms.
--   
--   Simplest use: p_ = term "p" yields p_.
--   
--   Very overloaded for three cases:
--   
--   
--   
- The first case is the basic arg of [(Text,Text)]
--   which will return a function that wants children.
--   
- The second is an arg which is HtmlT m (), in
--   which case the term accepts no attributes and just the children are
--   used for the element.
--   
- Finally, this is also used for overloaded attributes, like
--   style_ or title_. If a return type of
--   (Text,Text) is inferred then an attribute will be made.
--   
--   
--   The instances look intimidating but actually the constraints make it
--   very general so that type inference works well even in the presence of
--   things like OverloadedLists and such.
class Term arg result | result -> arg

-- | Used for constructing elements e.g. term "p" yields
--   p_.
term :: Term arg result => Text -> arg -> result

-- | Use this if you want to make an element which inserts some
--   pre-prepared attributes into the element.
termWith :: Term arg result => Text -> [Attribute] -> arg -> result

-- | Can be converted to HTML.
class ToHtml a

-- | Convert to HTML, doing HTML escaping.
toHtml :: forall (m :: Type -> Type). (ToHtml a, Monad m) => a -> HtmlT m ()

-- | Convert to HTML without any escaping.
toHtmlRaw :: forall (m :: Type -> Type). (ToHtml a, Monad m) => a -> HtmlT m ()

-- | With an element use these attributes. An overloaded way of adding
--   attributes either to an element accepting attributes-and-children or
--   one that just accepts attributes. See the two instances.
class With a

-- | With the given element(s), use the given attributes.
with :: With a => a -> [Attribute] -> a
