úÎyƒ#      !"1requires newtype deriving and MPTCs with fundeps  experimental %Niklas Broberg, nibro@cs.chalmers.se &HNames can be simple or qualified with a domain. We want to conveniently ? use both simple strings or pairs wherever a Name is expected.  Set attributes on XML elements 8Similarly embed values as attributes of an XML element. MEmbed values as child nodes of an XML element. The parent type will be clear * from the context so it is not mentioned. 0Generate XML values in some XMLGenerator monad. BThe monad transformer that allows a monad to generate XML values.  un-lift.  !"#NPairs of strings can represent names, meaning a name qualified with a domain. $CStrings can represent names, meaning a simple name with no domain. %&Names can represent names, of course. #  !"#   !"#   !"&      !"#$%&'hsx-0.4HSX.XMLGenerator TypeCast'' typeCast'' TypeCast' typeCast'TypeCasttypeCastIsNametoName AppendChildappChildappAllSetAttrsetAttrsetAllAttr:= EmbedAsAttrasAttr EmbedAsChildasChild XMLGeneratorXMLChild Attribute genElement genEElementNameXMLGenT unXMLGenTset<@<<@app<: $fIsName(,) $fIsName[] $fIsName(,)0