diff --git a/blaze-html.cabal b/blaze-html.cabal
--- a/blaze-html.cabal
+++ b/blaze-html.cabal
@@ -1,5 +1,5 @@
 Name:         blaze-html
-Version:      0.5.0.0
+Version:      0.5.1.0
 Homepage:     http://jaspervdj.be/blaze
 Bug-Reports:  http://github.com/jaspervdj/blaze-html/issues
 License:      BSD3
@@ -46,12 +46,14 @@
     Text.Blaze.XHtml1.Strict.Attributes
     Text.Blaze.XHtml1.Transitional
     Text.Blaze.XHtml1.Transitional.Attributes
+    Text.Blaze.XHtml5
+    Text.Blaze.XHtml5.Attributes
   
   Build-depends:
     base          >= 4     && < 5,
     blaze-builder >= 0.2   && < 0.4,
     blaze-markup  >= 0.5.1 && < 0.6,
-    bytestring    >= 0.9   && < 0.10,
+    bytestring    >= 0.9   && < 0.11,
     text          >= 0.10  && < 0.12
 
 Test-suite blaze-html-tests
@@ -76,7 +78,7 @@
     base          >= 4     && < 5,
     blaze-builder >= 0.2   && < 0.4,
     blaze-markup  >= 0.5.1 && < 0.6,
-    bytestring    >= 0.9   && < 0.10,
+    bytestring    >= 0.9   && < 0.11,
     text          >= 0.10  && < 0.12
 
 Source-repository head
diff --git a/src/Text/Blaze/Html.hs b/src/Text/Blaze/Html.hs
--- a/src/Text/Blaze/Html.hs
+++ b/src/Text/Blaze/Html.hs
@@ -2,11 +2,15 @@
     ( module Text.Blaze
     , Html
     , toHtml
+    , preEscapedToHtml
     ) where
 
 import Text.Blaze
 
 type Html = Markup
 
-toHtml :: ToMarkup a => a -> Markup 
+toHtml :: ToMarkup a => a -> Html
 toHtml = toMarkup
