The XML quasiquoter.
Given the variables
url = "google.se" elem = "gmail" attrNs = "something" attrName = "Pelle" attrValue = "Arne" elemCont = CRef "testing" cont1 = Elem $ element { elName = qname "hej" } cont2 = CRef "other test"
the code
[$xmlQQ| <{url}:{elem} {attrNs}:{attrName}={attrValue} attr="cool"> <elem ns1:elem1="1" ns2:elem2="2"><<elemCont>></elem> <elem /> <el /> <<cont1>> <<cont2>> </{url}:{elem}> |]
will generate the data structure
element { elName = QName elem Nothing (Just url), elAttribs = [Attr (QName attrName Nothing (Just attrNs)) attrValue, Attr (qname "attr") "cool"], elContent = [ (Elem $ element { elName = qname "elem", elAttribs = [Attr (QName "elem1" Nothing (Just "ns1")) "1", Attr (QName "elem2" Nothing (Just "ns2")) "2"], elContent = [elemCont] }), (Elem $ element { elName = qname "elem" }), (Elem $ element { elName = qname "el" }), cont1, cont2] }