Hi,<div><br></div><div>I&#39;ve just released the first version of text-xml-qq, It&#39;s a Template Haskell quasiquoter that converts XML code into Text.XML.Light.Element compile time.</div><div><br></div><div>Feature requests, bug fixes etc are welcomed. The package only got one backend (xml-package) at the moment but it should be trivial to add more backends (e.g. for a bytestring-based xml package).</div>
<div><br></div><div>You can embed Haskell variables in the xml code. Inside xml-elements you use the syntax {foo} for embedded variables. If you wish to embed an element or text you use the syntax &lt;&lt;foo&gt;&gt;. See example or the test-file <a href="http://github.com/finnsson/text-xml-qq/blob/master/src/Text/XML/TestQQ.hs">http://github.com/finnsson/text-xml-qq/blob/master/src/Text/XML/TestQQ.hs</a> at the project site <a href="http://github.com/finnsson/text-xml-qq">http://github.com/finnsson/text-xml-qq</a>.</div>
<div><br></div><div>-- Oscar</div><div><br></div><div>=== Example ===</div><div><br></div><div><div>Given the variables</div><div><br></div><div>    url = &quot;<a href="http://google.se">google.se</a>&quot;</div><div>    elem = &quot;gmail&quot;</div>
<div>    attrNs = &quot;something&quot;</div><div>    attrName = &quot;Pelle&quot;</div><div>    attrValue = &quot;Arne&quot;</div><div>    elemCont = CRef &quot;testing&quot;</div><div>    cont1 = Elem $ blank_element { elName = QName &quot;hej&quot; Nothing Nothing }</div>
<div>    cont2 = CRef &quot;other test&quot;</div><div><br></div><div>the code</div><div><br></div><div>    [$xmlQQ|</div><div>    &lt;{url}:{elem} {attrNs}:{attrName}={attrValue} attr=&quot;cool&quot;&gt;</div><div>      &lt;elem ns1:elem1=&quot;1&quot; ns2:elem2=&quot;2&quot;&gt;&lt;&lt;elemCont&gt;&gt;&lt;/elem&gt;</div>
<div>      &lt;elem /&gt;</div><div>      &lt;el /&gt;</div><div>      &lt;&lt;cont1&gt;&gt;</div><div>      &lt;&lt;cont2&gt;&gt;</div><div>    &lt;/{url}:{elem}&gt;</div><div>    |]</div><div><br></div><div>will generate the data structure</div>
<div><br></div><div>    element {</div><div>      elName = QName elem Nothing (Just url),</div><div>      elAttribs = [Attr (QName attrName Nothing (Just attrNs)) attrValue,</div><div>                   Attr (qname &quot;attr&quot;) &quot;cool&quot;],</div>
<div>      elContent = [</div><div>        (Elem $ blank_element { elName = QName &quot;elem&quot; Nothing Nothing,</div><div>                          elAttribs = [Attr (QName &quot;elem1&quot; Nothing (Just &quot;ns1&quot;)) &quot;1&quot;,</div>
<div>                                       Attr (QName &quot;elem2&quot; Nothing (Just &quot;ns2&quot;)) &quot;2&quot;],</div><div>                          elContent = [elemCont]</div><div>                         }),</div>
<div>         (Elem $ <meta charset="utf-8">blank_element { elName =QName &quot;elem&quot; Nothing Nothing}),</div><div>         (Elem $ <meta charset="utf-8">blank_element { elName = QName &quot;el&quot; Nothing Nothing}),</div>
<div>         cont1,</div><div>         cont2]</div><div>    }</div></div><div><br></div><div>=== End example ===</div>