+
+preEscapedToHtml :: ToMarkup a => a -> Html
+preEscapedToHtml = preEscapedToMarkup
diff --git a/src/Text/Blaze/XHtml5.hs b/src/Text/Blaze/XHtml5.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Blaze/XHtml5.hs
@@ -0,0 +1,2005 @@
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:69
+--
+{-# LANGUAGE OverloadedStrings #-}
+-- | This module exports HTML combinators used to create documents.
+--
+module Text.Blaze.XHtml5
+    ( module Text.Blaze.Html
+    , docType
+    , docTypeHtml
+    , a
+    , abbr
+    , address
+    , area
+    , article
+    , aside
+    , audio
+    , b
+    , base
+    , bdo
+    , blockquote
+    , body
+    , br
+    , button
+    , canvas
+    , caption
+    , cite
+    , code
+    , col
+    , colgroup
+    , command
+    , datalist
+    , dd
+    , del
+    , details
+    , dfn
+    , div
+    , dl
+    , dt
+    , em
+    , embed
+    , fieldset
+    , figcaption
+    , figure
+    , footer
+    , form
+    , h1
+    , h2
+    , h3
+    , h4
+    , h5
+    , h6
+    , head
+    , header
+    , hgroup
+    , hr
+    , html
+    , i
+    , iframe
+    , img
+    , input
+    , ins
+    , kbd
+    , keygen
+    , label
+    , legend
+    , li
+    , link
+    , map
+    , mark
+    , menu
+    , meta
+    , meter
+    , nav
+    , noscript
+    , object
+    , ol
+    , optgroup
+    , option
+    , output
+    , p
+    , param
+    , pre
+    , progress
+    , q
+    , rp
+    , rt
+    , ruby
+    , samp
+    , script
+    , section
+    , select
+    , small
+    , source
+    , span
+    , strong
+    , style
+    , sub
+    , summary
+    , sup
+    , table
+    , tbody
+    , td
+    , textarea
+    , tfoot
+    , th
+    , thead
+    , time
+    , title
+    , tr
+    , ul
+    , var
+    , video
+    ) where
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:77
+--
+import Prelude ((>>), (.))
+
+import Text.Blaze
+import Text.Blaze.Internal
+import Text.Blaze.Html
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:156
+--
+-- | Combinator for the document type. This should be placed at the top
+-- of every HTML page.
+--
+-- Example:
+--
+-- > docType
+--
+-- Result:
+--
+-- > <!DOCTYPE HTML>
+--
+docType :: Html  -- ^ The document type HTML.
+docType = preEscapedText "<!DOCTYPE HTML>\n"
+{-# INLINE docType #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:177
+--
+-- | Combinator for the @\<html>@ element. This combinator will also
+-- insert the correct doctype.
+--
+-- Example:
+--
+-- > docTypeHtml $ span $ text "foo"
+--
+-- Result:
+--
+-- > <!DOCTYPE HTML>
+-- > <html><span>foo</span></html>
+--
+docTypeHtml :: Html  -- ^ Inner HTML.
+            -> Html  -- ^ Resulting HTML.
+docTypeHtml inner = docType >> html inner
+{-# INLINE docTypeHtml #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<a>@ element.
+--
+-- Example:
+--
+-- > a $ span $ text "foo"
+--
+-- Result:
+--
+-- > <a><span>foo</span></a>
+--
+a :: Html  -- ^ Inner HTML.
+  -> Html  -- ^ Resulting HTML.
+a = Parent "a" "<a" "</a>"
+{-# INLINE a #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<abbr>@ element.
+--
+-- Example:
+--
+-- > abbr $ span $ text "foo"
+--
+-- Result:
+--
+-- > <abbr><span>foo</span></abbr>
+--
+abbr :: Html  -- ^ Inner HTML.
+     -> Html  -- ^ Resulting HTML.
+abbr = Parent "abbr" "<abbr" "</abbr>"
+{-# INLINE abbr #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<address>@ element.
+--
+-- Example:
+--
+-- > address $ span $ text "foo"
+--
+-- Result:
+--
+-- > <address><span>foo</span></address>
+--
+address :: Html  -- ^ Inner HTML.
+        -> Html  -- ^ Resulting HTML.
+address = Parent "address" "<address" "</address>"
+{-# INLINE address #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:226
+--
+-- | Combinator for the @\<area />@ element.
+--
+-- Example:
+--
+-- > area
+--
+-- Result:
+--
+-- > <area />
+--
+area :: Html  -- ^ Resulting HTML.
+area = Leaf "area" "<area" " />"
+{-# INLINE area #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<article>@ element.
+--
+-- Example:
+--
+-- > article $ span $ text "foo"
+--
+-- Result:
+--
+-- > <article><span>foo</span></article>
+--
+article :: Html  -- ^ Inner HTML.
+        -> Html  -- ^ Resulting HTML.
+article = Parent "article" "<article" "</article>"
+{-# INLINE article #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<aside>@ element.
+--
+-- Example:
+--
+-- > aside $ span $ text "foo"
+--
+-- Result:
+--
+-- > <aside><span>foo</span></aside>
+--
+aside :: Html  -- ^ Inner HTML.
+      -> Html  -- ^ Resulting HTML.
+aside = Parent "aside" "<aside" "</aside>"
+{-# INLINE aside #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<audio>@ element.
+--
+-- Example:
+--
+-- > audio $ span $ text "foo"
+--
+-- Result:
+--
+-- > <audio><span>foo</span></audio>
+--
+audio :: Html  -- ^ Inner HTML.
+      -> Html  -- ^ Resulting HTML.
+audio = Parent "audio" "<audio" "</audio>"
+{-# INLINE audio #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<b>@ element.
+--
+-- Example:
+--
+-- > b $ span $ text "foo"
+--
+-- Result:
+--
+-- > <b><span>foo</span></b>
+--
+b :: Html  -- ^ Inner HTML.
+  -> Html  -- ^ Resulting HTML.
+b = Parent "b" "<b" "</b>"
+{-# INLINE b #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<base>@ element.
+--
+-- Example:
+--
+-- > base $ span $ text "foo"
+--
+-- Result:
+--
+-- > <base><span>foo</span></base>
+--
+base :: Html  -- ^ Inner HTML.
+     -> Html  -- ^ Resulting HTML.
+base = Parent "base" "<base" "</base>"
+{-# INLINE base #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<bdo>@ element.
+--
+-- Example:
+--
+-- > bdo $ span $ text "foo"
+--
+-- Result:
+--
+-- > <bdo><span>foo</span></bdo>
+--
+bdo :: Html  -- ^ Inner HTML.
+    -> Html  -- ^ Resulting HTML.
+bdo = Parent "bdo" "<bdo" "</bdo>"
+{-# INLINE bdo #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<blockquote>@ element.
+--
+-- Example:
+--
+-- > blockquote $ span $ text "foo"
+--
+-- Result:
+--
+-- > <blockquote><span>foo</span></blockquote>
+--
+blockquote :: Html  -- ^ Inner HTML.
+           -> Html  -- ^ Resulting HTML.
+blockquote = Parent "blockquote" "<blockquote" "</blockquote>"
+{-# INLINE blockquote #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<body>@ element.
+--
+-- Example:
+--
+-- > body $ span $ text "foo"
+--
+-- Result:
+--
+-- > <body><span>foo</span></body>
+--
+body :: Html  -- ^ Inner HTML.
+     -> Html  -- ^ Resulting HTML.
+body = Parent "body" "<body" "</body>"
+{-# INLINE body #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:226
+--
+-- | Combinator for the @\<br />@ element.
+--
+-- Example:
+--
+-- > br
+--
+-- Result:
+--
+-- > <br />
+--
+br :: Html  -- ^ Resulting HTML.
+br = Leaf "br" "<br" " />"
+{-# INLINE br #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<button>@ element.
+--
+-- Example:
+--
+-- > button $ span $ text "foo"
+--
+-- Result:
+--
+-- > <button><span>foo</span></button>
+--
+button :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+button = Parent "button" "<button" "</button>"
+{-# INLINE button #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<canvas>@ element.
+--
+-- Example:
+--
+-- > canvas $ span $ text "foo"
+--
+-- Result:
+--
+-- > <canvas><span>foo</span></canvas>
+--
+canvas :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+canvas = Parent "canvas" "<canvas" "</canvas>"
+{-# INLINE canvas #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<caption>@ element.
+--
+-- Example:
+--
+-- > caption $ span $ text "foo"
+--
+-- Result:
+--
+-- > <caption><span>foo</span></caption>
+--
+caption :: Html  -- ^ Inner HTML.
+        -> Html  -- ^ Resulting HTML.
+caption = Parent "caption" "<caption" "</caption>"
+{-# INLINE caption #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<cite>@ element.
+--
+-- Example:
+--
+-- > cite $ span $ text "foo"
+--
+-- Result:
+--
+-- > <cite><span>foo</span></cite>
+--
+cite :: Html  -- ^ Inner HTML.
+     -> Html  -- ^ Resulting HTML.
+cite = Parent "cite" "<cite" "</cite>"
+{-# INLINE cite #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<code>@ element.
+--
+-- Example:
+--
+-- > code $ span $ text "foo"
+--
+-- Result:
+--
+-- > <code><span>foo</span></code>
+--
+code :: Html  -- ^ Inner HTML.
+     -> Html  -- ^ Resulting HTML.
+code = Parent "code" "<code" "</code>"
+{-# INLINE code #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:226
+--
+-- | Combinator for the @\<col />@ element.
+--
+-- Example:
+--
+-- > col
+--
+-- Result:
+--
+-- > <col />
+--
+col :: Html  -- ^ Resulting HTML.
+col = Leaf "col" "<col" " />"
+{-# INLINE col #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<colgroup>@ element.
+--
+-- Example:
+--
+-- > colgroup $ span $ text "foo"
+--
+-- Result:
+--
+-- > <colgroup><span>foo</span></colgroup>
+--
+colgroup :: Html  -- ^ Inner HTML.
+         -> Html  -- ^ Resulting HTML.
+colgroup = Parent "colgroup" "<colgroup" "</colgroup>"
+{-# INLINE colgroup #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<command>@ element.
+--
+-- Example:
+--
+-- > command $ span $ text "foo"
+--
+-- Result:
+--
+-- > <command><span>foo</span></command>
+--
+command :: Html  -- ^ Inner HTML.
+        -> Html  -- ^ Resulting HTML.
+command = Parent "command" "<command" "</command>"
+{-# INLINE command #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<datalist>@ element.
+--
+-- Example:
+--
+-- > datalist $ span $ text "foo"
+--
+-- Result:
+--
+-- > <datalist><span>foo</span></datalist>
+--
+datalist :: Html  -- ^ Inner HTML.
+         -> Html  -- ^ Resulting HTML.
+datalist = Parent "datalist" "<datalist" "</datalist>"
+{-# INLINE datalist #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<dd>@ element.
+--
+-- Example:
+--
+-- > dd $ span $ text "foo"
+--
+-- Result:
+--
+-- > <dd><span>foo</span></dd>
+--
+dd :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+dd = Parent "dd" "<dd" "</dd>"
+{-# INLINE dd #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<del>@ element.
+--
+-- Example:
+--
+-- > del $ span $ text "foo"
+--
+-- Result:
+--
+-- > <del><span>foo</span></del>
+--
+del :: Html  -- ^ Inner HTML.
+    -> Html  -- ^ Resulting HTML.
+del = Parent "del" "<del" "</del>"
+{-# INLINE del #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<details>@ element.
+--
+-- Example:
+--
+-- > details $ span $ text "foo"
+--
+-- Result:
+--
+-- > <details><span>foo</span></details>
+--
+details :: Html  -- ^ Inner HTML.
+        -> Html  -- ^ Resulting HTML.
+details = Parent "details" "<details" "</details>"
+{-# INLINE details #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<dfn>@ element.
+--
+-- Example:
+--
+-- > dfn $ span $ text "foo"
+--
+-- Result:
+--
+-- > <dfn><span>foo</span></dfn>
+--
+dfn :: Html  -- ^ Inner HTML.
+    -> Html  -- ^ Resulting HTML.
+dfn = Parent "dfn" "<dfn" "</dfn>"
+{-# INLINE dfn #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<div>@ element.
+--
+-- Example:
+--
+-- > div $ span $ text "foo"
+--
+-- Result:
+--
+-- > <div><span>foo</span></div>
+--
+div :: Html  -- ^ Inner HTML.
+    -> Html  -- ^ Resulting HTML.
+div = Parent "div" "<div" "</div>"
+{-# INLINE div #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<dl>@ element.
+--
+-- Example:
+--
+-- > dl $ span $ text "foo"
+--
+-- Result:
+--
+-- > <dl><span>foo</span></dl>
+--
+dl :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+dl = Parent "dl" "<dl" "</dl>"
+{-# INLINE dl #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<dt>@ element.
+--
+-- Example:
+--
+-- > dt $ span $ text "foo"
+--
+-- Result:
+--
+-- > <dt><span>foo</span></dt>
+--
+dt :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+dt = Parent "dt" "<dt" "</dt>"
+{-# INLINE dt #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<em>@ element.
+--
+-- Example:
+--
+-- > em $ span $ text "foo"
+--
+-- Result:
+--
+-- > <em><span>foo</span></em>
+--
+em :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+em = Parent "em" "<em" "</em>"
+{-# INLINE em #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:226
+--
+-- | Combinator for the @\<embed />@ element.
+--
+-- Example:
+--
+-- > embed
+--
+-- Result:
+--
+-- > <embed />
+--
+embed :: Html  -- ^ Resulting HTML.
+embed = Leaf "embed" "<embed" " />"
+{-# INLINE embed #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<fieldset>@ element.
+--
+-- Example:
+--
+-- > fieldset $ span $ text "foo"
+--
+-- Result:
+--
+-- > <fieldset><span>foo</span></fieldset>
+--
+fieldset :: Html  -- ^ Inner HTML.
+         -> Html  -- ^ Resulting HTML.
+fieldset = Parent "fieldset" "<fieldset" "</fieldset>"
+{-# INLINE fieldset #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<figcaption>@ element.
+--
+-- Example:
+--
+-- > figcaption $ span $ text "foo"
+--
+-- Result:
+--
+-- > <figcaption><span>foo</span></figcaption>
+--
+figcaption :: Html  -- ^ Inner HTML.
+           -> Html  -- ^ Resulting HTML.
+figcaption = Parent "figcaption" "<figcaption" "</figcaption>"
+{-# INLINE figcaption #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<figure>@ element.
+--
+-- Example:
+--
+-- > figure $ span $ text "foo"
+--
+-- Result:
+--
+-- > <figure><span>foo</span></figure>
+--
+figure :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+figure = Parent "figure" "<figure" "</figure>"
+{-# INLINE figure #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<footer>@ element.
+--
+-- Example:
+--
+-- > footer $ span $ text "foo"
+--
+-- Result:
+--
+-- > <footer><span>foo</span></footer>
+--
+footer :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+footer = Parent "footer" "<footer" "</footer>"
+{-# INLINE footer #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<form>@ element.
+--
+-- Example:
+--
+-- > form $ span $ text "foo"
+--
+-- Result:
+--
+-- > <form><span>foo</span></form>
+--
+form :: Html  -- ^ Inner HTML.
+     -> Html  -- ^ Resulting HTML.
+form = Parent "form" "<form" "</form>"
+{-# INLINE form #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<h1>@ element.
+--
+-- Example:
+--
+-- > h1 $ span $ text "foo"
+--
+-- Result:
+--
+-- > <h1><span>foo</span></h1>
+--
+h1 :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+h1 = Parent "h1" "<h1" "</h1>"
+{-# INLINE h1 #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<h2>@ element.
+--
+-- Example:
+--
+-- > h2 $ span $ text "foo"
+--
+-- Result:
+--
+-- > <h2><span>foo</span></h2>
+--
+h2 :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+h2 = Parent "h2" "<h2" "</h2>"
+{-# INLINE h2 #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<h3>@ element.
+--
+-- Example:
+--
+-- > h3 $ span $ text "foo"
+--
+-- Result:
+--
+-- > <h3><span>foo</span></h3>
+--
+h3 :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+h3 = Parent "h3" "<h3" "</h3>"
+{-# INLINE h3 #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<h4>@ element.
+--
+-- Example:
+--
+-- > h4 $ span $ text "foo"
+--
+-- Result:
+--
+-- > <h4><span>foo</span></h4>
+--
+h4 :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+h4 = Parent "h4" "<h4" "</h4>"
+{-# INLINE h4 #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<h5>@ element.
+--
+-- Example:
+--
+-- > h5 $ span $ text "foo"
+--
+-- Result:
+--
+-- > <h5><span>foo</span></h5>
+--
+h5 :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+h5 = Parent "h5" "<h5" "</h5>"
+{-# INLINE h5 #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<h6>@ element.
+--
+-- Example:
+--
+-- > h6 $ span $ text "foo"
+--
+-- Result:
+--
+-- > <h6><span>foo</span></h6>
+--
+h6 :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+h6 = Parent "h6" "<h6" "</h6>"
+{-# INLINE h6 #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<head>@ element.
+--
+-- Example:
+--
+-- > head $ span $ text "foo"
+--
+-- Result:
+--
+-- > <head><span>foo</span></head>
+--
+head :: Html  -- ^ Inner HTML.
+     -> Html  -- ^ Resulting HTML.
+head = Parent "head" "<head" "</head>"
+{-# INLINE head #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<header>@ element.
+--
+-- Example:
+--
+-- > header $ span $ text "foo"
+--
+-- Result:
+--
+-- > <header><span>foo</span></header>
+--
+header :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+header = Parent "header" "<header" "</header>"
+{-# INLINE header #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<hgroup>@ element.
+--
+-- Example:
+--
+-- > hgroup $ span $ text "foo"
+--
+-- Result:
+--
+-- > <hgroup><span>foo</span></hgroup>
+--
+hgroup :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+hgroup = Parent "hgroup" "<hgroup" "</hgroup>"
+{-# INLINE hgroup #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:226
+--
+-- | Combinator for the @\<hr />@ element.
+--
+-- Example:
+--
+-- > hr
+--
+-- Result:
+--
+-- > <hr />
+--
+hr :: Html  -- ^ Resulting HTML.
+hr = Leaf "hr" "<hr" " />"
+{-# INLINE hr #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<html>@ element.
+--
+-- Example:
+--
+-- > html $ span $ text "foo"
+--
+-- Result:
+--
+-- > <html><span>foo</span></html>
+--
+html :: Html  -- ^ Inner HTML.
+     -> Html  -- ^ Resulting HTML.
+html = Parent "html" "<html" "</html>"
+{-# INLINE html #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<i>@ element.
+--
+-- Example:
+--
+-- > i $ span $ text "foo"
+--
+-- Result:
+--
+-- > <i><span>foo</span></i>
+--
+i :: Html  -- ^ Inner HTML.
+  -> Html  -- ^ Resulting HTML.
+i = Parent "i" "<i" "</i>"
+{-# INLINE i #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<iframe>@ element.
+--
+-- Example:
+--
+-- > iframe $ span $ text "foo"
+--
+-- Result:
+--
+-- > <iframe><span>foo</span></iframe>
+--
+iframe :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+iframe = Parent "iframe" "<iframe" "</iframe>"
+{-# INLINE iframe #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:226
+--
+-- | Combinator for the @\<img />@ element.
+--
+-- Example:
+--
+-- > img
+--
+-- Result:
+--
+-- > <img />
+--
+img :: Html  -- ^ Resulting HTML.
+img = Leaf "img" "<img" " />"
+{-# INLINE img #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:226
+--
+-- | Combinator for the @\<input />@ element.
+--
+-- Example:
+--
+-- > input
+--
+-- Result:
+--
+-- > <input />
+--
+input :: Html  -- ^ Resulting HTML.
+input = Leaf "input" "<input" " />"
+{-# INLINE input #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<ins>@ element.
+--
+-- Example:
+--
+-- > ins $ span $ text "foo"
+--
+-- Result:
+--
+-- > <ins><span>foo</span></ins>
+--
+ins :: Html  -- ^ Inner HTML.
+    -> Html  -- ^ Resulting HTML.
+ins = Parent "ins" "<ins" "</ins>"
+{-# INLINE ins #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<kbd>@ element.
+--
+-- Example:
+--
+-- > kbd $ span $ text "foo"
+--
+-- Result:
+--
+-- > <kbd><span>foo</span></kbd>
+--
+kbd :: Html  -- ^ Inner HTML.
+    -> Html  -- ^ Resulting HTML.
+kbd = Parent "kbd" "<kbd" "</kbd>"
+{-# INLINE kbd #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<keygen>@ element.
+--
+-- Example:
+--
+-- > keygen $ span $ text "foo"
+--
+-- Result:
+--
+-- > <keygen><span>foo</span></keygen>
+--
+keygen :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+keygen = Parent "keygen" "<keygen" "</keygen>"
+{-# INLINE keygen #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<label>@ element.
+--
+-- Example:
+--
+-- > label $ span $ text "foo"
+--
+-- Result:
+--
+-- > <label><span>foo</span></label>
+--
+label :: Html  -- ^ Inner HTML.
+      -> Html  -- ^ Resulting HTML.
+label = Parent "label" "<label" "</label>"
+{-# INLINE label #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<legend>@ element.
+--
+-- Example:
+--
+-- > legend $ span $ text "foo"
+--
+-- Result:
+--
+-- > <legend><span>foo</span></legend>
+--
+legend :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+legend = Parent "legend" "<legend" "</legend>"
+{-# INLINE legend #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<li>@ element.
+--
+-- Example:
+--
+-- > li $ span $ text "foo"
+--
+-- Result:
+--
+-- > <li><span>foo</span></li>
+--
+li :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+li = Parent "li" "<li" "</li>"
+{-# INLINE li #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:226
+--
+-- | Combinator for the @\<link />@ element.
+--
+-- Example:
+--
+-- > link
+--
+-- Result:
+--
+-- > <link />
+--
+link :: Html  -- ^ Resulting HTML.
+link = Leaf "link" "<link" " />"
+{-# INLINE link #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<map>@ element.
+--
+-- Example:
+--
+-- > map $ span $ text "foo"
+--
+-- Result:
+--
+-- > <map><span>foo</span></map>
+--
+map :: Html  -- ^ Inner HTML.
+    -> Html  -- ^ Resulting HTML.
+map = Parent "map" "<map" "</map>"
+{-# INLINE map #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<mark>@ element.
+--
+-- Example:
+--
+-- > mark $ span $ text "foo"
+--
+-- Result:
+--
+-- > <mark><span>foo</span></mark>
+--
+mark :: Html  -- ^ Inner HTML.
+     -> Html  -- ^ Resulting HTML.
+mark = Parent "mark" "<mark" "</mark>"
+{-# INLINE mark #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<menu>@ element.
+--
+-- Example:
+--
+-- > menu $ span $ text "foo"
+--
+-- Result:
+--
+-- > <menu><span>foo</span></menu>
+--
+menu :: Html  -- ^ Inner HTML.
+     -> Html  -- ^ Resulting HTML.
+menu = Parent "menu" "<menu" "</menu>"
+{-# INLINE menu #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:226
+--
+-- | Combinator for the @\<meta />@ element.
+--
+-- Example:
+--
+-- > meta
+--
+-- Result:
+--
+-- > <meta />
+--
+meta :: Html  -- ^ Resulting HTML.
+meta = Leaf "meta" "<meta" " />"
+{-# INLINE meta #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<meter>@ element.
+--
+-- Example:
+--
+-- > meter $ span $ text "foo"
+--
+-- Result:
+--
+-- > <meter><span>foo</span></meter>
+--
+meter :: Html  -- ^ Inner HTML.
+      -> Html  -- ^ Resulting HTML.
+meter = Parent "meter" "<meter" "</meter>"
+{-# INLINE meter #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<nav>@ element.
+--
+-- Example:
+--
+-- > nav $ span $ text "foo"
+--
+-- Result:
+--
+-- > <nav><span>foo</span></nav>
+--
+nav :: Html  -- ^ Inner HTML.
+    -> Html  -- ^ Resulting HTML.
+nav = Parent "nav" "<nav" "</nav>"
+{-# INLINE nav #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<noscript>@ element.
+--
+-- Example:
+--
+-- > noscript $ span $ text "foo"
+--
+-- Result:
+--
+-- > <noscript><span>foo</span></noscript>
+--
+noscript :: Html  -- ^ Inner HTML.
+         -> Html  -- ^ Resulting HTML.
+noscript = Parent "noscript" "<noscript" "</noscript>"
+{-# INLINE noscript #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<object>@ element.
+--
+-- Example:
+--
+-- > object $ span $ text "foo"
+--
+-- Result:
+--
+-- > <object><span>foo</span></object>
+--
+object :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+object = Parent "object" "<object" "</object>"
+{-# INLINE object #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<ol>@ element.
+--
+-- Example:
+--
+-- > ol $ span $ text "foo"
+--
+-- Result:
+--
+-- > <ol><span>foo</span></ol>
+--
+ol :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+ol = Parent "ol" "<ol" "</ol>"
+{-# INLINE ol #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<optgroup>@ element.
+--
+-- Example:
+--
+-- > optgroup $ span $ text "foo"
+--
+-- Result:
+--
+-- > <optgroup><span>foo</span></optgroup>
+--
+optgroup :: Html  -- ^ Inner HTML.
+         -> Html  -- ^ Resulting HTML.
+optgroup = Parent "optgroup" "<optgroup" "</optgroup>"
+{-# INLINE optgroup #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<option>@ element.
+--
+-- Example:
+--
+-- > option $ span $ text "foo"
+--
+-- Result:
+--
+-- > <option><span>foo</span></option>
+--
+option :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+option = Parent "option" "<option" "</option>"
+{-# INLINE option #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<output>@ element.
+--
+-- Example:
+--
+-- > output $ span $ text "foo"
+--
+-- Result:
+--
+-- > <output><span>foo</span></output>
+--
+output :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+output = Parent "output" "<output" "</output>"
+{-# INLINE output #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<p>@ element.
+--
+-- Example:
+--
+-- > p $ span $ text "foo"
+--
+-- Result:
+--
+-- > <p><span>foo</span></p>
+--
+p :: Html  -- ^ Inner HTML.
+  -> Html  -- ^ Resulting HTML.
+p = Parent "p" "<p" "</p>"
+{-# INLINE p #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:226
+--
+-- | Combinator for the @\<param />@ element.
+--
+-- Example:
+--
+-- > param
+--
+-- Result:
+--
+-- > <param />
+--
+param :: Html  -- ^ Resulting HTML.
+param = Leaf "param" "<param" " />"
+{-# INLINE param #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<pre>@ element.
+--
+-- Example:
+--
+-- > pre $ span $ text "foo"
+--
+-- Result:
+--
+-- > <pre><span>foo</span></pre>
+--
+pre :: Html  -- ^ Inner HTML.
+    -> Html  -- ^ Resulting HTML.
+pre = Parent "pre" "<pre" "</pre>"
+{-# INLINE pre #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<progress>@ element.
+--
+-- Example:
+--
+-- > progress $ span $ text "foo"
+--
+-- Result:
+--
+-- > <progress><span>foo</span></progress>
+--
+progress :: Html  -- ^ Inner HTML.
+         -> Html  -- ^ Resulting HTML.
+progress = Parent "progress" "<progress" "</progress>"
+{-# INLINE progress #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<q>@ element.
+--
+-- Example:
+--
+-- > q $ span $ text "foo"
+--
+-- Result:
+--
+-- > <q><span>foo</span></q>
+--
+q :: Html  -- ^ Inner HTML.
+  -> Html  -- ^ Resulting HTML.
+q = Parent "q" "<q" "</q>"
+{-# INLINE q #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<rp>@ element.
+--
+-- Example:
+--
+-- > rp $ span $ text "foo"
+--
+-- Result:
+--
+-- > <rp><span>foo</span></rp>
+--
+rp :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+rp = Parent "rp" "<rp" "</rp>"
+{-# INLINE rp #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<rt>@ element.
+--
+-- Example:
+--
+-- > rt $ span $ text "foo"
+--
+-- Result:
+--
+-- > <rt><span>foo</span></rt>
+--
+rt :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+rt = Parent "rt" "<rt" "</rt>"
+{-# INLINE rt #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<ruby>@ element.
+--
+-- Example:
+--
+-- > ruby $ span $ text "foo"
+--
+-- Result:
+--
+-- > <ruby><span>foo</span></ruby>
+--
+ruby :: Html  -- ^ Inner HTML.
+     -> Html  -- ^ Resulting HTML.
+ruby = Parent "ruby" "<ruby" "</ruby>"
+{-# INLINE ruby #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<samp>@ element.
+--
+-- Example:
+--
+-- > samp $ span $ text "foo"
+--
+-- Result:
+--
+-- > <samp><span>foo</span></samp>
+--
+samp :: Html  -- ^ Inner HTML.
+     -> Html  -- ^ Resulting HTML.
+samp = Parent "samp" "<samp" "</samp>"
+{-# INLINE samp #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<script>@ element.
+--
+-- Example:
+--
+-- > script $ span $ text "foo"
+--
+-- Result:
+--
+-- > <script><span>foo</span></script>
+--
+script :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+script = Parent "script" "<script" "</script>" . external
+{-# INLINE script #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<section>@ element.
+--
+-- Example:
+--
+-- > section $ span $ text "foo"
+--
+-- Result:
+--
+-- > <section><span>foo</span></section>
+--
+section :: Html  -- ^ Inner HTML.
+        -> Html  -- ^ Resulting HTML.
+section = Parent "section" "<section" "</section>"
+{-# INLINE section #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<select>@ element.
+--
+-- Example:
+--
+-- > select $ span $ text "foo"
+--
+-- Result:
+--
+-- > <select><span>foo</span></select>
+--
+select :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+select = Parent "select" "<select" "</select>"
+{-# INLINE select #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<small>@ element.
+--
+-- Example:
+--
+-- > small $ span $ text "foo"
+--
+-- Result:
+--
+-- > <small><span>foo</span></small>
+--
+small :: Html  -- ^ Inner HTML.
+      -> Html  -- ^ Resulting HTML.
+small = Parent "small" "<small" "</small>"
+{-# INLINE small #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<source>@ element.
+--
+-- Example:
+--
+-- > source $ span $ text "foo"
+--
+-- Result:
+--
+-- > <source><span>foo</span></source>
+--
+source :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+source = Parent "source" "<source" "</source>"
+{-# INLINE source #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<span>@ element.
+--
+-- Example:
+--
+-- > span $ span $ text "foo"
+--
+-- Result:
+--
+-- > <span><span>foo</span></span>
+--
+span :: Html  -- ^ Inner HTML.
+     -> Html  -- ^ Resulting HTML.
+span = Parent "span" "<span" "</span>"
+{-# INLINE span #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<strong>@ element.
+--
+-- Example:
+--
+-- > strong $ span $ text "foo"
+--
+-- Result:
+--
+-- > <strong><span>foo</span></strong>
+--
+strong :: Html  -- ^ Inner HTML.
+       -> Html  -- ^ Resulting HTML.
+strong = Parent "strong" "<strong" "</strong>"
+{-# INLINE strong #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<style>@ element.
+--
+-- Example:
+--
+-- > style $ span $ text "foo"
+--
+-- Result:
+--
+-- > <style><span>foo</span></style>
+--
+style :: Html  -- ^ Inner HTML.
+      -> Html  -- ^ Resulting HTML.
+style = Parent "style" "<style" "</style>" . external
+{-# INLINE style #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<sub>@ element.
+--
+-- Example:
+--
+-- > sub $ span $ text "foo"
+--
+-- Result:
+--
+-- > <sub><span>foo</span></sub>
+--
+sub :: Html  -- ^ Inner HTML.
+    -> Html  -- ^ Resulting HTML.
+sub = Parent "sub" "<sub" "</sub>"
+{-# INLINE sub #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<summary>@ element.
+--
+-- Example:
+--
+-- > summary $ span $ text "foo"
+--
+-- Result:
+--
+-- > <summary><span>foo</span></summary>
+--
+summary :: Html  -- ^ Inner HTML.
+        -> Html  -- ^ Resulting HTML.
+summary = Parent "summary" "<summary" "</summary>"
+{-# INLINE summary #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<sup>@ element.
+--
+-- Example:
+--
+-- > sup $ span $ text "foo"
+--
+-- Result:
+--
+-- > <sup><span>foo</span></sup>
+--
+sup :: Html  -- ^ Inner HTML.
+    -> Html  -- ^ Resulting HTML.
+sup = Parent "sup" "<sup" "</sup>"
+{-# INLINE sup #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<table>@ element.
+--
+-- Example:
+--
+-- > table $ span $ text "foo"
+--
+-- Result:
+--
+-- > <table><span>foo</span></table>
+--
+table :: Html  -- ^ Inner HTML.
+      -> Html  -- ^ Resulting HTML.
+table = Parent "table" "<table" "</table>"
+{-# INLINE table #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<tbody>@ element.
+--
+-- Example:
+--
+-- > tbody $ span $ text "foo"
+--
+-- Result:
+--
+-- > <tbody><span>foo</span></tbody>
+--
+tbody :: Html  -- ^ Inner HTML.
+      -> Html  -- ^ Resulting HTML.
+tbody = Parent "tbody" "<tbody" "</tbody>"
+{-# INLINE tbody #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<td>@ element.
+--
+-- Example:
+--
+-- > td $ span $ text "foo"
+--
+-- Result:
+--
+-- > <td><span>foo</span></td>
+--
+td :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+td = Parent "td" "<td" "</td>"
+{-# INLINE td #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<textarea>@ element.
+--
+-- Example:
+--
+-- > textarea $ span $ text "foo"
+--
+-- Result:
+--
+-- > <textarea><span>foo</span></textarea>
+--
+textarea :: Html  -- ^ Inner HTML.
+         -> Html  -- ^ Resulting HTML.
+textarea = Parent "textarea" "<textarea" "</textarea>"
+{-# INLINE textarea #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<tfoot>@ element.
+--
+-- Example:
+--
+-- > tfoot $ span $ text "foo"
+--
+-- Result:
+--
+-- > <tfoot><span>foo</span></tfoot>
+--
+tfoot :: Html  -- ^ Inner HTML.
+      -> Html  -- ^ Resulting HTML.
+tfoot = Parent "tfoot" "<tfoot" "</tfoot>"
+{-# INLINE tfoot #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<th>@ element.
+--
+-- Example:
+--
+-- > th $ span $ text "foo"
+--
+-- Result:
+--
+-- > <th><span>foo</span></th>
+--
+th :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+th = Parent "th" "<th" "</th>"
+{-# INLINE th #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<thead>@ element.
+--
+-- Example:
+--
+-- > thead $ span $ text "foo"
+--
+-- Result:
+--
+-- > <thead><span>foo</span></thead>
+--
+thead :: Html  -- ^ Inner HTML.
+      -> Html  -- ^ Resulting HTML.
+thead = Parent "thead" "<thead" "</thead>"
+{-# INLINE thead #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<time>@ element.
+--
+-- Example:
+--
+-- > time $ span $ text "foo"
+--
+-- Result:
+--
+-- > <time><span>foo</span></time>
+--
+time :: Html  -- ^ Inner HTML.
+     -> Html  -- ^ Resulting HTML.
+time = Parent "time" "<time" "</time>"
+{-# INLINE time #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<title>@ element.
+--
+-- Example:
+--
+-- > title $ span $ text "foo"
+--
+-- Result:
+--
+-- > <title><span>foo</span></title>
+--
+title :: Html  -- ^ Inner HTML.
+      -> Html  -- ^ Resulting HTML.
+title = Parent "title" "<title" "</title>"
+{-# INLINE title #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<tr>@ element.
+--
+-- Example:
+--
+-- > tr $ span $ text "foo"
+--
+-- Result:
+--
+-- > <tr><span>foo</span></tr>
+--
+tr :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+tr = Parent "tr" "<tr" "</tr>"
+{-# INLINE tr #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<ul>@ element.
+--
+-- Example:
+--
+-- > ul $ span $ text "foo"
+--
+-- Result:
+--
+-- > <ul><span>foo</span></ul>
+--
+ul :: Html  -- ^ Inner HTML.
+   -> Html  -- ^ Resulting HTML.
+ul = Parent "ul" "<ul" "</ul>"
+{-# INLINE ul #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<var>@ element.
+--
+-- Example:
+--
+-- > var $ span $ text "foo"
+--
+-- Result:
+--
+-- > <var><span>foo</span></var>
+--
+var :: Html  -- ^ Inner HTML.
+    -> Html  -- ^ Resulting HTML.
+var = Parent "var" "<var" "</var>"
+{-# INLINE var #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:199
+--
+-- | Combinator for the @\<video>@ element.
+--
+-- Example:
+--
+-- > video $ span $ text "foo"
+--
+-- Result:
+--
+-- > <video><span>foo</span></video>
+--
+video :: Html  -- ^ Inner HTML.
+      -> Html  -- ^ Resulting HTML.
+video = Parent "video" "<video" "</video>"
+{-# INLINE video #-}
diff --git a/src/Text/Blaze/XHtml5/Attributes.hs b/src/Text/Blaze/XHtml5/Attributes.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Blaze/XHtml5/Attributes.hs
@@ -0,0 +1,3170 @@
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:93
+--
+-- | This module exports combinators that provide you with the
+-- ability to set attributes on HTML elements.
+--
+{-# LANGUAGE OverloadedStrings #-}
+module Text.Blaze.XHtml5.Attributes
+    ( accept
+    , acceptCharset
+    , accesskey
+    , action
+    , alt
+    , async
+    , autocomplete
+    , autofocus
+    , autoplay
+    , challenge
+    , charset
+    , checked
+    , cite
+    , class_
+    , cols
+    , colspan
+    , content
+    , contenteditable
+    , contextmenu
+    , controls
+    , coords
+    , data_
+    , datetime
+    , defer
+    , dir
+    , disabled
+    , draggable
+    , enctype
+    , for
+    , form
+    , formaction
+    , formenctype
+    , formmethod
+    , formnovalidate
+    , formtarget
+    , headers
+    , height
+    , hidden
+    , high
+    , href
+    , hreflang
+    , httpEquiv
+    , icon
+    , id
+    , ismap
+    , item
+    , itemprop
+    , keytype
+    , label
+    , lang
+    , list
+    , loop
+    , low
+    , manifest
+    , max
+    , maxlength
+    , media
+    , method
+    , min
+    , multiple
+    , name
+    , novalidate
+    , onbeforeonload
+    , onbeforeprint
+    , onblur
+    , oncanplay
+    , oncanplaythrough
+    , onchange
+    , onclick
+    , oncontextmenu
+    , ondblclick
+    , ondrag
+    , ondragend
+    , ondragenter
+    , ondragleave
+    , ondragover
+    , ondragstart
+    , ondrop
+    , ondurationchange
+    , onemptied
+    , onended
+    , onerror
+    , onfocus
+    , onformchange
+    , onforminput
+    , onhaschange
+    , oninput
+    , oninvalid
+    , onkeydown
+    , onkeyup
+    , onload
+    , onloadeddata
+    , onloadedmetadata
+    , onloadstart
+    , onmessage
+    , onmousedown
+    , onmousemove
+    , onmouseout
+    , onmouseover
+    , onmouseup
+    , onmousewheel
+    , ononline
+    , onpagehide
+    , onpageshow
+    , onpause
+    , onplay
+    , onplaying
+    , onprogress
+    , onpropstate
+    , onratechange
+    , onreadystatechange
+    , onredo
+    , onresize
+    , onscroll
+    , onseeked
+    , onseeking
+    , onselect
+    , onstalled
+    , onstorage
+    , onsubmit
+    , onsuspend
+    , ontimeupdate
+    , onundo
+    , onunload
+    , onvolumechange
+    , onwaiting
+    , open
+    , optimum
+    , pattern
+    , ping
+    , placeholder
+    , preload
+    , pubdate
+    , radiogroup
+    , readonly
+    , rel
+    , required
+    , reversed
+    , rows
+    , rowspan
+    , sandbox
+    , scope
+    , scoped
+    , seamless
+    , selected
+    , shape
+    , size
+    , sizes
+    , span
+    , spellcheck
+    , src
+    , srcdoc
+    , start
+    , step
+    , style
+    , subject
+    , summary
+    , tabindex
+    , target
+    , title
+    , type_
+    , usemap
+    , value
+    , width
+    , wrap
+    , xmlns
+    ) where
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:99
+--
+import Prelude ()
+
+import Text.Blaze.Internal (Attribute, AttributeValue, attribute)
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @accept@ attribute.
+--
+-- Example:
+--
+-- > div ! accept "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div accept="bar">Hello.</div>
+--
+accept :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+accept = attribute "accept" " accept=\""
+{-# INLINE accept #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @accept-charset@ attribute.
+--
+-- Example:
+--
+-- > div ! acceptCharset "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div accept-charset="bar">Hello.</div>
+--
+acceptCharset :: AttributeValue  -- ^ Attribute value.
+              -> Attribute       -- ^ Resulting attribute.
+acceptCharset = attribute "accept-charset" " accept-charset=\""
+{-# INLINE acceptCharset #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @accesskey@ attribute.
+--
+-- Example:
+--
+-- > div ! accesskey "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div accesskey="bar">Hello.</div>
+--
+accesskey :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+accesskey = attribute "accesskey" " accesskey=\""
+{-# INLINE accesskey #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @action@ attribute.
+--
+-- Example:
+--
+-- > div ! action "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div action="bar">Hello.</div>
+--
+action :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+action = attribute "action" " action=\""
+{-# INLINE action #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @alt@ attribute.
+--
+-- Example:
+--
+-- > div ! alt "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div alt="bar">Hello.</div>
+--
+alt :: AttributeValue  -- ^ Attribute value.
+    -> Attribute       -- ^ Resulting attribute.
+alt = attribute "alt" " alt=\""
+{-# INLINE alt #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @async@ attribute.
+--
+-- Example:
+--
+-- > div ! async "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div async="bar">Hello.</div>
+--
+async :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+async = attribute "async" " async=\""
+{-# INLINE async #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @autocomplete@ attribute.
+--
+-- Example:
+--
+-- > div ! autocomplete "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div autocomplete="bar">Hello.</div>
+--
+autocomplete :: AttributeValue  -- ^ Attribute value.
+             -> Attribute       -- ^ Resulting attribute.
+autocomplete = attribute "autocomplete" " autocomplete=\""
+{-# INLINE autocomplete #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @autofocus@ attribute.
+--
+-- Example:
+--
+-- > div ! autofocus "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div autofocus="bar">Hello.</div>
+--
+autofocus :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+autofocus = attribute "autofocus" " autofocus=\""
+{-# INLINE autofocus #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @autoplay@ attribute.
+--
+-- Example:
+--
+-- > div ! autoplay "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div autoplay="bar">Hello.</div>
+--
+autoplay :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+autoplay = attribute "autoplay" " autoplay=\""
+{-# INLINE autoplay #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @challenge@ attribute.
+--
+-- Example:
+--
+-- > div ! challenge "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div challenge="bar">Hello.</div>
+--
+challenge :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+challenge = attribute "challenge" " challenge=\""
+{-# INLINE challenge #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @charset@ attribute.
+--
+-- Example:
+--
+-- > div ! charset "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div charset="bar">Hello.</div>
+--
+charset :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+charset = attribute "charset" " charset=\""
+{-# INLINE charset #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @checked@ attribute.
+--
+-- Example:
+--
+-- > div ! checked "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div checked="bar">Hello.</div>
+--
+checked :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+checked = attribute "checked" " checked=\""
+{-# INLINE checked #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @cite@ attribute.
+--
+-- Example:
+--
+-- > div ! cite "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div cite="bar">Hello.</div>
+--
+cite :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+cite = attribute "cite" " cite=\""
+{-# INLINE cite #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @class@ attribute.
+--
+-- Example:
+--
+-- > div ! class_ "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div class="bar">Hello.</div>
+--
+class_ :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+class_ = attribute "class" " class=\""
+{-# INLINE class_ #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @cols@ attribute.
+--
+-- Example:
+--
+-- > div ! cols "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div cols="bar">Hello.</div>
+--
+cols :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+cols = attribute "cols" " cols=\""
+{-# INLINE cols #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @colspan@ attribute.
+--
+-- Example:
+--
+-- > div ! colspan "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div colspan="bar">Hello.</div>
+--
+colspan :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+colspan = attribute "colspan" " colspan=\""
+{-# INLINE colspan #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @content@ attribute.
+--
+-- Example:
+--
+-- > div ! content "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div content="bar">Hello.</div>
+--
+content :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+content = attribute "content" " content=\""
+{-# INLINE content #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @contenteditable@ attribute.
+--
+-- Example:
+--
+-- > div ! contenteditable "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div contenteditable="bar">Hello.</div>
+--
+contenteditable :: AttributeValue  -- ^ Attribute value.
+                -> Attribute       -- ^ Resulting attribute.
+contenteditable = attribute "contenteditable" " contenteditable=\""
+{-# INLINE contenteditable #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @contextmenu@ attribute.
+--
+-- Example:
+--
+-- > div ! contextmenu "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div contextmenu="bar">Hello.</div>
+--
+contextmenu :: AttributeValue  -- ^ Attribute value.
+            -> Attribute       -- ^ Resulting attribute.
+contextmenu = attribute "contextmenu" " contextmenu=\""
+{-# INLINE contextmenu #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @controls@ attribute.
+--
+-- Example:
+--
+-- > div ! controls "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div controls="bar">Hello.</div>
+--
+controls :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+controls = attribute "controls" " controls=\""
+{-# INLINE controls #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @coords@ attribute.
+--
+-- Example:
+--
+-- > div ! coords "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div coords="bar">Hello.</div>
+--
+coords :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+coords = attribute "coords" " coords=\""
+{-# INLINE coords #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @data@ attribute.
+--
+-- Example:
+--
+-- > div ! data_ "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div data="bar">Hello.</div>
+--
+data_ :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+data_ = attribute "data" " data=\""
+{-# INLINE data_ #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @datetime@ attribute.
+--
+-- Example:
+--
+-- > div ! datetime "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div datetime="bar">Hello.</div>
+--
+datetime :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+datetime = attribute "datetime" " datetime=\""
+{-# INLINE datetime #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @defer@ attribute.
+--
+-- Example:
+--
+-- > div ! defer "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div defer="bar">Hello.</div>
+--
+defer :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+defer = attribute "defer" " defer=\""
+{-# INLINE defer #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @dir@ attribute.
+--
+-- Example:
+--
+-- > div ! dir "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div dir="bar">Hello.</div>
+--
+dir :: AttributeValue  -- ^ Attribute value.
+    -> Attribute       -- ^ Resulting attribute.
+dir = attribute "dir" " dir=\""
+{-# INLINE dir #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @disabled@ attribute.
+--
+-- Example:
+--
+-- > div ! disabled "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div disabled="bar">Hello.</div>
+--
+disabled :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+disabled = attribute "disabled" " disabled=\""
+{-# INLINE disabled #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @draggable@ attribute.
+--
+-- Example:
+--
+-- > div ! draggable "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div draggable="bar">Hello.</div>
+--
+draggable :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+draggable = attribute "draggable" " draggable=\""
+{-# INLINE draggable #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @enctype@ attribute.
+--
+-- Example:
+--
+-- > div ! enctype "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div enctype="bar">Hello.</div>
+--
+enctype :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+enctype = attribute "enctype" " enctype=\""
+{-# INLINE enctype #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @for@ attribute.
+--
+-- Example:
+--
+-- > div ! for "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div for="bar">Hello.</div>
+--
+for :: AttributeValue  -- ^ Attribute value.
+    -> Attribute       -- ^ Resulting attribute.
+for = attribute "for" " for=\""
+{-# INLINE for #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @form@ attribute.
+--
+-- Example:
+--
+-- > div ! form "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div form="bar">Hello.</div>
+--
+form :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+form = attribute "form" " form=\""
+{-# INLINE form #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @formaction@ attribute.
+--
+-- Example:
+--
+-- > div ! formaction "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div formaction="bar">Hello.</div>
+--
+formaction :: AttributeValue  -- ^ Attribute value.
+           -> Attribute       -- ^ Resulting attribute.
+formaction = attribute "formaction" " formaction=\""
+{-# INLINE formaction #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @formenctype@ attribute.
+--
+-- Example:
+--
+-- > div ! formenctype "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div formenctype="bar">Hello.</div>
+--
+formenctype :: AttributeValue  -- ^ Attribute value.
+            -> Attribute       -- ^ Resulting attribute.
+formenctype = attribute "formenctype" " formenctype=\""
+{-# INLINE formenctype #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @formmethod@ attribute.
+--
+-- Example:
+--
+-- > div ! formmethod "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div formmethod="bar">Hello.</div>
+--
+formmethod :: AttributeValue  -- ^ Attribute value.
+           -> Attribute       -- ^ Resulting attribute.
+formmethod = attribute "formmethod" " formmethod=\""
+{-# INLINE formmethod #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @formnovalidate@ attribute.
+--
+-- Example:
+--
+-- > div ! formnovalidate "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div formnovalidate="bar">Hello.</div>
+--
+formnovalidate :: AttributeValue  -- ^ Attribute value.
+               -> Attribute       -- ^ Resulting attribute.
+formnovalidate = attribute "formnovalidate" " formnovalidate=\""
+{-# INLINE formnovalidate #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @formtarget@ attribute.
+--
+-- Example:
+--
+-- > div ! formtarget "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div formtarget="bar">Hello.</div>
+--
+formtarget :: AttributeValue  -- ^ Attribute value.
+           -> Attribute       -- ^ Resulting attribute.
+formtarget = attribute "formtarget" " formtarget=\""
+{-# INLINE formtarget #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @headers@ attribute.
+--
+-- Example:
+--
+-- > div ! headers "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div headers="bar">Hello.</div>
+--
+headers :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+headers = attribute "headers" " headers=\""
+{-# INLINE headers #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @height@ attribute.
+--
+-- Example:
+--
+-- > div ! height "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div height="bar">Hello.</div>
+--
+height :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+height = attribute "height" " height=\""
+{-# INLINE height #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @hidden@ attribute.
+--
+-- Example:
+--
+-- > div ! hidden "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div hidden="bar">Hello.</div>
+--
+hidden :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+hidden = attribute "hidden" " hidden=\""
+{-# INLINE hidden #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @high@ attribute.
+--
+-- Example:
+--
+-- > div ! high "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div high="bar">Hello.</div>
+--
+high :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+high = attribute "high" " high=\""
+{-# INLINE high #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @href@ attribute.
+--
+-- Example:
+--
+-- > div ! href "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div href="bar">Hello.</div>
+--
+href :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+href = attribute "href" " href=\""
+{-# INLINE href #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @hreflang@ attribute.
+--
+-- Example:
+--
+-- > div ! hreflang "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div hreflang="bar">Hello.</div>
+--
+hreflang :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+hreflang = attribute "hreflang" " hreflang=\""
+{-# INLINE hreflang #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @http-equiv@ attribute.
+--
+-- Example:
+--
+-- > div ! httpEquiv "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div http-equiv="bar">Hello.</div>
+--
+httpEquiv :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+httpEquiv = attribute "http-equiv" " http-equiv=\""
+{-# INLINE httpEquiv #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @icon@ attribute.
+--
+-- Example:
+--
+-- > div ! icon "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div icon="bar">Hello.</div>
+--
+icon :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+icon = attribute "icon" " icon=\""
+{-# INLINE icon #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @id@ attribute.
+--
+-- Example:
+--
+-- > div ! id "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div id="bar">Hello.</div>
+--
+id :: AttributeValue  -- ^ Attribute value.
+   -> Attribute       -- ^ Resulting attribute.
+id = attribute "id" " id=\""
+{-# INLINE id #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @ismap@ attribute.
+--
+-- Example:
+--
+-- > div ! ismap "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div ismap="bar">Hello.</div>
+--
+ismap :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+ismap = attribute "ismap" " ismap=\""
+{-# INLINE ismap #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @item@ attribute.
+--
+-- Example:
+--
+-- > div ! item "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div item="bar">Hello.</div>
+--
+item :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+item = attribute "item" " item=\""
+{-# INLINE item #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @itemprop@ attribute.
+--
+-- Example:
+--
+-- > div ! itemprop "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div itemprop="bar">Hello.</div>
+--
+itemprop :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+itemprop = attribute "itemprop" " itemprop=\""
+{-# INLINE itemprop #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @keytype@ attribute.
+--
+-- Example:
+--
+-- > div ! keytype "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div keytype="bar">Hello.</div>
+--
+keytype :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+keytype = attribute "keytype" " keytype=\""
+{-# INLINE keytype #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @label@ attribute.
+--
+-- Example:
+--
+-- > div ! label "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div label="bar">Hello.</div>
+--
+label :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+label = attribute "label" " label=\""
+{-# INLINE label #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @lang@ attribute.
+--
+-- Example:
+--
+-- > div ! lang "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div lang="bar">Hello.</div>
+--
+lang :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+lang = attribute "lang" " lang=\""
+{-# INLINE lang #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @list@ attribute.
+--
+-- Example:
+--
+-- > div ! list "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div list="bar">Hello.</div>
+--
+list :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+list = attribute "list" " list=\""
+{-# INLINE list #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @loop@ attribute.
+--
+-- Example:
+--
+-- > div ! loop "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div loop="bar">Hello.</div>
+--
+loop :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+loop = attribute "loop" " loop=\""
+{-# INLINE loop #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @low@ attribute.
+--
+-- Example:
+--
+-- > div ! low "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div low="bar">Hello.</div>
+--
+low :: AttributeValue  -- ^ Attribute value.
+    -> Attribute       -- ^ Resulting attribute.
+low = attribute "low" " low=\""
+{-# INLINE low #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @manifest@ attribute.
+--
+-- Example:
+--
+-- > div ! manifest "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div manifest="bar">Hello.</div>
+--
+manifest :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+manifest = attribute "manifest" " manifest=\""
+{-# INLINE manifest #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @max@ attribute.
+--
+-- Example:
+--
+-- > div ! max "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div max="bar">Hello.</div>
+--
+max :: AttributeValue  -- ^ Attribute value.
+    -> Attribute       -- ^ Resulting attribute.
+max = attribute "max" " max=\""
+{-# INLINE max #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @maxlength@ attribute.
+--
+-- Example:
+--
+-- > div ! maxlength "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div maxlength="bar">Hello.</div>
+--
+maxlength :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+maxlength = attribute "maxlength" " maxlength=\""
+{-# INLINE maxlength #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @media@ attribute.
+--
+-- Example:
+--
+-- > div ! media "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div media="bar">Hello.</div>
+--
+media :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+media = attribute "media" " media=\""
+{-# INLINE media #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @method@ attribute.
+--
+-- Example:
+--
+-- > div ! method "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div method="bar">Hello.</div>
+--
+method :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+method = attribute "method" " method=\""
+{-# INLINE method #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @min@ attribute.
+--
+-- Example:
+--
+-- > div ! min "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div min="bar">Hello.</div>
+--
+min :: AttributeValue  -- ^ Attribute value.
+    -> Attribute       -- ^ Resulting attribute.
+min = attribute "min" " min=\""
+{-# INLINE min #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @multiple@ attribute.
+--
+-- Example:
+--
+-- > div ! multiple "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div multiple="bar">Hello.</div>
+--
+multiple :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+multiple = attribute "multiple" " multiple=\""
+{-# INLINE multiple #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @name@ attribute.
+--
+-- Example:
+--
+-- > div ! name "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div name="bar">Hello.</div>
+--
+name :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+name = attribute "name" " name=\""
+{-# INLINE name #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @novalidate@ attribute.
+--
+-- Example:
+--
+-- > div ! novalidate "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div novalidate="bar">Hello.</div>
+--
+novalidate :: AttributeValue  -- ^ Attribute value.
+           -> Attribute       -- ^ Resulting attribute.
+novalidate = attribute "novalidate" " novalidate=\""
+{-# INLINE novalidate #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onbeforeonload@ attribute.
+--
+-- Example:
+--
+-- > div ! onbeforeonload "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onbeforeonload="bar">Hello.</div>
+--
+onbeforeonload :: AttributeValue  -- ^ Attribute value.
+               -> Attribute       -- ^ Resulting attribute.
+onbeforeonload = attribute "onbeforeonload" " onbeforeonload=\""
+{-# INLINE onbeforeonload #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onbeforeprint@ attribute.
+--
+-- Example:
+--
+-- > div ! onbeforeprint "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onbeforeprint="bar">Hello.</div>
+--
+onbeforeprint :: AttributeValue  -- ^ Attribute value.
+              -> Attribute       -- ^ Resulting attribute.
+onbeforeprint = attribute "onbeforeprint" " onbeforeprint=\""
+{-# INLINE onbeforeprint #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onblur@ attribute.
+--
+-- Example:
+--
+-- > div ! onblur "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onblur="bar">Hello.</div>
+--
+onblur :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+onblur = attribute "onblur" " onblur=\""
+{-# INLINE onblur #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @oncanplay@ attribute.
+--
+-- Example:
+--
+-- > div ! oncanplay "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div oncanplay="bar">Hello.</div>
+--
+oncanplay :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+oncanplay = attribute "oncanplay" " oncanplay=\""
+{-# INLINE oncanplay #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @oncanplaythrough@ attribute.
+--
+-- Example:
+--
+-- > div ! oncanplaythrough "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div oncanplaythrough="bar">Hello.</div>
+--
+oncanplaythrough :: AttributeValue  -- ^ Attribute value.
+                 -> Attribute       -- ^ Resulting attribute.
+oncanplaythrough = attribute "oncanplaythrough" " oncanplaythrough=\""
+{-# INLINE oncanplaythrough #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onchange@ attribute.
+--
+-- Example:
+--
+-- > div ! onchange "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onchange="bar">Hello.</div>
+--
+onchange :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+onchange = attribute "onchange" " onchange=\""
+{-# INLINE onchange #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onclick@ attribute.
+--
+-- Example:
+--
+-- > div ! onclick "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onclick="bar">Hello.</div>
+--
+onclick :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+onclick = attribute "onclick" " onclick=\""
+{-# INLINE onclick #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @oncontextmenu@ attribute.
+--
+-- Example:
+--
+-- > div ! oncontextmenu "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div oncontextmenu="bar">Hello.</div>
+--
+oncontextmenu :: AttributeValue  -- ^ Attribute value.
+              -> Attribute       -- ^ Resulting attribute.
+oncontextmenu = attribute "oncontextmenu" " oncontextmenu=\""
+{-# INLINE oncontextmenu #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @ondblclick@ attribute.
+--
+-- Example:
+--
+-- > div ! ondblclick "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div ondblclick="bar">Hello.</div>
+--
+ondblclick :: AttributeValue  -- ^ Attribute value.
+           -> Attribute       -- ^ Resulting attribute.
+ondblclick = attribute "ondblclick" " ondblclick=\""
+{-# INLINE ondblclick #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @ondrag@ attribute.
+--
+-- Example:
+--
+-- > div ! ondrag "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div ondrag="bar">Hello.</div>
+--
+ondrag :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+ondrag = attribute "ondrag" " ondrag=\""
+{-# INLINE ondrag #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @ondragend@ attribute.
+--
+-- Example:
+--
+-- > div ! ondragend "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div ondragend="bar">Hello.</div>
+--
+ondragend :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+ondragend = attribute "ondragend" " ondragend=\""
+{-# INLINE ondragend #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @ondragenter@ attribute.
+--
+-- Example:
+--
+-- > div ! ondragenter "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div ondragenter="bar">Hello.</div>
+--
+ondragenter :: AttributeValue  -- ^ Attribute value.
+            -> Attribute       -- ^ Resulting attribute.
+ondragenter = attribute "ondragenter" " ondragenter=\""
+{-# INLINE ondragenter #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @ondragleave@ attribute.
+--
+-- Example:
+--
+-- > div ! ondragleave "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div ondragleave="bar">Hello.</div>
+--
+ondragleave :: AttributeValue  -- ^ Attribute value.
+            -> Attribute       -- ^ Resulting attribute.
+ondragleave = attribute "ondragleave" " ondragleave=\""
+{-# INLINE ondragleave #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @ondragover@ attribute.
+--
+-- Example:
+--
+-- > div ! ondragover "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div ondragover="bar">Hello.</div>
+--
+ondragover :: AttributeValue  -- ^ Attribute value.
+           -> Attribute       -- ^ Resulting attribute.
+ondragover = attribute "ondragover" " ondragover=\""
+{-# INLINE ondragover #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @ondragstart@ attribute.
+--
+-- Example:
+--
+-- > div ! ondragstart "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div ondragstart="bar">Hello.</div>
+--
+ondragstart :: AttributeValue  -- ^ Attribute value.
+            -> Attribute       -- ^ Resulting attribute.
+ondragstart = attribute "ondragstart" " ondragstart=\""
+{-# INLINE ondragstart #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @ondrop@ attribute.
+--
+-- Example:
+--
+-- > div ! ondrop "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div ondrop="bar">Hello.</div>
+--
+ondrop :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+ondrop = attribute "ondrop" " ondrop=\""
+{-# INLINE ondrop #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @ondurationchange@ attribute.
+--
+-- Example:
+--
+-- > div ! ondurationchange "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div ondurationchange="bar">Hello.</div>
+--
+ondurationchange :: AttributeValue  -- ^ Attribute value.
+                 -> Attribute       -- ^ Resulting attribute.
+ondurationchange = attribute "ondurationchange" " ondurationchange=\""
+{-# INLINE ondurationchange #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onemptied@ attribute.
+--
+-- Example:
+--
+-- > div ! onemptied "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onemptied="bar">Hello.</div>
+--
+onemptied :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+onemptied = attribute "onemptied" " onemptied=\""
+{-# INLINE onemptied #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onended@ attribute.
+--
+-- Example:
+--
+-- > div ! onended "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onended="bar">Hello.</div>
+--
+onended :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+onended = attribute "onended" " onended=\""
+{-# INLINE onended #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onerror@ attribute.
+--
+-- Example:
+--
+-- > div ! onerror "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onerror="bar">Hello.</div>
+--
+onerror :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+onerror = attribute "onerror" " onerror=\""
+{-# INLINE onerror #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onfocus@ attribute.
+--
+-- Example:
+--
+-- > div ! onfocus "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onfocus="bar">Hello.</div>
+--
+onfocus :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+onfocus = attribute "onfocus" " onfocus=\""
+{-# INLINE onfocus #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onformchange@ attribute.
+--
+-- Example:
+--
+-- > div ! onformchange "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onformchange="bar">Hello.</div>
+--
+onformchange :: AttributeValue  -- ^ Attribute value.
+             -> Attribute       -- ^ Resulting attribute.
+onformchange = attribute "onformchange" " onformchange=\""
+{-# INLINE onformchange #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onforminput@ attribute.
+--
+-- Example:
+--
+-- > div ! onforminput "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onforminput="bar">Hello.</div>
+--
+onforminput :: AttributeValue  -- ^ Attribute value.
+            -> Attribute       -- ^ Resulting attribute.
+onforminput = attribute "onforminput" " onforminput=\""
+{-# INLINE onforminput #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onhaschange@ attribute.
+--
+-- Example:
+--
+-- > div ! onhaschange "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onhaschange="bar">Hello.</div>
+--
+onhaschange :: AttributeValue  -- ^ Attribute value.
+            -> Attribute       -- ^ Resulting attribute.
+onhaschange = attribute "onhaschange" " onhaschange=\""
+{-# INLINE onhaschange #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @oninput@ attribute.
+--
+-- Example:
+--
+-- > div ! oninput "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div oninput="bar">Hello.</div>
+--
+oninput :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+oninput = attribute "oninput" " oninput=\""
+{-# INLINE oninput #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @oninvalid@ attribute.
+--
+-- Example:
+--
+-- > div ! oninvalid "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div oninvalid="bar">Hello.</div>
+--
+oninvalid :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+oninvalid = attribute "oninvalid" " oninvalid=\""
+{-# INLINE oninvalid #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onkeydown@ attribute.
+--
+-- Example:
+--
+-- > div ! onkeydown "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onkeydown="bar">Hello.</div>
+--
+onkeydown :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+onkeydown = attribute "onkeydown" " onkeydown=\""
+{-# INLINE onkeydown #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onkeyup@ attribute.
+--
+-- Example:
+--
+-- > div ! onkeyup "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onkeyup="bar">Hello.</div>
+--
+onkeyup :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+onkeyup = attribute "onkeyup" " onkeyup=\""
+{-# INLINE onkeyup #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onload@ attribute.
+--
+-- Example:
+--
+-- > div ! onload "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onload="bar">Hello.</div>
+--
+onload :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+onload = attribute "onload" " onload=\""
+{-# INLINE onload #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onloadeddata@ attribute.
+--
+-- Example:
+--
+-- > div ! onloadeddata "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onloadeddata="bar">Hello.</div>
+--
+onloadeddata :: AttributeValue  -- ^ Attribute value.
+             -> Attribute       -- ^ Resulting attribute.
+onloadeddata = attribute "onloadeddata" " onloadeddata=\""
+{-# INLINE onloadeddata #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onloadedmetadata@ attribute.
+--
+-- Example:
+--
+-- > div ! onloadedmetadata "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onloadedmetadata="bar">Hello.</div>
+--
+onloadedmetadata :: AttributeValue  -- ^ Attribute value.
+                 -> Attribute       -- ^ Resulting attribute.
+onloadedmetadata = attribute "onloadedmetadata" " onloadedmetadata=\""
+{-# INLINE onloadedmetadata #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onloadstart@ attribute.
+--
+-- Example:
+--
+-- > div ! onloadstart "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onloadstart="bar">Hello.</div>
+--
+onloadstart :: AttributeValue  -- ^ Attribute value.
+            -> Attribute       -- ^ Resulting attribute.
+onloadstart = attribute "onloadstart" " onloadstart=\""
+{-# INLINE onloadstart #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onmessage@ attribute.
+--
+-- Example:
+--
+-- > div ! onmessage "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onmessage="bar">Hello.</div>
+--
+onmessage :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+onmessage = attribute "onmessage" " onmessage=\""
+{-# INLINE onmessage #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onmousedown@ attribute.
+--
+-- Example:
+--
+-- > div ! onmousedown "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onmousedown="bar">Hello.</div>
+--
+onmousedown :: AttributeValue  -- ^ Attribute value.
+            -> Attribute       -- ^ Resulting attribute.
+onmousedown = attribute "onmousedown" " onmousedown=\""
+{-# INLINE onmousedown #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onmousemove@ attribute.
+--
+-- Example:
+--
+-- > div ! onmousemove "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onmousemove="bar">Hello.</div>
+--
+onmousemove :: AttributeValue  -- ^ Attribute value.
+            -> Attribute       -- ^ Resulting attribute.
+onmousemove = attribute "onmousemove" " onmousemove=\""
+{-# INLINE onmousemove #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onmouseout@ attribute.
+--
+-- Example:
+--
+-- > div ! onmouseout "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onmouseout="bar">Hello.</div>
+--
+onmouseout :: AttributeValue  -- ^ Attribute value.
+           -> Attribute       -- ^ Resulting attribute.
+onmouseout = attribute "onmouseout" " onmouseout=\""
+{-# INLINE onmouseout #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onmouseover@ attribute.
+--
+-- Example:
+--
+-- > div ! onmouseover "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onmouseover="bar">Hello.</div>
+--
+onmouseover :: AttributeValue  -- ^ Attribute value.
+            -> Attribute       -- ^ Resulting attribute.
+onmouseover = attribute "onmouseover" " onmouseover=\""
+{-# INLINE onmouseover #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onmouseup@ attribute.
+--
+-- Example:
+--
+-- > div ! onmouseup "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onmouseup="bar">Hello.</div>
+--
+onmouseup :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+onmouseup = attribute "onmouseup" " onmouseup=\""
+{-# INLINE onmouseup #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onmousewheel@ attribute.
+--
+-- Example:
+--
+-- > div ! onmousewheel "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onmousewheel="bar">Hello.</div>
+--
+onmousewheel :: AttributeValue  -- ^ Attribute value.
+             -> Attribute       -- ^ Resulting attribute.
+onmousewheel = attribute "onmousewheel" " onmousewheel=\""
+{-# INLINE onmousewheel #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @ononline@ attribute.
+--
+-- Example:
+--
+-- > div ! ononline "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div ononline="bar">Hello.</div>
+--
+ononline :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+ononline = attribute "ononline" " ononline=\""
+{-# INLINE ononline #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onpagehide@ attribute.
+--
+-- Example:
+--
+-- > div ! onpagehide "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onpagehide="bar">Hello.</div>
+--
+onpagehide :: AttributeValue  -- ^ Attribute value.
+           -> Attribute       -- ^ Resulting attribute.
+onpagehide = attribute "onpagehide" " onpagehide=\""
+{-# INLINE onpagehide #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onpageshow@ attribute.
+--
+-- Example:
+--
+-- > div ! onpageshow "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onpageshow="bar">Hello.</div>
+--
+onpageshow :: AttributeValue  -- ^ Attribute value.
+           -> Attribute       -- ^ Resulting attribute.
+onpageshow = attribute "onpageshow" " onpageshow=\""
+{-# INLINE onpageshow #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onpause@ attribute.
+--
+-- Example:
+--
+-- > div ! onpause "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onpause="bar">Hello.</div>
+--
+onpause :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+onpause = attribute "onpause" " onpause=\""
+{-# INLINE onpause #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onplay@ attribute.
+--
+-- Example:
+--
+-- > div ! onplay "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onplay="bar">Hello.</div>
+--
+onplay :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+onplay = attribute "onplay" " onplay=\""
+{-# INLINE onplay #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onplaying@ attribute.
+--
+-- Example:
+--
+-- > div ! onplaying "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onplaying="bar">Hello.</div>
+--
+onplaying :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+onplaying = attribute "onplaying" " onplaying=\""
+{-# INLINE onplaying #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onprogress@ attribute.
+--
+-- Example:
+--
+-- > div ! onprogress "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onprogress="bar">Hello.</div>
+--
+onprogress :: AttributeValue  -- ^ Attribute value.
+           -> Attribute       -- ^ Resulting attribute.
+onprogress = attribute "onprogress" " onprogress=\""
+{-# INLINE onprogress #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onpropstate@ attribute.
+--
+-- Example:
+--
+-- > div ! onpropstate "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onpropstate="bar">Hello.</div>
+--
+onpropstate :: AttributeValue  -- ^ Attribute value.
+            -> Attribute       -- ^ Resulting attribute.
+onpropstate = attribute "onpropstate" " onpropstate=\""
+{-# INLINE onpropstate #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onratechange@ attribute.
+--
+-- Example:
+--
+-- > div ! onratechange "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onratechange="bar">Hello.</div>
+--
+onratechange :: AttributeValue  -- ^ Attribute value.
+             -> Attribute       -- ^ Resulting attribute.
+onratechange = attribute "onratechange" " onratechange=\""
+{-# INLINE onratechange #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onreadystatechange@ attribute.
+--
+-- Example:
+--
+-- > div ! onreadystatechange "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onreadystatechange="bar">Hello.</div>
+--
+onreadystatechange :: AttributeValue  -- ^ Attribute value.
+                   -> Attribute       -- ^ Resulting attribute.
+onreadystatechange = attribute "onreadystatechange" " onreadystatechange=\""
+{-# INLINE onreadystatechange #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onredo@ attribute.
+--
+-- Example:
+--
+-- > div ! onredo "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onredo="bar">Hello.</div>
+--
+onredo :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+onredo = attribute "onredo" " onredo=\""
+{-# INLINE onredo #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onresize@ attribute.
+--
+-- Example:
+--
+-- > div ! onresize "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onresize="bar">Hello.</div>
+--
+onresize :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+onresize = attribute "onresize" " onresize=\""
+{-# INLINE onresize #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onscroll@ attribute.
+--
+-- Example:
+--
+-- > div ! onscroll "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onscroll="bar">Hello.</div>
+--
+onscroll :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+onscroll = attribute "onscroll" " onscroll=\""
+{-# INLINE onscroll #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onseeked@ attribute.
+--
+-- Example:
+--
+-- > div ! onseeked "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onseeked="bar">Hello.</div>
+--
+onseeked :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+onseeked = attribute "onseeked" " onseeked=\""
+{-# INLINE onseeked #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onseeking@ attribute.
+--
+-- Example:
+--
+-- > div ! onseeking "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onseeking="bar">Hello.</div>
+--
+onseeking :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+onseeking = attribute "onseeking" " onseeking=\""
+{-# INLINE onseeking #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onselect@ attribute.
+--
+-- Example:
+--
+-- > div ! onselect "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onselect="bar">Hello.</div>
+--
+onselect :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+onselect = attribute "onselect" " onselect=\""
+{-# INLINE onselect #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onstalled@ attribute.
+--
+-- Example:
+--
+-- > div ! onstalled "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onstalled="bar">Hello.</div>
+--
+onstalled :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+onstalled = attribute "onstalled" " onstalled=\""
+{-# INLINE onstalled #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onstorage@ attribute.
+--
+-- Example:
+--
+-- > div ! onstorage "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onstorage="bar">Hello.</div>
+--
+onstorage :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+onstorage = attribute "onstorage" " onstorage=\""
+{-# INLINE onstorage #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onsubmit@ attribute.
+--
+-- Example:
+--
+-- > div ! onsubmit "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onsubmit="bar">Hello.</div>
+--
+onsubmit :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+onsubmit = attribute "onsubmit" " onsubmit=\""
+{-# INLINE onsubmit #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onsuspend@ attribute.
+--
+-- Example:
+--
+-- > div ! onsuspend "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onsuspend="bar">Hello.</div>
+--
+onsuspend :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+onsuspend = attribute "onsuspend" " onsuspend=\""
+{-# INLINE onsuspend #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @ontimeupdate@ attribute.
+--
+-- Example:
+--
+-- > div ! ontimeupdate "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div ontimeupdate="bar">Hello.</div>
+--
+ontimeupdate :: AttributeValue  -- ^ Attribute value.
+             -> Attribute       -- ^ Resulting attribute.
+ontimeupdate = attribute "ontimeupdate" " ontimeupdate=\""
+{-# INLINE ontimeupdate #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onundo@ attribute.
+--
+-- Example:
+--
+-- > div ! onundo "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onundo="bar">Hello.</div>
+--
+onundo :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+onundo = attribute "onundo" " onundo=\""
+{-# INLINE onundo #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onunload@ attribute.
+--
+-- Example:
+--
+-- > div ! onunload "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onunload="bar">Hello.</div>
+--
+onunload :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+onunload = attribute "onunload" " onunload=\""
+{-# INLINE onunload #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onvolumechange@ attribute.
+--
+-- Example:
+--
+-- > div ! onvolumechange "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onvolumechange="bar">Hello.</div>
+--
+onvolumechange :: AttributeValue  -- ^ Attribute value.
+               -> Attribute       -- ^ Resulting attribute.
+onvolumechange = attribute "onvolumechange" " onvolumechange=\""
+{-# INLINE onvolumechange #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @onwaiting@ attribute.
+--
+-- Example:
+--
+-- > div ! onwaiting "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div onwaiting="bar">Hello.</div>
+--
+onwaiting :: AttributeValue  -- ^ Attribute value.
+          -> Attribute       -- ^ Resulting attribute.
+onwaiting = attribute "onwaiting" " onwaiting=\""
+{-# INLINE onwaiting #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @open@ attribute.
+--
+-- Example:
+--
+-- > div ! open "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div open="bar">Hello.</div>
+--
+open :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+open = attribute "open" " open=\""
+{-# INLINE open #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @optimum@ attribute.
+--
+-- Example:
+--
+-- > div ! optimum "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div optimum="bar">Hello.</div>
+--
+optimum :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+optimum = attribute "optimum" " optimum=\""
+{-# INLINE optimum #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @pattern@ attribute.
+--
+-- Example:
+--
+-- > div ! pattern "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div pattern="bar">Hello.</div>
+--
+pattern :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+pattern = attribute "pattern" " pattern=\""
+{-# INLINE pattern #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @ping@ attribute.
+--
+-- Example:
+--
+-- > div ! ping "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div ping="bar">Hello.</div>
+--
+ping :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+ping = attribute "ping" " ping=\""
+{-# INLINE ping #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @placeholder@ attribute.
+--
+-- Example:
+--
+-- > div ! placeholder "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div placeholder="bar">Hello.</div>
+--
+placeholder :: AttributeValue  -- ^ Attribute value.
+            -> Attribute       -- ^ Resulting attribute.
+placeholder = attribute "placeholder" " placeholder=\""
+{-# INLINE placeholder #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @preload@ attribute.
+--
+-- Example:
+--
+-- > div ! preload "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div preload="bar">Hello.</div>
+--
+preload :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+preload = attribute "preload" " preload=\""
+{-# INLINE preload #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @pubdate@ attribute.
+--
+-- Example:
+--
+-- > div ! pubdate "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div pubdate="bar">Hello.</div>
+--
+pubdate :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+pubdate = attribute "pubdate" " pubdate=\""
+{-# INLINE pubdate #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @radiogroup@ attribute.
+--
+-- Example:
+--
+-- > div ! radiogroup "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div radiogroup="bar">Hello.</div>
+--
+radiogroup :: AttributeValue  -- ^ Attribute value.
+           -> Attribute       -- ^ Resulting attribute.
+radiogroup = attribute "radiogroup" " radiogroup=\""
+{-# INLINE radiogroup #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @readonly@ attribute.
+--
+-- Example:
+--
+-- > div ! readonly "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div readonly="bar">Hello.</div>
+--
+readonly :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+readonly = attribute "readonly" " readonly=\""
+{-# INLINE readonly #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @rel@ attribute.
+--
+-- Example:
+--
+-- > div ! rel "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div rel="bar">Hello.</div>
+--
+rel :: AttributeValue  -- ^ Attribute value.
+    -> Attribute       -- ^ Resulting attribute.
+rel = attribute "rel" " rel=\""
+{-# INLINE rel #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @required@ attribute.
+--
+-- Example:
+--
+-- > div ! required "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div required="bar">Hello.</div>
+--
+required :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+required = attribute "required" " required=\""
+{-# INLINE required #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @reversed@ attribute.
+--
+-- Example:
+--
+-- > div ! reversed "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div reversed="bar">Hello.</div>
+--
+reversed :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+reversed = attribute "reversed" " reversed=\""
+{-# INLINE reversed #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @rows@ attribute.
+--
+-- Example:
+--
+-- > div ! rows "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div rows="bar">Hello.</div>
+--
+rows :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+rows = attribute "rows" " rows=\""
+{-# INLINE rows #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @rowspan@ attribute.
+--
+-- Example:
+--
+-- > div ! rowspan "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div rowspan="bar">Hello.</div>
+--
+rowspan :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+rowspan = attribute "rowspan" " rowspan=\""
+{-# INLINE rowspan #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @sandbox@ attribute.
+--
+-- Example:
+--
+-- > div ! sandbox "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div sandbox="bar">Hello.</div>
+--
+sandbox :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+sandbox = attribute "sandbox" " sandbox=\""
+{-# INLINE sandbox #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @scope@ attribute.
+--
+-- Example:
+--
+-- > div ! scope "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div scope="bar">Hello.</div>
+--
+scope :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+scope = attribute "scope" " scope=\""
+{-# INLINE scope #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @scoped@ attribute.
+--
+-- Example:
+--
+-- > div ! scoped "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div scoped="bar">Hello.</div>
+--
+scoped :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+scoped = attribute "scoped" " scoped=\""
+{-# INLINE scoped #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @seamless@ attribute.
+--
+-- Example:
+--
+-- > div ! seamless "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div seamless="bar">Hello.</div>
+--
+seamless :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+seamless = attribute "seamless" " seamless=\""
+{-# INLINE seamless #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @selected@ attribute.
+--
+-- Example:
+--
+-- > div ! selected "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div selected="bar">Hello.</div>
+--
+selected :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+selected = attribute "selected" " selected=\""
+{-# INLINE selected #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @shape@ attribute.
+--
+-- Example:
+--
+-- > div ! shape "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div shape="bar">Hello.</div>
+--
+shape :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+shape = attribute "shape" " shape=\""
+{-# INLINE shape #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @size@ attribute.
+--
+-- Example:
+--
+-- > div ! size "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div size="bar">Hello.</div>
+--
+size :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+size = attribute "size" " size=\""
+{-# INLINE size #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @sizes@ attribute.
+--
+-- Example:
+--
+-- > div ! sizes "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div sizes="bar">Hello.</div>
+--
+sizes :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+sizes = attribute "sizes" " sizes=\""
+{-# INLINE sizes #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @span@ attribute.
+--
+-- Example:
+--
+-- > div ! span "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div span="bar">Hello.</div>
+--
+span :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+span = attribute "span" " span=\""
+{-# INLINE span #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @spellcheck@ attribute.
+--
+-- Example:
+--
+-- > div ! spellcheck "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div spellcheck="bar">Hello.</div>
+--
+spellcheck :: AttributeValue  -- ^ Attribute value.
+           -> Attribute       -- ^ Resulting attribute.
+spellcheck = attribute "spellcheck" " spellcheck=\""
+{-# INLINE spellcheck #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @src@ attribute.
+--
+-- Example:
+--
+-- > div ! src "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div src="bar">Hello.</div>
+--
+src :: AttributeValue  -- ^ Attribute value.
+    -> Attribute       -- ^ Resulting attribute.
+src = attribute "src" " src=\""
+{-# INLINE src #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @srcdoc@ attribute.
+--
+-- Example:
+--
+-- > div ! srcdoc "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div srcdoc="bar">Hello.</div>
+--
+srcdoc :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+srcdoc = attribute "srcdoc" " srcdoc=\""
+{-# INLINE srcdoc #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @start@ attribute.
+--
+-- Example:
+--
+-- > div ! start "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div start="bar">Hello.</div>
+--
+start :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+start = attribute "start" " start=\""
+{-# INLINE start #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @step@ attribute.
+--
+-- Example:
+--
+-- > div ! step "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div step="bar">Hello.</div>
+--
+step :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+step = attribute "step" " step=\""
+{-# INLINE step #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @style@ attribute.
+--
+-- Example:
+--
+-- > div ! style "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div style="bar">Hello.</div>
+--
+style :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+style = attribute "style" " style=\""
+{-# INLINE style #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @subject@ attribute.
+--
+-- Example:
+--
+-- > div ! subject "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div subject="bar">Hello.</div>
+--
+subject :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+subject = attribute "subject" " subject=\""
+{-# INLINE subject #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @summary@ attribute.
+--
+-- Example:
+--
+-- > div ! summary "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div summary="bar">Hello.</div>
+--
+summary :: AttributeValue  -- ^ Attribute value.
+        -> Attribute       -- ^ Resulting attribute.
+summary = attribute "summary" " summary=\""
+{-# INLINE summary #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @tabindex@ attribute.
+--
+-- Example:
+--
+-- > div ! tabindex "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div tabindex="bar">Hello.</div>
+--
+tabindex :: AttributeValue  -- ^ Attribute value.
+         -> Attribute       -- ^ Resulting attribute.
+tabindex = attribute "tabindex" " tabindex=\""
+{-# INLINE tabindex #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @target@ attribute.
+--
+-- Example:
+--
+-- > div ! target "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div target="bar">Hello.</div>
+--
+target :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+target = attribute "target" " target=\""
+{-# INLINE target #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @title@ attribute.
+--
+-- Example:
+--
+-- > div ! title "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div title="bar">Hello.</div>
+--
+title :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+title = attribute "title" " title=\""
+{-# INLINE title #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @type@ attribute.
+--
+-- Example:
+--
+-- > div ! type_ "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div type="bar">Hello.</div>
+--
+type_ :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+type_ = attribute "type" " type=\""
+{-# INLINE type_ #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @usemap@ attribute.
+--
+-- Example:
+--
+-- > div ! usemap "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div usemap="bar">Hello.</div>
+--
+usemap :: AttributeValue  -- ^ Attribute value.
+       -> Attribute       -- ^ Resulting attribute.
+usemap = attribute "usemap" " usemap=\""
+{-# INLINE usemap #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @value@ attribute.
+--
+-- Example:
+--
+-- > div ! value "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div value="bar">Hello.</div>
+--
+value :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+value = attribute "value" " value=\""
+{-# INLINE value #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @width@ attribute.
+--
+-- Example:
+--
+-- > div ! width "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div width="bar">Hello.</div>
+--
+width :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+width = attribute "width" " width=\""
+{-# INLINE width #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @wrap@ attribute.
+--
+-- Example:
+--
+-- > div ! wrap "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div wrap="bar">Hello.</div>
+--
+wrap :: AttributeValue  -- ^ Attribute value.
+     -> Attribute       -- ^ Resulting attribute.
+wrap = attribute "wrap" " wrap=\""
+{-# INLINE wrap #-}
+
+-- WARNING: The next block of code was automatically generated by
+-- src/Util/GenerateHtmlCombinators.hs:249
+--
+-- | Combinator for the @xmlns@ attribute.
+--
+-- Example:
+--
+-- > div ! xmlns "bar" $ "Hello."
+--
+-- Result:
+--
+-- > <div xmlns="bar">Hello.</div>
+--
+xmlns :: AttributeValue  -- ^ Attribute value.
+      -> Attribute       -- ^ Resulting attribute.
+xmlns = attribute "xmlns" " xmlns=\""
+{-# INLINE xmlns #-}
diff --git a/src/Util/GenerateHtmlCombinators.hs b/src/Util/GenerateHtmlCombinators.hs
--- a/src/Util/GenerateHtmlCombinators.hs
+++ b/src/Util/GenerateHtmlCombinators.hs
@@ -453,6 +453,19 @@
     , selfClosing = False
     }
 
+-- | XHTML 5.0
+--
+xhtml5 :: HtmlVariant
+xhtml5 = HtmlVariant
+    { version = ["XHtml5"]
+    , docType = ["<!DOCTYPE HTML>"]
+    , parents = parents html5
+    , leafs = leafs html5
+    , attributes = attributes html5
+    , selfClosing = True
+    }
+
+
 -- | A map of HTML variants, per version, lowercase.
 --
 htmlVariants :: Map String HtmlVariant
@@ -464,6 +477,7 @@
     , xhtml1Transitional
     , xhtml1FrameSet
     , html5
+    , xhtml5
     ]
 
 main :: IO ()
diff --git a/src/Util/Sanitize.hs b/src/Util/Sanitize.hs
--- a/src/Util/Sanitize.hs
+++ b/src/Util/Sanitize.hs
@@ -19,8 +19,12 @@
 -- > sanitize "http-equiv" == "httpEquiv"
 --
 sanitize :: String -> String
-sanitize = appendUnderscore . removeDash . map toLower
+sanitize str
+    | lower  == "doctypehtml" = "docTypeHtml"
+    | otherwise               = appendUnderscore $ removeDash lower
   where
+    lower = map toLower str
+
     -- Remove a dash, replacing it by camelcase notation
     --
     -- Example:
