diff --git a/HaXml.cabal b/HaXml.cabal
--- a/HaXml.cabal
+++ b/HaXml.cabal
@@ -1,5 +1,5 @@
 name:		HaXml
-version:	1.19.2
+version:	1.19.3
 license:	LGPL
 license-file:	COPYRIGHT
 author:		Malcolm Wallace <Malcolm.Wallace@cs.york.ac.uk>
@@ -14,7 +14,9 @@
 cabal-version:  >=1.2
 
 flag splitBase
+  default: True
 flag bytestringInBase
+  default: False
 
 library
   exposed-modules:
@@ -46,7 +48,7 @@
         Text.XML.HaXml.Xtract.Combinators,
         Text.XML.HaXml.Xtract.Lex,
         Text.XML.HaXml.Xtract.Parse
-  hs-source-dir: src
+  hs-source-dirs: src
   build-depends: base, haskell98, polyparse
   if flag(splitBase)
     build-depends: base >= 3, pretty, random, containers
@@ -56,8 +58,8 @@
     build-depends: base >= 2 && < 3
   else
     build-depends: base < 2 || >= 3, bytestring
-  extensions: CPP
-  cpp-options: -DVERSION=1.19.2
+  extensions: CPP, ExistentialQuantification
+  cpp-options: -DVERSION=1.19.3
   nhc98-options: -K10M
 
 Executable Canonicalise
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 SOFTWARE = HaXml
-VERSION  = 1.19.2
+VERSION  = 1.19.3
 
 #CPP      = cpp -traditional
 CPP     = cpphs --text --noline	# useful e.g. on MacOS X
diff --git a/configure b/configure
--- a/configure
+++ b/configure
@@ -2,7 +2,7 @@
 #       configure -- prepare to compile/install the HaXml package
 #       author:   Malcolm.Wallace@cs.york.ac.uk, August 2002
 
-VERSION="1.19.1"
+VERSION="1.19.3"
 
 if [ -f obj/prefix ]
 then INSTALLDIR=`cat obj/prefix`
diff --git a/docs/HaXml/Text-XML-HaXml-ShowXmlLazy.html b/docs/HaXml/Text-XML-HaXml-ShowXmlLazy.html
--- a/docs/HaXml/Text-XML-HaXml-ShowXmlLazy.html
+++ b/docs/HaXml/Text-XML-HaXml-ShowXmlLazy.html
@@ -122,7 +122,7 @@
 ></TR
 ><TR
 ><TD CLASS="doc"
->Convert a fully-typed XML document to a string (without DTD).                                         
+>Convert a fully-typed XML document to a string (without DTD).
 </TD
 ></TR
 ><TR
diff --git a/docs/HaXml/Text-XML-HaXml-TypeMapping.html b/docs/HaXml/Text-XML-HaXml-TypeMapping.html
--- a/docs/HaXml/Text-XML-HaXml-TypeMapping.html
+++ b/docs/HaXml/Text-XML-HaXml-TypeMapping.html
@@ -435,6 +435,54 @@
 ></TR
 ><TR
 ><TD CLASS="decl"
+>(<A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> a, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> b, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> c, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> d) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> (a, b, c, d)</TD
+></TR
+><TR
+><TD CLASS="decl"
+>(<A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> a, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> b, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> c, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> d, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> e) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> (a, b, c, d, e)</TD
+></TR
+><TR
+><TD CLASS="decl"
+>(<A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> a, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> b, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> c, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> d, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> e, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> f) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> (a, b, c, d, e, f)</TD
+></TR
+><TR
+><TD CLASS="decl"
 ><A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
 >HTypeable</A
 > a =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
diff --git a/docs/HaXml/Text-XML-HaXml-Types.html b/docs/HaXml/Text-XML-HaXml-Types.html
--- a/docs/HaXml/Text-XML-HaXml-Types.html
+++ b/docs/HaXml/Text-XML-HaXml-Types.html
@@ -391,6 +391,18 @@
 ></TR
 ><TR
 ><TD CLASS="decl"
+><A HREF="#v%3Ainfo"
+>info</A
+> :: <A HREF="Text-XML-HaXml-Types.html#t%3AContent"
+>Content</A
+> t -&gt; t</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
 ><SPAN CLASS="keyword"
 >data</SPAN
 > <A HREF="#t%3AProlog"
@@ -2466,6 +2478,30 @@
 ></TD
 ></TR
 ><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3Ainfo"
+></A
+><B
+>info</B
+> :: <A HREF="Text-XML-HaXml-Types.html#t%3AContent"
+>Content</A
+> t -&gt; t</TD
+><TD CLASS="declbut"
+><A HREF="src/Text/XML/HaXml/Types.html#info"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
 ><TD CLASS="section2"
 ><A NAME="6"
 >Administrative parts of the document
@@ -3565,7 +3601,7 @@
 >Plus</B
 ></TD
 ><TD CLASS="rdoc"
->One Or More 
+>One Or More
 </TD
 ></TR
 ></TABLE
diff --git a/docs/HaXml/Text-XML-HaXml-XmlContent.html b/docs/HaXml/Text-XML-HaXml-XmlContent.html
--- a/docs/HaXml/Text-XML-HaXml-XmlContent.html
+++ b/docs/HaXml/Text-XML-HaXml-XmlContent.html
@@ -2069,6 +2069,54 @@
 ></TR
 ><TR
 ><TD CLASS="decl"
+>(<A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> a, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> b, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> c, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> d) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> (a, b, c, d)</TD
+></TR
+><TR
+><TD CLASS="decl"
+>(<A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> a, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> b, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> c, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> d, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> e) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> (a, b, c, d, e)</TD
+></TR
+><TR
+><TD CLASS="decl"
+>(<A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> a, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> b, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> c, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> d, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> e, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> f) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> (a, b, c, d, e, f)</TD
+></TR
+><TR
+><TD CLASS="decl"
 ><A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
 >XmlContent</A
 > a =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
@@ -3201,7 +3249,7 @@
 ><TR
 ><TD CLASS="doc"
 >Get the next content element, checking that it has one of the required
-   tags, using the given matching function. 
+   tags, using the given matching function.
    (Skips over comments and whitespace, rejects text and refs.
     Also returns position of element.)
 </TD
@@ -3469,7 +3517,7 @@
 ></TR
 ><TR
 ><TD CLASS="doc"
->Turn a simple string into XML text. 
+>Turn a simple string into XML text.
 </TD
 ></TR
 ><TR
@@ -4370,12 +4418,12 @@
 ><TR
 ><TD CLASS="ndoc"
 ><P
->A type corresponding to XML's ANY contentspec. 
+>A type corresponding to XML's ANY contentspec.
    It is either a list of unconverted xml <TT
 ><A HREF="Text-XML-HaXml-XmlContent.html#t%3AContent"
 >Content</A
 ></TT
-> 
+>
    or some <TT
 ><A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
 >XmlContent</A
diff --git a/docs/HaXml/doc-index-I.html b/docs/HaXml/doc-index-I.html
--- a/docs/HaXml/doc-index-I.html
+++ b/docs/HaXml/doc-index-I.html
@@ -351,9 +351,7 @@
 ><TD CLASS="indexlinks"
 ><A HREF="Text-XML-HaXml-Types.html#v%3Ainfo"
 >Text.XML.HaXml.Types</A
->, <A HREF="Text-XML-HaXml.html#v%3Ainfo"
->Text.XML.HaXml</A
-></TD
+>, Text.XML.HaXml</TD
 ></TR
 ><TR
 ><TD CLASS="indexentry"
diff --git a/docs/HaXml/src/Text/XML/HaXml/ByteStringPP.html b/docs/HaXml/src/Text/XML/HaXml/ByteStringPP.html
--- a/docs/HaXml/src/Text/XML/HaXml/ByteStringPP.html
+++ b/docs/HaXml/src/Text/XML/HaXml/ByteStringPP.html
@@ -24,279 +24,321 @@
 <a name="(line22)"></a>
 <a name="(line23)"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>maybe<font color=Cyan>,</font>either<font color=Cyan>,</font>elem<font color=Cyan>,</font>concat<font color=Cyan>)</font>
 <a name="(line24)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
-<a name="(line25)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font> 
+<a name="(line25)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font>
 <a name="(line26)"></a><font color=Blue>--import Data.ByteString.Lazy hiding (pack,map,head,any,singleton,intersperse,join)</font>
-<a name="(line27)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8 <font color=Cyan>(</font>ByteString()<font color=Cyan>,</font> concat<font color=Cyan>,</font> pack<font color=Cyan>,</font> singleton<font color=Cyan>,</font> join
+<a name="(line27)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8 <font color=Cyan>(</font>ByteString()<font color=Cyan>,</font> concat<font color=Cyan>,</font> pack<font color=Cyan>,</font> singleton<font color=Cyan>,</font> intercalate
 <a name="(line28)"></a>                                  <font color=Cyan>,</font> append<font color=Cyan>,</font> elem<font color=Cyan>,</font> empty<font color=Cyan>)</font>
 <a name="(line29)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
 <a name="(line30)"></a>
-<a name="(line31)"></a><a name="either"></a>either f g <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> f x
-<a name="(line32)"></a>either f g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x
-<a name="(line33)"></a>
-<a name="(line34)"></a><a name="maybe"></a>maybe f Nothing  <font color=Red>=</font> empty
-<a name="(line35)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x
-<a name="(line36)"></a>
-<a name="(line37)"></a>
-<a name="(line38)"></a><font color=Blue>-- A simple implementation of the pretty-printing combinator interface,</font>
-<a name="(line39)"></a><font color=Blue>-- but for plain ByteStrings:</font>
-<a name="(line40)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan>&lt;&gt;</font> 
-<a name="(line41)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line42)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>5</font> <font color=Cyan>$$</font><font color=Cyan>,</font> <font color=Cyan>$+$</font>
-<a name="(line43)"></a><a name="<>"></a><font color=Cyan>(</font><font color=Cyan>&lt;&gt;</font><font color=Cyan>)</font>   <font color=Red>::</font> ByteString   <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString <font color=Blue>-- Beside</font>
-<a name="(line44)"></a><a name="hcat"></a>hcat   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString		   <font color=Blue>-- List version of &lt;&gt;</font>
-<a name="(line45)"></a><a name="<+>"></a><font color=Cyan>(</font><font color=Cyan>&lt;+&gt;</font><font color=Cyan>)</font>  <font color=Red>::</font> ByteString   <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString <font color=Blue>-- Beside, separated by space</font>
-<a name="(line46)"></a><a name="hsep"></a>hsep   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString		   <font color=Blue>-- List version of &lt;+&gt;</font>
-<a name="(line47)"></a><a name="$$"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font>   <font color=Red>::</font> ByteString   <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString <font color=Blue>-- Above; if there is no</font>
-<a name="(line48)"></a>                                                   <font color=Blue>-- overlap, it "dovetails"</font>
-<a name="(line49)"></a><a name="vcat"></a>vcat   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- List version of $$</font>
-<a name="(line50)"></a><a name="cat"></a>cat    <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- Either hcat or vcat</font>
-<a name="(line51)"></a><a name="sep"></a>sep    <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- Either hsep or vcat</font>
-<a name="(line52)"></a><a name="fcat"></a>fcat   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- ``Paragraph fill'' version of cat</font>
-<a name="(line53)"></a><a name="fsep"></a>fsep   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- ``Paragraph fill'' version of sep</font>
-<a name="(line54)"></a><a name="nest"></a>nest   <font color=Red>::</font> Int <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString  <font color=Blue>-- Nested</font>
-<a name="(line55)"></a>
-<a name="(line56)"></a><font color=Cyan>(</font><font color=Cyan>&lt;&gt;</font><font color=Cyan>)</font>  b1 b2  <font color=Red>=</font> b1 <font color=Cyan>`append`</font> b2
-<a name="(line57)"></a><font color=Cyan>(</font><font color=Cyan>&lt;+&gt;</font><font color=Cyan>)</font> b1 b2  <font color=Red>=</font> b1 <font color=Cyan>&lt;&gt;</font> pack <font color=Magenta>" "</font> <font color=Cyan>&lt;&gt;</font> b2
-<a name="(line58)"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font>  b1 b2  <font color=Red>=</font> b1 <font color=Cyan>&lt;&gt;</font> pack <font color=Magenta>"\n"</font> <font color=Cyan>&lt;&gt;</font> b2
-<a name="(line59)"></a><a name="$+$"></a><font color=Cyan>(</font><font color=Cyan>$+$</font><font color=Cyan>)</font>        <font color=Red>=</font> <font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font>
-<a name="(line60)"></a>
-<a name="(line61)"></a>hcat <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>concat 
-<a name="(line62)"></a>hsep <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>join <font color=Cyan>(</font>singleton <font color=Magenta>' '</font><font color=Cyan>)</font>
-<a name="(line63)"></a>vcat <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>join <font color=Cyan>(</font>singleton <font color=Magenta>'\n'</font><font color=Cyan>)</font>
-<a name="(line64)"></a>cat  <font color=Red>=</font> hcat
-<a name="(line65)"></a>sep  <font color=Red>=</font> hsep
-<a name="(line66)"></a><a name="text"></a>text <font color=Red>=</font> pack
-<a name="(line67)"></a>fcat <font color=Red>=</font> cat
-<a name="(line68)"></a>fsep <font color=Red>=</font> sep
-<a name="(line69)"></a>nest <font color=Green><u>_</u></font> b <font color=Red>=</font> pack <font color=Magenta>" "</font> <font color=Cyan>&lt;&gt;</font> b
-<a name="(line70)"></a><a name="parens"></a>parens p <font color=Red>=</font> pack <font color=Magenta>"("</font> <font color=Cyan>&lt;&gt;</font> p <font color=Cyan>&lt;&gt;</font> pack <font color=Magenta>")"</font>
-<a name="(line71)"></a>
-<a name="(line72)"></a>
-<a name="(line73)"></a><font color=Blue>----</font>
-<a name="(line74)"></a><font color=Blue>-- Now for the XML pretty-printing interface.</font>
-<a name="(line75)"></a><font color=Blue>-- (Basically copied direct from Text.XML.HaXml.Pretty).</font>
+<a name="(line31)"></a><a name="either"></a>either <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-&gt;</font> t1<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>t2 <font color=Red>-&gt;</font> t1<font color=Cyan>)</font> <font color=Red>-&gt;</font> Either t t2 <font color=Red>-&gt;</font> t1
+<a name="(line32)"></a>either f <font color=Green><u>_</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> f x
+<a name="(line33)"></a>either <font color=Green><u>_</u></font> g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x
+<a name="(line34)"></a>
+<a name="(line35)"></a><a name="maybe"></a>maybe <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-&gt;</font> ByteString<font color=Cyan>)</font> <font color=Red>-&gt;</font> Maybe t <font color=Red>-&gt;</font> ByteString
+<a name="(line36)"></a>maybe <font color=Green><u>_</u></font> Nothing  <font color=Red>=</font> empty
+<a name="(line37)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x
+<a name="(line38)"></a>
+<a name="(line39)"></a>
+<a name="(line40)"></a><font color=Blue>-- A simple implementation of the pretty-printing combinator interface,</font>
+<a name="(line41)"></a><font color=Blue>-- but for plain ByteStrings:</font>
+<a name="(line42)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line43)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line44)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>5</font> <font color=Cyan>$$</font>
+<a name="(line45)"></a><a name="<>"></a><font color=Cyan>(</font><font color=Cyan>&lt;&gt;</font><font color=Cyan>)</font>   <font color=Red>::</font> ByteString   <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString <font color=Blue>-- Beside</font>
+<a name="(line46)"></a><a name="hcat"></a>hcat   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString                 <font color=Blue>-- List version of &lt;&gt;</font>
+<a name="(line47)"></a><a name="<+>"></a><font color=Cyan>(</font><font color=Cyan>&lt;+&gt;</font><font color=Cyan>)</font>  <font color=Red>::</font> ByteString   <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString <font color=Blue>-- Beside, separated by space</font>
+<a name="(line48)"></a><a name="hsep"></a>hsep   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString                 <font color=Blue>-- List version of &lt;+&gt;</font>
+<a name="(line49)"></a><a name="$$"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font>   <font color=Red>::</font> ByteString   <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString <font color=Blue>-- Above; if there is no</font>
+<a name="(line50)"></a>                                                   <font color=Blue>-- overlap, it "dovetails"</font>
+<a name="(line51)"></a><a name="vcat"></a>vcat   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- List version of $$</font>
+<a name="(line52)"></a><a name="sep"></a><font color=Blue>-- cat    :: [ByteString] -&gt; ByteString       -- Either hcat or vcat</font>
+<a name="(line53)"></a>sep    <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- Either hsep or vcat</font>
+<a name="(line54)"></a><a name="fsep"></a><font color=Blue>-- fcat   :: [ByteString] -&gt; ByteString       -- ``Paragraph fill'' version of cat</font>
+<a name="(line55)"></a>fsep   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- ``Paragraph fill'' version of sep</font>
+<a name="(line56)"></a><a name="nest"></a>nest   <font color=Red>::</font> Int <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString  <font color=Blue>-- Nested</font>
+<a name="(line57)"></a>
+<a name="(line58)"></a><font color=Cyan>(</font><font color=Cyan>&lt;&gt;</font><font color=Cyan>)</font>  b1 b2  <font color=Red>=</font> b1 <font color=Cyan>`append`</font> b2
+<a name="(line59)"></a><font color=Cyan>(</font><font color=Cyan>&lt;+&gt;</font><font color=Cyan>)</font> b1 b2  <font color=Red>=</font> b1 <font color=Cyan>&lt;&gt;</font> pack <font color=Magenta>" "</font> <font color=Cyan>&lt;&gt;</font> b2
+<a name="(line60)"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font>  b1 b2  <font color=Red>=</font> b1 <font color=Cyan>&lt;&gt;</font> pack <font color=Magenta>"\n"</font> <font color=Cyan>&lt;&gt;</font> b2
+<a name="(line61)"></a><font color=Blue>-- ($+$)        = ($$)</font>
+<a name="(line62)"></a>
+<a name="(line63)"></a>hcat <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>concat
+<a name="(line64)"></a>hsep <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>intercalate <font color=Cyan>(</font>singleton <font color=Magenta>' '</font><font color=Cyan>)</font>
+<a name="(line65)"></a>vcat <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>intercalate <font color=Cyan>(</font>singleton <font color=Magenta>'\n'</font><font color=Cyan>)</font>
+<a name="(line66)"></a><font color=Green><u>_</u></font>  <font color=Red>=</font> hcat
+<a name="(line67)"></a>sep  <font color=Red>=</font> hsep
+<a name="(line68)"></a><a name="text"></a>text <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString
+<a name="(line69)"></a>text <font color=Red>=</font> pack
+<a name="(line70)"></a><font color=Blue>-- _ = cat</font>
+<a name="(line71)"></a>fsep <font color=Red>=</font> sep
+<a name="(line72)"></a>nest <font color=Green><u>_</u></font> b <font color=Red>=</font> pack <font color=Magenta>" "</font> <font color=Cyan>&lt;&gt;</font> b
+<a name="(line73)"></a><a name="parens"></a>parens <font color=Red>::</font> ByteString <font color=Red>-&gt;</font> ByteString
+<a name="(line74)"></a>parens p <font color=Red>=</font> pack <font color=Magenta>"("</font> <font color=Cyan>&lt;&gt;</font> p <font color=Cyan>&lt;&gt;</font> pack <font color=Magenta>")"</font>
+<a name="(line75)"></a>
 <a name="(line76)"></a>
-<a name="(line77)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-&gt;</font> ByteString
-<a name="(line78)"></a><a name="prolog"></a>prolog   <font color=Red>::</font> Prolog     <font color=Red>-&gt;</font> ByteString
-<a name="(line79)"></a><a name="xmldecl"></a>xmldecl  <font color=Red>::</font> XMLDecl    <font color=Red>-&gt;</font> ByteString
-<a name="(line80)"></a><a name="misc"></a>misc     <font color=Red>::</font> Misc       <font color=Red>-&gt;</font> ByteString
-<a name="(line81)"></a><a name="sddecl"></a>sddecl   <font color=Red>::</font> Bool       <font color=Red>-&gt;</font> ByteString
-<a name="(line82)"></a>
-<a name="(line83)"></a><a name="doctypedecl"></a>doctypedecl   <font color=Red>::</font> DocTypeDecl   <font color=Red>-&gt;</font> ByteString
-<a name="(line84)"></a><a name="markupdecl"></a>markupdecl    <font color=Red>::</font> MarkupDecl    <font color=Red>-&gt;</font> ByteString
-<a name="(line85)"></a><a name="extsubset"></a>extsubset     <font color=Red>::</font> ExtSubset     <font color=Red>-&gt;</font> ByteString
-<a name="(line86)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> ExtSubsetDecl <font color=Red>-&gt;</font> ByteString
-<a name="(line87)"></a><a name="cp"></a>cp            <font color=Red>::</font> CP            <font color=Red>-&gt;</font> ByteString
-<a name="(line88)"></a>
-<a name="(line89)"></a><a name="element"></a>element   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> ByteString
-<a name="(line90)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> ByteString
-<a name="(line91)"></a><a name="content"></a>content   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> ByteString
+<a name="(line77)"></a><font color=Blue>----</font>
+<a name="(line78)"></a><font color=Blue>-- Now for the XML pretty-printing interface.</font>
+<a name="(line79)"></a><font color=Blue>-- (Basically copied direct from Text.XML.HaXml.Pretty).</font>
+<a name="(line80)"></a>
+<a name="(line81)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-&gt;</font> ByteString
+<a name="(line82)"></a><a name="prolog"></a>prolog   <font color=Red>::</font> Prolog     <font color=Red>-&gt;</font> ByteString
+<a name="(line83)"></a><a name="xmldecl"></a>xmldecl  <font color=Red>::</font> XMLDecl    <font color=Red>-&gt;</font> ByteString
+<a name="(line84)"></a><a name="misc"></a>misc     <font color=Red>::</font> Misc       <font color=Red>-&gt;</font> ByteString
+<a name="(line85)"></a><a name="sddecl"></a>sddecl   <font color=Red>::</font> Bool       <font color=Red>-&gt;</font> ByteString
+<a name="(line86)"></a>
+<a name="(line87)"></a><a name="doctypedecl"></a>doctypedecl   <font color=Red>::</font> DocTypeDecl   <font color=Red>-&gt;</font> ByteString
+<a name="(line88)"></a><a name="markupdecl"></a>markupdecl    <font color=Red>::</font> MarkupDecl    <font color=Red>-&gt;</font> ByteString
+<a name="(line89)"></a><a name="cp"></a><font color=Blue>-- extsubset     :: ExtSubset     -&gt; ByteString</font>
+<a name="(line90)"></a><font color=Blue>-- extsubsetdecl :: ExtSubsetDecl -&gt; ByteString</font>
+<a name="(line91)"></a>cp            <font color=Red>::</font> CP            <font color=Red>-&gt;</font> ByteString
 <a name="(line92)"></a>
-<a name="(line93)"></a><font color=Blue>----</font>
-<a name="(line94)"></a>
-<a name="(line95)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m<font color=Cyan>)</font>
-<a name="(line96)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>
-<a name="(line97)"></a>                             vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>
-<a name="(line98)"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>
-<a name="(line99)"></a>                             vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m2<font color=Cyan>)</font>
-<a name="(line100)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font>   <font color=Red>=</font> text <font color=Magenta>"&lt;?xml version='"</font> <font color=Cyan>&lt;&gt;</font> text v <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line101)"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>
-<a name="(line102)"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>
-<a name="(line103)"></a>                             text <font color=Magenta>"?&gt;"</font>
-<a name="(line104)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!--"</font> <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"--&gt;"</font>
-<a name="(line105)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"&lt;?"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"?&gt;"</font>
-<a name="(line106)"></a>sddecl sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>
-<a name="(line107)"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>
-<a name="(line108)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> Prelude<font color=Cyan>.</font>null ds <font color=Green><u>then</u></font> 
-<a name="(line109)"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
-<a name="(line110)"></a>                             <font color=Green><u>else</u></font> hd <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>
-<a name="(line111)"></a>                                  vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]&gt;"</font>
-<a name="(line112)"></a>                           <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"&lt;!DOCTYPE"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line113)"></a>                                      maybe externalid eid
-<a name="(line114)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e
-<a name="(line115)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a
-<a name="(line116)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e
-<a name="(line117)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n
-<a name="(line118)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m
-<a name="(line119)"></a><font color=Blue>--markupdecl (MarkupPE p m)  = peref p</font>
-<a name="(line120)"></a>extsubset <font color=Cyan>(</font>ExtSubset t ds<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan>$$</font>
-<a name="(line121)"></a>                             vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map extsubsetdecl ds<font color=Cyan>)</font>
-<a name="(line122)"></a>extsubsetdecl <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font>      <font color=Red>=</font> markupdecl m
-<a name="(line123)"></a>extsubsetdecl <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c
-<a name="(line124)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e)   = peref p</font>
-<a name="(line125)"></a>
-<a name="(line126)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line127)"></a>                         fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"/&gt;"</font>
-<a name="(line128)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>
-<a name="(line129)"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>
-<a name="(line130)"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>
-<a name="(line131)"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>
-<a name="(line132)"></a>    <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line133)"></a>                         text <font color=Magenta>"&gt;"</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map content cs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line134)"></a>                         text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
-<a name="(line135)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty
-<a name="(line136)"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c
-<a name="(line137)"></a>
-<a name="(line138)"></a><a name="isText"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True
-<a name="(line139)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> True
-<a name="(line140)"></a>isText <font color=Green><u>_</u></font>               <font color=Red>=</font> False
+<a name="(line93)"></a><a name="element"></a>element   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> ByteString
+<a name="(line94)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> ByteString
+<a name="(line95)"></a><a name="content"></a>content   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> ByteString
+<a name="(line96)"></a>
+<a name="(line97)"></a><font color=Blue>----</font>
+<a name="(line98)"></a>
+<a name="(line99)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m<font color=Cyan>)</font>
+<a name="(line100)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>
+<a name="(line101)"></a>                             vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="(line102)"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>
+<a name="(line103)"></a>                             vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m2<font color=Cyan>)</font>
+<a name="(line104)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font>   <font color=Red>=</font> text <font color=Magenta>"&lt;?xml version='"</font> <font color=Cyan>&lt;&gt;</font> text v <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line105)"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>
+<a name="(line106)"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>
+<a name="(line107)"></a>                             text <font color=Magenta>"?&gt;"</font>
+<a name="(line108)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!--"</font> <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"--&gt;"</font>
+<a name="(line109)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"&lt;?"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"?&gt;"</font>
+<a name="(line110)"></a>sddecl sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>
+<a name="(line111)"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>
+<a name="(line112)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> Prelude<font color=Cyan>.</font>null ds <font color=Green><u>then</u></font>
+<a name="(line113)"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="(line114)"></a>                             <font color=Green><u>else</u></font> hd <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>
+<a name="(line115)"></a>                                  vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]&gt;"</font>
+<a name="(line116)"></a>                           <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"&lt;!DOCTYPE"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line117)"></a>                                      maybe externalid eid
+<a name="(line118)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e
+<a name="(line119)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a
+<a name="(line120)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e
+<a name="(line121)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n
+<a name="(line122)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m
+<a name="(line123)"></a><font color=Blue>--markupdecl (MarkupPE p m)  = peref p</font>
+<a name="(line124)"></a><font color=Blue>-- _ (ExtSubset t ds) = maybe textdecl t $$</font>
+<a name="(line125)"></a><font color=Blue>--                             vcat (Prelude.map extsubsetdecl ds)</font>
+<a name="(line126)"></a><font color=Blue>-- _ (ExtMarkupDecl m)      = markupdecl m</font>
+<a name="(line127)"></a><font color=Blue>-- extsubsetdecl (ExtConditionalSect c) = conditionalsect c</font>
+<a name="(line128)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e)   = peref p</font>
+<a name="(line129)"></a>
+<a name="(line130)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line131)"></a>                         fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"/&gt;"</font>
+<a name="(line132)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>
+<a name="(line133)"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>
+<a name="(line134)"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>
+<a name="(line135)"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>
+<a name="(line136)"></a>    <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line137)"></a>                         text <font color=Magenta>"&gt;"</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map content cs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line138)"></a>                         text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="(line139)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty
+<a name="(line140)"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c
 <a name="(line141)"></a>
-<a name="(line142)"></a><a name="carryelem"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c
-<a name="(line143)"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
-<a name="(line144)"></a>                           text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>
-<a name="(line145)"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>
-<a name="(line146)"></a>carryelem e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c
-<a name="(line147)"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>
-<a name="(line148)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font>  <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
-<a name="(line149)"></a>                          <font color=Green><u>in</u></font>
-<a name="(line150)"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
-<a name="(line151)"></a>                            text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>
-<a name="(line152)"></a>                            nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> <font color=Blue>--- $$</font>
-<a name="(line153)"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n
-<a name="(line154)"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
-<a name="(line155)"></a><a name="carrycontent"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> carryelem e c
-<a name="(line156)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>
-<a name="(line157)"></a>carrycontent <font color=Cyan>(</font>CString True  s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>
-<a name="(line158)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c    <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>
-<a name="(line159)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>
-<a name="(line160)"></a>
-<a name="(line161)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>c<font color=Red>-&gt;</font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> c <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>
-<a name="(line162)"></a>carryscan f []     c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>
-<a name="(line163)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c
-<a name="(line164)"></a>                           <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0
-<a name="(line165)"></a>                       <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>
-<a name="(line166)"></a>
-<a name="(line167)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>
-<a name="(line168)"></a><font color=Blue>--  | isText (head cs) =</font>
-<a name="(line169)"></a><font color=Blue>--        ( start &lt;&gt;</font>
-<a name="(line170)"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
-<a name="(line171)"></a><font color=Blue>--        , text "&gt;")</font>
-<a name="(line172)"></a><font color=Blue>--  | otherwise =</font>
-<a name="(line173)"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>
-<a name="(line174)"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
-<a name="(line175)"></a><font color=Blue>--        , text "&gt;")</font>
-<a name="(line176)"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>
-<a name="(line177)"></a><font color=Blue>--</font>
-<a name="(line178)"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>
-<a name="(line179)"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>
-<a name="(line180)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>
-<a name="(line181)"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>
-<a name="(line182)"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>
-<a name="(line183)"></a>
-<a name="(line184)"></a>
-<a name="(line185)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>             <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;&gt;</font> attvalue v
-<a name="(line186)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e
-<a name="(line187)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s
-<a name="(line188)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> cdsect s
-<a name="(line189)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r
-<a name="(line190)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m
+<a name="(line142)"></a><a name="isText"></a>isText <font color=Red>::</font> Content t <font color=Red>-&gt;</font> Bool
+<a name="(line143)"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True
+<a name="(line144)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> True
+<a name="(line145)"></a>isText <font color=Green><u>_</u></font>               <font color=Red>=</font> False
+<a name="(line146)"></a>
+<a name="(line147)"></a><a name="carryelem"></a>carryelem <font color=Red>::</font> Element t <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> <font color=Cyan>(</font>ByteString<font color=Cyan>,</font> ByteString<font color=Cyan>)</font>
+<a name="(line148)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c
+<a name="(line149)"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
+<a name="(line150)"></a>                           text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>
+<a name="(line151)"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>
+<a name="(line152)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c
+<a name="(line153)"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>
+<a name="(line154)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font>  <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="(line155)"></a>                          <font color=Green><u>in</u></font>
+<a name="(line156)"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
+<a name="(line157)"></a>                            text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="(line158)"></a>                            nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> <font color=Blue>--- $$</font>
+<a name="(line159)"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n
+<a name="(line160)"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="(line161)"></a><a name="carrycontent"></a>carrycontent <font color=Red>::</font> Content t <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> <font color=Cyan>(</font>ByteString<font color=Cyan>,</font> ByteString<font color=Cyan>)</font>
+<a name="(line162)"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> carryelem e c
+<a name="(line163)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>
+<a name="(line164)"></a>carrycontent <font color=Cyan>(</font>CString True  s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>
+<a name="(line165)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c    <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>
+<a name="(line166)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>
+<a name="(line167)"></a>
+<a name="(line168)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>c<font color=Red>-&gt;</font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> c <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>
+<a name="(line169)"></a>carryscan <font color=Green><u>_</u></font> []     c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>
+<a name="(line170)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c
+<a name="(line171)"></a>                           <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0
+<a name="(line172)"></a>                       <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>
+<a name="(line173)"></a>
+<a name="(line174)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>
+<a name="(line175)"></a><font color=Blue>--  | isText (head cs) =</font>
+<a name="(line176)"></a><font color=Blue>--        ( start &lt;&gt;</font>
+<a name="(line177)"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
+<a name="(line178)"></a><font color=Blue>--        , text "&gt;")</font>
+<a name="(line179)"></a><font color=Blue>--  | otherwise =</font>
+<a name="(line180)"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>
+<a name="(line181)"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
+<a name="(line182)"></a><font color=Blue>--        , text "&gt;")</font>
+<a name="(line183)"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>
+<a name="(line184)"></a><font color=Blue>--</font>
+<a name="(line185)"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>
+<a name="(line186)"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>
+<a name="(line187)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>
+<a name="(line188)"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>
+<a name="(line189)"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>
+<a name="(line190)"></a>
 <a name="(line191)"></a>
-<a name="(line192)"></a><a name="elementdecl"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ELEMENT"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line193)"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
-<a name="(line194)"></a><a name="contentspec"></a>contentspec EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>
-<a name="(line195)"></a>contentspec ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>
-<a name="(line196)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m
-<a name="(line197)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c
-<a name="(line198)"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>
-<a name="(line199)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font>       <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> modifier m
-<a name="(line200)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line201)"></a>                           modifier m
-<a name="(line202)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font>          <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line203)"></a>                           modifier m
-<a name="(line204)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>
-<a name="(line205)"></a>modifier None          <font color=Red>=</font> empty
-<a name="(line206)"></a>modifier Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>
-<a name="(line207)"></a>modifier Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>
-<a name="(line208)"></a>modifier Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>
-<a name="(line209)"></a><a name="mixed"></a>mixed  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>
-<a name="(line210)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line211)"></a>                         hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line212)"></a>                         text <font color=Magenta>")*"</font>
-<a name="(line213)"></a>
-<a name="(line214)"></a><a name="attlistdecl"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ATTLIST"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line215)"></a>                                 fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
-<a name="(line216)"></a><a name="attdef"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>          <font color=Red>=</font> text n <font color=Cyan>&lt;+&gt;</font> atttype t <font color=Cyan>&lt;+&gt;</font> defaultdecl d
-<a name="(line217)"></a><a name="atttype"></a>atttype  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>
-<a name="(line218)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t
-<a name="(line219)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t
-<a name="(line220)"></a><a name="tokenizedtype"></a>tokenizedtype ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>
-<a name="(line221)"></a>tokenizedtype IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>
-<a name="(line222)"></a>tokenizedtype IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>
-<a name="(line223)"></a>tokenizedtype ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>
-<a name="(line224)"></a>tokenizedtype ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>
-<a name="(line225)"></a>tokenizedtype NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>
-<a name="(line226)"></a>tokenizedtype NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>
-<a name="(line227)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n
-<a name="(line228)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e
-<a name="(line229)"></a><a name="notationtype"></a>notationtype ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line230)"></a>                                 parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line231)"></a><a name="enumeration"></a>enumeration ns                 <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line232)"></a><a name="defaultdecl"></a>defaultdecl  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>
-<a name="(line233)"></a>defaultdecl  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>
-<a name="(line234)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font>    <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan>&lt;+&gt;</font> attvalue a
-<a name="(line235)"></a><a name="conditionalsect"></a>conditionalsect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Red>=</font> text <font color=Magenta>"&lt;![INCLUDE ["</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line236)"></a>                                 vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map extsubsetdecl i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>
-<a name="(line237)"></a>conditionalsect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![IGNORE ["</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line238)"></a>                                 fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ignoresectcontents i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>
-<a name="(line239)"></a><a name="ignore"></a>ignore <font color=Cyan>(</font>Ignore<font color=Cyan>)</font>                <font color=Red>=</font> empty
-<a name="(line240)"></a><a name="ignoresectcontents"></a>ignoresectcontents <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>
-<a name="(line241)"></a>                               <font color=Red>=</font> ignore i <font color=Cyan>&lt;+&gt;</font> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map internal is<font color=Cyan>)</font>
-<a name="(line242)"></a>                          <font color=Green><u>where</u></font> internal <font color=Cyan>(</font>ics<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![["</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line243)"></a>                                                   ignoresectcontents ics <font color=Cyan>&lt;+&gt;</font>
-<a name="(line244)"></a>                                                   text <font color=Magenta>"]]&gt;"</font> <font color=Cyan>&lt;+&gt;</font> ignore i
-<a name="(line245)"></a><a name="reference"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er
-<a name="(line246)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr
-<a name="(line247)"></a><a name="entityref"></a>entityref n                    <font color=Red>=</font> text <font color=Magenta>"&amp;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>
-<a name="(line248)"></a><a name="charref"></a>charref c                      <font color=Red>=</font> text <font color=Magenta>"&amp;#"</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>
-<a name="(line249)"></a><a name="entitydecl"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d
-<a name="(line250)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d
-<a name="(line251)"></a><a name="gedecl"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> entitydef ed <font color=Cyan>&lt;&gt;</font>
-<a name="(line252)"></a>                                 text <font color=Magenta>"&gt;"</font>
-<a name="(line253)"></a><a name="pedecl"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY %"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> pedef pd <font color=Cyan>&lt;&gt;</font>
-<a name="(line254)"></a>                                 text <font color=Magenta>"&gt;"</font>
-<a name="(line255)"></a><a name="entitydef"></a>entitydef <font color=Cyan>(</font>DefEntityValue ev<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ev
-<a name="(line256)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan>&lt;+&gt;</font> maybe ndatadecl nd
-<a name="(line257)"></a><a name="pedef"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ev
-<a name="(line258)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid
-<a name="(line259)"></a><a name="externalid"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font>         <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan>&lt;+&gt;</font> systemliteral sl
-<a name="(line260)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font>       <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral i <font color=Cyan>&lt;+&gt;</font>
-<a name="(line261)"></a>                                 systemliteral sl
-<a name="(line262)"></a><a name="ndatadecl"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan>&lt;+&gt;</font> text n
-<a name="(line263)"></a><a name="textdecl"></a>textdecl <font color=Cyan>(</font>TextDecl vi ed<font color=Cyan>)</font>      <font color=Red>=</font> text <font color=Magenta>"&lt;?xml"</font> <font color=Cyan>&lt;+&gt;</font> maybe text vi <font color=Cyan>&lt;+&gt;</font>
-<a name="(line264)"></a>                                 encodingdecl ed <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"?&gt;"</font>
-<a name="(line265)"></a><a name="extparsedent"></a>extparsedent <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font><font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font> content c
-<a name="(line266)"></a><a name="extpe"></a>extpe <font color=Cyan>(</font>ExtPE t esd<font color=Cyan>)</font>            <font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font>
-<a name="(line267)"></a>                                 vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map extsubsetdecl esd<font color=Cyan>)</font>
-<a name="(line268)"></a><a name="notationdecl"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>    <font color=Red>=</font> text <font color=Magenta>"&lt;!NOTATION"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line269)"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>
-<a name="(line270)"></a>                                 text <font color=Magenta>"&gt;"</font>
-<a name="(line271)"></a><a name="publicid"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>          <font color=Red>=</font> text <font color=Magenta>"PUBLICID"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral p
-<a name="(line272)"></a><a name="encodingdecl"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
-<a name="(line273)"></a><a name="nmtoken"></a>nmtoken s                      <font color=Red>=</font> text s
-<a name="(line274)"></a><a name="attvalue"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font>        <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line275)"></a>                                 hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line276)"></a>                                 text <font color=Magenta>"\""</font>
-<a name="(line277)"></a><a name="entityvalue"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>
-<a name="(line278)"></a>  <font color=Red>|</font> containsDoubleQuote evs    <font color=Red>=</font> text <font color=Magenta>"'"</font>  <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
-<a name="(line279)"></a>  <font color=Red>|</font> otherwise                  <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
-<a name="(line280)"></a><a name="ev"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s
-<a name="(line281)"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>
-<a name="(line282)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r
-<a name="(line283)"></a><a name="pubidliteral"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>
-<a name="(line284)"></a>    <font color=Red>|</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
-<a name="(line285)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
-<a name="(line286)"></a><a name="systemliteral"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>
-<a name="(line287)"></a>    <font color=Red>|</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
-<a name="(line288)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
-<a name="(line289)"></a><a name="chardata"></a>chardata s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s
-<a name="(line290)"></a><a name="cdsect"></a>cdsect c                       <font color=Red>=</font> text <font color=Magenta>"&lt;![CDATA["</font> <font color=Cyan>&lt;&gt;</font> chardata c <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"]]&gt;"</font>
-<a name="(line291)"></a>
-<a name="(line292)"></a><a name="toWord8"></a><font color=Blue>--toWord8 :: Char -&gt; Word8</font>
-<a name="(line293)"></a>toWord8 <font color=Red>=</font> toEnum <font color=Cyan>.</font> fromEnum
-<a name="(line294)"></a>
-<a name="(line295)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>
-<a name="(line296)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs
-<a name="(line297)"></a>    <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font>
-<a name="(line298)"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False
+<a name="(line192)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>             <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;&gt;</font> attvalue v
+<a name="(line193)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e
+<a name="(line194)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s
+<a name="(line195)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> cdsect s
+<a name="(line196)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r
+<a name="(line197)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m
+<a name="(line198)"></a>
+<a name="(line199)"></a><a name="elementdecl"></a>elementdecl <font color=Red>::</font> ElementDecl <font color=Red>-&gt;</font> ByteString
+<a name="(line200)"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ELEMENT"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line201)"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="(line202)"></a><a name="contentspec"></a>contentspec <font color=Red>::</font> ContentSpec <font color=Red>-&gt;</font> ByteString
+<a name="(line203)"></a>contentspec EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>
+<a name="(line204)"></a>contentspec ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>
+<a name="(line205)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m
+<a name="(line206)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c
+<a name="(line207)"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>
+<a name="(line208)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font>       <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> modifier m
+<a name="(line209)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line210)"></a>                           modifier m
+<a name="(line211)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font>          <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line212)"></a>                           modifier m
+<a name="(line213)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>
+<a name="(line214)"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-&gt;</font> ByteString
+<a name="(line215)"></a>modifier None          <font color=Red>=</font> empty
+<a name="(line216)"></a>modifier Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>
+<a name="(line217)"></a>modifier Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>
+<a name="(line218)"></a>modifier Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>
+<a name="(line219)"></a><a name="mixed"></a>mixed <font color=Red>::</font> Mixed <font color=Red>-&gt;</font> ByteString
+<a name="(line220)"></a>mixed  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>
+<a name="(line221)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line222)"></a>                         hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line223)"></a>                         text <font color=Magenta>")*"</font>
+<a name="(line224)"></a>
+<a name="(line225)"></a><a name="attlistdecl"></a>attlistdecl <font color=Red>::</font> AttListDecl <font color=Red>-&gt;</font> ByteString
+<a name="(line226)"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ATTLIST"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line227)"></a>                                 fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="(line228)"></a><a name="attdef"></a>attdef <font color=Red>::</font> AttDef <font color=Red>-&gt;</font> ByteString
+<a name="(line229)"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>          <font color=Red>=</font> text n <font color=Cyan>&lt;+&gt;</font> atttype t <font color=Cyan>&lt;+&gt;</font> defaultdecl d
+<a name="(line230)"></a><a name="atttype"></a>atttype <font color=Red>::</font> AttType <font color=Red>-&gt;</font> ByteString
+<a name="(line231)"></a>atttype  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>
+<a name="(line232)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t
+<a name="(line233)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t
+<a name="(line234)"></a><a name="tokenizedtype"></a>tokenizedtype <font color=Red>::</font> TokenizedType <font color=Red>-&gt;</font> ByteString
+<a name="(line235)"></a>tokenizedtype ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>
+<a name="(line236)"></a>tokenizedtype IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>
+<a name="(line237)"></a>tokenizedtype IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>
+<a name="(line238)"></a>tokenizedtype ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>
+<a name="(line239)"></a>tokenizedtype ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>
+<a name="(line240)"></a>tokenizedtype NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>
+<a name="(line241)"></a>tokenizedtype NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>
+<a name="(line242)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Red>::</font> EnumeratedType <font color=Red>-&gt;</font> ByteString
+<a name="(line243)"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n
+<a name="(line244)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e
+<a name="(line245)"></a><a name="notationtype"></a>notationtype <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> ByteString
+<a name="(line246)"></a>notationtype ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line247)"></a>                                 parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line248)"></a><a name="enumeration"></a>enumeration <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> ByteString
+<a name="(line249)"></a>enumeration ns                 <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line250)"></a><a name="defaultdecl"></a>defaultdecl <font color=Red>::</font> DefaultDecl <font color=Red>-&gt;</font> ByteString
+<a name="(line251)"></a>defaultdecl  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>
+<a name="(line252)"></a>defaultdecl  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>
+<a name="(line253)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font>    <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan>&lt;+&gt;</font> attvalue a
+<a name="(line254)"></a><a name="reference"></a><font color=Blue>--_ (IncludeSect i)= text "&lt;![INCLUDE [" &lt;+&gt;</font>
+<a name="(line255)"></a><font color=Blue>--                                 vcat (Prelude.map extsubsetdecl i) &lt;+&gt; text "]]&gt;"</font>
+<a name="(line256)"></a><font color=Blue>-- conditionalsect (IgnoreSect i) = text "&lt;![IGNORE [" &lt;+&gt;</font>
+<a name="(line257)"></a><font color=Blue>--                                  fsep (Prelude.map ignoresectcontents i) &lt;+&gt; text "]]&gt;"</font>
+<a name="(line258)"></a><font color=Blue>-- -- _ (Ignore)                = empty</font>
+<a name="(line259)"></a><font color=Blue>-- ignoresectcontents :: IgnoreSectContents -&gt; ByteString</font>
+<a name="(line260)"></a><font color=Blue>-- _ (IgnoreSectContents i is)</font>
+<a name="(line261)"></a><font color=Blue>--                                = ignore i &lt;+&gt; vcat (Prelude.map internal is)</font>
+<a name="(line262)"></a><font color=Blue>--                           where internal (ics,i) = text "&lt;![[" &lt;+&gt;</font>
+<a name="(line263)"></a><font color=Blue>--                                                    ignoresectcontents ics &lt;+&gt;</font>
+<a name="(line264)"></a><font color=Blue>--                                                    text "]]&gt;" &lt;+&gt; ignore i</font>
+<a name="(line265)"></a>reference <font color=Red>::</font> Reference <font color=Red>-&gt;</font> ByteString
+<a name="(line266)"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er
+<a name="(line267)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr
+<a name="(line268)"></a><a name="entityref"></a>entityref <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString
+<a name="(line269)"></a>entityref n                    <font color=Red>=</font> text <font color=Magenta>"&amp;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>
+<a name="(line270)"></a><a name="charref"></a>charref <font color=Red>::</font> <font color=Cyan>(</font>Show a<font color=Cyan>)</font> <font color=Red>=&gt;</font> a <font color=Red>-&gt;</font> ByteString
+<a name="(line271)"></a>charref c                      <font color=Red>=</font> text <font color=Magenta>"&amp;#"</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>
+<a name="(line272)"></a><a name="entitydecl"></a>entitydecl <font color=Red>::</font> EntityDecl <font color=Red>-&gt;</font> ByteString
+<a name="(line273)"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d
+<a name="(line274)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d
+<a name="(line275)"></a><a name="gedecl"></a>gedecl <font color=Red>::</font> GEDecl <font color=Red>-&gt;</font> ByteString
+<a name="(line276)"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> entitydef ed <font color=Cyan>&lt;&gt;</font>
+<a name="(line277)"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="(line278)"></a><a name="pedecl"></a>pedecl <font color=Red>::</font> PEDecl <font color=Red>-&gt;</font> ByteString
+<a name="(line279)"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY %"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> pedef pd <font color=Cyan>&lt;&gt;</font>
+<a name="(line280)"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="(line281)"></a><a name="entitydef"></a>entitydef <font color=Red>::</font> EntityDef <font color=Red>-&gt;</font> ByteString
+<a name="(line282)"></a>entitydef <font color=Cyan>(</font>DefEntityValue ew<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ew
+<a name="(line283)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan>&lt;+&gt;</font> maybe ndatadecl nd
+<a name="(line284)"></a><a name="pedef"></a>pedef <font color=Red>::</font> PEDef <font color=Red>-&gt;</font> ByteString
+<a name="(line285)"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ew<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ew
+<a name="(line286)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid
+<a name="(line287)"></a><a name="externalid"></a>externalid <font color=Red>::</font> ExternalID <font color=Red>-&gt;</font> ByteString
+<a name="(line288)"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font>         <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan>&lt;+&gt;</font> systemliteral sl
+<a name="(line289)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font>       <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral i <font color=Cyan>&lt;+&gt;</font>
+<a name="(line290)"></a>                                 systemliteral sl
+<a name="(line291)"></a><a name="ndatadecl"></a>ndatadecl <font color=Red>::</font> NDataDecl <font color=Red>-&gt;</font> ByteString
+<a name="(line292)"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan>&lt;+&gt;</font> text n
+<a name="(line293)"></a><a name="notationdecl"></a><font color=Blue>-- _ (TextDecl vi ed)      = text "&lt;?xml" &lt;+&gt; maybe text vi &lt;+&gt;</font>
+<a name="(line294)"></a><font color=Blue>--                                  encodingdecl ed &lt;&gt; text "?&gt;"</font>
+<a name="(line295)"></a><font color=Blue>-- extparsedent :: ExtParsedEnt t -&gt; ByteString</font>
+<a name="(line296)"></a><font color=Blue>-- _ (ExtParsedEnt t c)= maybe textdecl t &lt;+&gt; content c</font>
+<a name="(line297)"></a><font color=Blue>-- _ (ExtPE t esd)            = maybe textdecl t &lt;+&gt;</font>
+<a name="(line298)"></a><font color=Blue>--                                  vcat (Prelude.map extsubsetdecl esd)</font>
+<a name="(line299)"></a>notationdecl <font color=Red>::</font> NotationDecl <font color=Red>-&gt;</font> ByteString
+<a name="(line300)"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>    <font color=Red>=</font> text <font color=Magenta>"&lt;!NOTATION"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line301)"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>
+<a name="(line302)"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="(line303)"></a><a name="publicid"></a>publicid <font color=Red>::</font> PublicID <font color=Red>-&gt;</font> ByteString
+<a name="(line304)"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>          <font color=Red>=</font> text <font color=Magenta>"PUBLICID"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral p
+<a name="(line305)"></a><a name="encodingdecl"></a>encodingdecl <font color=Red>::</font> EncodingDecl <font color=Red>-&gt;</font> ByteString
+<a name="(line306)"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
+<a name="(line307)"></a><a name="nmtoken"></a>nmtoken <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString
+<a name="(line308)"></a>nmtoken s                      <font color=Red>=</font> text s
+<a name="(line309)"></a><a name="attvalue"></a>attvalue <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> ByteString
+<a name="(line310)"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font>        <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line311)"></a>                                 hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line312)"></a>                                 text <font color=Magenta>"\""</font>
+<a name="(line313)"></a><a name="entityvalue"></a>entityvalue <font color=Red>::</font> EntityValue <font color=Red>-&gt;</font> ByteString
+<a name="(line314)"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>
+<a name="(line315)"></a>  <font color=Red>|</font> containsDoubleQuote evs    <font color=Red>=</font> text <font color=Magenta>"'"</font>  <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
+<a name="(line316)"></a>  <font color=Red>|</font> otherwise                  <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
+<a name="(line317)"></a><a name="ev"></a>ev <font color=Red>::</font> EV <font color=Red>-&gt;</font> ByteString
+<a name="(line318)"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s
+<a name="(line319)"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>
+<a name="(line320)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r
+<a name="(line321)"></a><a name="pubidliteral"></a>pubidliteral <font color=Red>::</font> PubidLiteral <font color=Red>-&gt;</font> ByteString
+<a name="(line322)"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>
+<a name="(line323)"></a>    <font color=Red>|</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
+<a name="(line324)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
+<a name="(line325)"></a><a name="systemliteral"></a>systemliteral <font color=Red>::</font> SystemLiteral <font color=Red>-&gt;</font> ByteString
+<a name="(line326)"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>
+<a name="(line327)"></a>    <font color=Red>|</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
+<a name="(line328)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
+<a name="(line329)"></a><a name="chardata"></a>chardata<font color=Cyan>,</font> cdsect <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString
+<a name="(line330)"></a>chardata s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s
+<a name="(line331)"></a><a name="cdsect"></a>cdsect c                       <font color=Red>=</font> text <font color=Magenta>"&lt;![CDATA["</font> <font color=Cyan>&lt;&gt;</font> chardata c <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"]]&gt;"</font>
+<a name="(line332)"></a>
+<a name="(line333)"></a><a name="toWord8"></a><font color=Blue>-- toWord8 :: Char -&gt; Word8</font>
+<a name="(line334)"></a>toWord8 <font color=Red>::</font> <font color=Cyan>(</font>Enum a<font color=Cyan>,</font> Enum a1<font color=Cyan>)</font> <font color=Red>=&gt;</font> a1 <font color=Red>-&gt;</font> a
+<a name="(line335)"></a>toWord8 <font color=Red>=</font> toEnum <font color=Cyan>.</font> fromEnum
+<a name="(line336)"></a>
+<a name="(line337)"></a><a name="containsDoubleQuote"></a>containsDoubleQuote <font color=Red>::</font> <font color=Red>[</font>EV<font color=Red>]</font> <font color=Red>-&gt;</font> Bool
+<a name="(line338)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs
+<a name="(line339)"></a>    <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font>
+<a name="(line340)"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False
 </pre>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/Convert.html b/docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/Convert.html
--- a/docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/Convert.html
+++ b/docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/Convert.html
@@ -15,7 +15,7 @@
 <a name="(line13)"></a>
 <a name="(line14)"></a><a name="Record"></a><font color=Blue>---- Internal representation for database of DTD decls ----</font>
 <a name="(line15)"></a><a name="Record"></a><font color=Green><u>data</u></font> Record <font color=Red>=</font> R <font color=Red>[</font>AttDef<font color=Red>]</font> ContentSpec
-<a name="(line16)"></a><a name="Db"></a><font color=Green><u>type</u></font> Db <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font>Record<font color=Cyan>)</font><font color=Red>]</font>
+<a name="(line16)"></a><font color=Blue>-- type Db = [(String,Record)]</font>
 <a name="(line17)"></a>
 <a name="(line18)"></a>
 <a name="(line19)"></a><a name="dtd2TypeDef"></a><font color=Blue>---- Build a database of DTD decls then convert them to typedefs ----</font>
@@ -23,7 +23,7 @@
 <a name="(line21)"></a><font color=Blue>---- Apparently multiple ATTLIST decls for the same element are permitted,</font>
 <a name="(line22)"></a><font color=Blue>---- although only one ELEMENT decl for it is allowed.</font>
 <a name="(line23)"></a>dtd2TypeDef <font color=Red>::</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>TypeDef<font color=Red>]</font>
-<a name="(line24)"></a>dtd2TypeDef mds <font color=Red>=</font> 
+<a name="(line24)"></a>dtd2TypeDef mds <font color=Red>=</font>
 <a name="(line25)"></a>  <font color=Cyan>(</font>concatMap convert <font color=Cyan>.</font> reverse <font color=Cyan>.</font> database []<font color=Cyan>)</font> mds
 <a name="(line26)"></a>  <font color=Green><u>where</u></font>
 <a name="(line27)"></a>  database db [] <font color=Red>=</font> db
@@ -40,7 +40,7 @@
 <a name="(line38)"></a>    <font color=Blue>--  (MarkupPE _ m') -&gt; database db (m':ms)</font>
 <a name="(line39)"></a>        <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> database db ms
 <a name="(line40)"></a>
-<a name="(line41)"></a>  replace n v [] <font color=Red>=</font> error <font color=Magenta>"dtd2TypeDef.replace: no element to replace"</font>
+<a name="(line41)"></a>  replace <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> [] <font color=Red>=</font> error <font color=Magenta>"dtd2TypeDef.replace: no element to replace"</font>
 <a name="(line42)"></a>  replace n v <font color=Cyan>(</font>x<font color=Red>@</font><font color=Cyan>(</font>n0<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Red><b>:</b></font>db<font color=Cyan>)</font>
 <a name="(line43)"></a>      <font color=Red>|</font> n<font color=Cyan>==</font>n0     <font color=Red>=</font> <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font><font color=Red><b>:</b></font> db
 <a name="(line44)"></a>      <font color=Red>|</font> otherwise <font color=Red>=</font> x<font color=Red><b>:</b></font> replace n v db
@@ -88,8 +88,8 @@
 <a name="(line86)"></a>mkData <font color=Red>[</font>ts<font color=Red>]</font> fs aux n  <font color=Red>=</font> <font color=Red>[</font>DataDef aux n fs <font color=Red>[</font><font color=Cyan>(</font>n<font color=Cyan>,</font> ts<font color=Cyan>)</font><font color=Red>]</font><font color=Red>]</font>
 <a name="(line87)"></a>mkData tss  fs aux n  <font color=Red>=</font> <font color=Red>[</font>DataDef aux n fs <font color=Cyan>(</font>map <font color=Cyan>(</font>mkConstr n<font color=Cyan>)</font> tss<font color=Cyan>)</font><font color=Red>]</font>
 <a name="(line88)"></a>  <font color=Green><u>where</u></font>
-<a name="(line89)"></a>    mkConstr n ts <font color=Red>=</font> <font color=Cyan>(</font>mkConsName n ts<font color=Cyan>,</font> ts<font color=Cyan>)</font>
-<a name="(line90)"></a>    mkConsName <font color=Cyan>(</font>Name x n<font color=Cyan>)</font> sts <font color=Red>=</font> Name x <font color=Cyan>(</font>n<font color=Cyan>++</font>concat <font color=Cyan>(</font>intersperse <font color=Magenta>"_"</font> <font color=Cyan>(</font>map flatten sts<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line89)"></a>    mkConstr m ts <font color=Red>=</font> <font color=Cyan>(</font>mkConsName m ts<font color=Cyan>,</font> ts<font color=Cyan>)</font>
+<a name="(line90)"></a>    mkConsName <font color=Cyan>(</font>Name x m<font color=Cyan>)</font> sts <font color=Red>=</font> Name x <font color=Cyan>(</font>m<font color=Cyan>++</font>concat <font color=Cyan>(</font>intersperse <font color=Magenta>"_"</font> <font color=Cyan>(</font>map flatten sts<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
 <a name="(line91)"></a>    flatten <font color=Cyan>(</font>Maybe st<font color=Cyan>)</font>   <font color=Red>=</font> <font color=Blue>{-"Maybe_" ++ -}</font> flatten st
 <a name="(line92)"></a>    flatten <font color=Cyan>(</font>List st<font color=Cyan>)</font>    <font color=Red>=</font> <font color=Blue>{-"List_" ++ -}</font> flatten st
 <a name="(line93)"></a>    flatten <font color=Cyan>(</font>List1 st<font color=Cyan>)</font>   <font color=Red>=</font> <font color=Blue>{-"List1_" ++ -}</font> flatten st
@@ -99,32 +99,33 @@
 <a name="(line97)"></a>    flatten <font color=Cyan>(</font>OneOf sts<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Blue>{-"OneOf" ++ show (length sts) ++ "_" ++ -}</font>
 <a name="(line98)"></a>                            concat <font color=Cyan>(</font>intersperse <font color=Magenta>"_"</font> <font color=Cyan>(</font>map flatten sts<font color=Cyan>)</font><font color=Cyan>)</font>
 <a name="(line99)"></a>    flatten Any          <font color=Red>=</font> <font color=Magenta>"Any"</font>
-<a name="(line100)"></a>    flatten <font color=Cyan>(</font>Defined <font color=Cyan>(</font>Name <font color=Green><u>_</u></font> n<font color=Cyan>)</font><font color=Cyan>)</font>  <font color=Red>=</font> n
+<a name="(line100)"></a>    flatten <font color=Cyan>(</font>Defined <font color=Cyan>(</font>Name <font color=Green><u>_</u></font> m<font color=Cyan>)</font><font color=Cyan>)</font>  <font color=Red>=</font> m
 <a name="(line101)"></a>
-<a name="(line102)"></a><a name="mkAttrDef"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n StringType def<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line103)"></a>    []
-<a name="(line104)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font> def<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line105)"></a>    [] <font color=Blue>-- mkData [[String]] [] False (name n)</font>
-<a name="(line106)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>EnumeratedType <font color=Cyan>(</font>NotationType nt<font color=Cyan>)</font><font color=Cyan>)</font> def<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line107)"></a>    <font color=Red>[</font>EnumDef <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font> <font color=Cyan>(</font>map <font color=Cyan>(</font>name_ac e n<font color=Cyan>)</font> nt<font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line108)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>EnumeratedType <font color=Cyan>(</font>Enumeration es<font color=Cyan>)</font><font color=Cyan>)</font> def<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line109)"></a>    <font color=Red>[</font>EnumDef <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font> <font color=Cyan>(</font>map <font color=Cyan>(</font>name_ac e n<font color=Cyan>)</font> es<font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line110)"></a>        <font color=Blue>-- Default attribute values not handled here</font>
-<a name="(line111)"></a>
-<a name="(line112)"></a><a name="mkAttrField"></a>mkAttrField <font color=Red>::</font> String <font color=Red>-&gt;</font> AttDef <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font>
-<a name="(line113)"></a>mkAttrField e <font color=Cyan>(</font>AttDef n typ req<font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font>name_f e n<font color=Cyan>,</font> mkType typ req<font color=Cyan>)</font>
-<a name="(line114)"></a>  <font color=Green><u>where</u></font>
-<a name="(line115)"></a>    mkType StringType REQUIRED <font color=Red>=</font> String
-<a name="(line116)"></a>    mkType StringType IMPLIED  <font color=Red>=</font> Maybe String
-<a name="(line117)"></a>    mkType StringType <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> f<font color=Cyan>)</font> <font color=Red>=</font> Defaultable String <font color=Cyan>(</font>show v<font color=Cyan>)</font>
-<a name="(line118)"></a>    mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> REQUIRED  <font color=Red>=</font> String
-<a name="(line119)"></a>    mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> IMPLIED   <font color=Red>=</font> Maybe String
-<a name="(line120)"></a>    mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> f<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line121)"></a>							Defaultable String <font color=Cyan>(</font>show v<font color=Cyan>)</font>
-<a name="(line122)"></a>    mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> REQUIRED <font color=Red>=</font> Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font>
-<a name="(line123)"></a>    mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> IMPLIED  <font color=Red>=</font> Maybe <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line124)"></a>    mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> f<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line125)"></a>		Defaultable <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>hName <font color=Cyan>(</font>name_ac e n <font color=Cyan>(</font>show v<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line126)"></a>
+<a name="(line102)"></a><a name="mkAttrDef"></a>mkAttrDef <font color=Red>::</font> String <font color=Red>-&gt;</font> AttDef <font color=Red>-&gt;</font> <font color=Red>[</font>TypeDef<font color=Red>]</font>
+<a name="(line103)"></a>mkAttrDef <font color=Green><u>_</u></font> <font color=Cyan>(</font>AttDef <font color=Green><u>_</u></font> StringType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line104)"></a>    []
+<a name="(line105)"></a>mkAttrDef <font color=Green><u>_</u></font> <font color=Cyan>(</font>AttDef <font color=Green><u>_</u></font> <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line106)"></a>    [] <font color=Blue>-- mkData [[String]] [] False (name n)</font>
+<a name="(line107)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>EnumeratedType <font color=Cyan>(</font>NotationType nt<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line108)"></a>    <font color=Red>[</font>EnumDef <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font> <font color=Cyan>(</font>map <font color=Cyan>(</font>name_ac e n<font color=Cyan>)</font> nt<font color=Cyan>)</font><font color=Red>]</font>
+<a name="(line109)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>EnumeratedType <font color=Cyan>(</font>Enumeration es<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line110)"></a>    <font color=Red>[</font>EnumDef <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font> <font color=Cyan>(</font>map <font color=Cyan>(</font>name_ac e n<font color=Cyan>)</font> es<font color=Cyan>)</font><font color=Red>]</font>
+<a name="(line111)"></a>        <font color=Blue>-- Default attribute values not handled here</font>
+<a name="(line112)"></a>
+<a name="(line113)"></a><a name="mkAttrField"></a>mkAttrField <font color=Red>::</font> String <font color=Red>-&gt;</font> AttDef <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font>
+<a name="(line114)"></a>mkAttrField e <font color=Cyan>(</font>AttDef n typ req<font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font>name_f e n<font color=Cyan>,</font> mkType typ req<font color=Cyan>)</font>
+<a name="(line115)"></a>  <font color=Green><u>where</u></font>
+<a name="(line116)"></a>    mkType StringType REQUIRED <font color=Red>=</font> String
+<a name="(line117)"></a>    mkType StringType IMPLIED  <font color=Red>=</font> Maybe String
+<a name="(line118)"></a>    mkType StringType <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> Defaultable String <font color=Cyan>(</font>show v<font color=Cyan>)</font>
+<a name="(line119)"></a>    mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> REQUIRED  <font color=Red>=</font> String
+<a name="(line120)"></a>    mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> IMPLIED   <font color=Red>=</font> Maybe String
+<a name="(line121)"></a>    mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line122)"></a>                                                        Defaultable String <font color=Cyan>(</font>show v<font color=Cyan>)</font>
+<a name="(line123)"></a>    mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> REQUIRED <font color=Red>=</font> Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font>
+<a name="(line124)"></a>    mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> IMPLIED  <font color=Red>=</font> Maybe <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line125)"></a>    mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line126)"></a>                Defaultable <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>hName <font color=Cyan>(</font>name_ac e n <font color=Cyan>(</font>show v<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line127)"></a>
 </pre>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/Instance.html b/docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/Instance.html
--- a/docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/Instance.html
+++ b/docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/Instance.html
@@ -14,8 +14,8 @@
 <a name="(line12)"></a>mkInstance <font color=Red>::</font> TypeDef <font color=Red>-&gt;</font> Doc
 <a name="(line13)"></a>
 <a name="(line14)"></a><font color=Blue>-- no constructors - represents an element with empty content but attributes.</font>
-<a name="(line15)"></a>mkInstance <font color=Cyan>(</font>DataDef aux n fs []<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line16)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font>frpat<font color=Cyan>,</font> frattr<font color=Cyan>,</font> topat<font color=Cyan>,</font> toattr<font color=Cyan>)</font> <font color=Red>=</font> attrpats fs
+<a name="(line15)"></a>mkInstance <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n fs []<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line16)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> frattr<font color=Cyan>,</font> topat<font color=Cyan>,</font> toattr<font color=Cyan>)</font> <font color=Red>=</font> attrpats fs
 <a name="(line17)"></a>        frretval <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> ppHName n <font color=Green><u>else</u></font> frattr
 <a name="(line18)"></a>        topatval <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> ppHName n <font color=Green><u>else</u></font> topat
 <a name="(line19)"></a>    <font color=Green><u>in</u></font>
@@ -83,9 +83,9 @@
 <a name="(line81)"></a>
 <a name="(line82)"></a><font color=Blue>-- multiple constructors (real)</font>
 <a name="(line83)"></a>mkInstance <font color=Cyan>(</font>DataDef False n fs cs<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line84)"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply cs
+<a name="(line84)"></a>    <font color=Green><u>let</u></font> <font color=Green><u>_</u></font> <font color=Red>=</font> nameSupply cs
 <a name="(line85)"></a>        <font color=Cyan>(</font>frpat<font color=Cyan>,</font> frattr<font color=Cyan>,</font> topat<font color=Cyan>,</font> toattr<font color=Cyan>)</font> <font color=Red>=</font> attrpats fs
-<a name="(line86)"></a>        mixattrs <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> False <font color=Green><u>else</u></font> True
+<a name="(line86)"></a>        <font color=Green><u>_</u></font> <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> False <font color=Green><u>else</u></font> True
 <a name="(line87)"></a>    <font color=Green><u>in</u></font>
 <a name="(line88)"></a>    text <font color=Magenta>"instance HTypeable"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"where"</font> <font color=Cyan>$$</font>
 <a name="(line89)"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"toHType x = Defined \""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\" [] []"</font> <font color=Cyan>)</font>
@@ -110,8 +110,8 @@
 <a name="(line108)"></a>
 <a name="(line109)"></a><font color=Blue>-- multiple constructors (auxiliary)</font>
 <a name="(line110)"></a>mkInstance <font color=Cyan>(</font>DataDef True n fs cs<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line111)"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply cs
-<a name="(line112)"></a>        <font color=Cyan>(</font>frpat<font color=Cyan>,</font> frattr<font color=Cyan>,</font> topat<font color=Cyan>,</font> toattr<font color=Cyan>)</font> <font color=Red>=</font> attrpats fs
+<a name="(line111)"></a>    <font color=Green><u>let</u></font> <font color=Green><u>_</u></font> <font color=Red>=</font> nameSupply cs
+<a name="(line112)"></a>        <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> frattr<font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> attrpats fs
 <a name="(line113)"></a>        mixattrs <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> False <font color=Green><u>else</u></font> True
 <a name="(line114)"></a>    <font color=Green><u>in</u></font>
 <a name="(line115)"></a>    text <font color=Magenta>"instance HTypeable"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"where"</font> <font color=Cyan>$$</font>
@@ -145,7 +145,7 @@
 <a name="(line143)"></a><a name="SameName"></a><font color=Green><u>data</u></font> SameName <font color=Red>=</font> Same <font color=Red>|</font> Extended
 <a name="(line144)"></a>
 <a name="(line145)"></a><a name="mkInstanceAttrs"></a>mkInstanceAttrs        <font color=Red>::</font> SameName <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> AttrFields <font color=Red>-&gt;</font> Doc
-<a name="(line146)"></a>mkInstanceAttrs s n []  <font color=Red>=</font> empty
+<a name="(line146)"></a>mkInstanceAttrs <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> []  <font color=Red>=</font> empty
 <a name="(line147)"></a>mkInstanceAttrs s n fs  <font color=Red>=</font>
 <a name="(line148)"></a>    <font color=Green><u>let</u></font> ppName <font color=Red>=</font> <font color=Green><u>case</u></font> s <font color=Green><u>of</u></font> <font color=Cyan>{</font> Same<font color=Red>-&gt;</font> ppHName<font color=Cyan>;</font>  Extended<font color=Red>-&gt;</font> ppAName<font color=Cyan>;</font> <font color=Cyan>}</font>
 <a name="(line149)"></a>    <font color=Green><u>in</u></font>
@@ -172,46 +172,46 @@
 <a name="(line170)"></a>
 <a name="(line171)"></a>
 <a name="(line172)"></a>
-<a name="(line173)"></a><a name="mkFrElem"></a>mkFrElem <font color=Red>::</font> Name <font color=Red>-&gt;</font> <font color=Red>[</font>StructType<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> Doc
-<a name="(line174)"></a>mkFrElem n sts vs inner <font color=Red>=</font>
-<a name="(line175)"></a>    foldr <font color=Cyan>(</font>frElem n<font color=Cyan>)</font> inner <font color=Cyan>(</font>zip3 sts vs cvs<font color=Cyan>)</font>
-<a name="(line176)"></a>  <font color=Green><u>where</u></font>
-<a name="(line177)"></a>    cvs <font color=Red>=</font> <font color=Green><u>let</u></font> ns <font color=Red>=</font> nameSupply2 vs
-<a name="(line178)"></a>          <font color=Green><u>in</u></font> zip ns <font color=Cyan>(</font>text <font color=Magenta>"c0"</font><font color=Red><b>:</b></font> init ns<font color=Cyan>)</font>
-<a name="(line179)"></a>    frElem n <font color=Cyan>(</font>st<font color=Cyan>,</font>v<font color=Cyan>,</font><font color=Cyan>(</font>cvi<font color=Cyan>,</font>cvo<font color=Cyan>)</font><font color=Cyan>)</font> inner <font color=Red>=</font>
-<a name="(line180)"></a>        parens <font color=Cyan>(</font>text <font color=Magenta>"\\"</font> <font color=Cyan>&lt;&gt;</font> parens <font color=Cyan>(</font>v<font color=Cyan>&lt;&gt;</font>comma<font color=Cyan>&lt;&gt;</font>cvi<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"-&gt;"</font> <font color=Cyan>$$</font>
-<a name="(line181)"></a>                nest <font color=Magenta>2</font> inner<font color=Cyan>)</font> <font color=Cyan>$$</font>
-<a name="(line182)"></a>        parens <font color=Cyan>(</font>
-<a name="(line183)"></a>          <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
-<a name="(line184)"></a>            <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"fromText"</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line185)"></a>            <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line186)"></a>            <font color=Cyan>(</font>List String<font color=Cyan>)</font>   <font color=Red>-&gt;</font> text <font color=Magenta>"many fromText"</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line187)"></a>            <font color=Cyan>(</font>List s<font color=Cyan>)</font>        <font color=Red>-&gt;</font> text <font color=Magenta>"many fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line188)"></a>            <font color=Cyan>(</font>List1 s<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"definite fromElem"</font>
-<a name="(line189)"></a>                               <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show s<font color=Cyan>)</font><font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"+\""</font>
-<a name="(line190)"></a>                               <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
-<a name="(line191)"></a>                               <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line192)"></a>            <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"definite fromElem"</font>
-<a name="(line193)"></a>                           <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\"("</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font>
-<a name="(line194)"></a>                                                           <font color=Cyan>(</font>map <font color=Cyan>(</font>text<font color=Cyan>.</font>show<font color=Cyan>)</font> ss<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line195)"></a>                                          <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>")\""</font>
-<a name="(line196)"></a>                           <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
-<a name="(line197)"></a>                           <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line198)"></a>            <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"definite fromElem"</font>
-<a name="(line199)"></a>                           <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\"OneOf\""</font>
-<a name="(line200)"></a>                           <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
-<a name="(line201)"></a>                           <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line202)"></a>            <font color=Cyan>(</font>String<font color=Cyan>)</font>    <font color=Red>-&gt;</font> text <font color=Magenta>"definite fromText"</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\"text\" \""</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line203)"></a>                                                 ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line204)"></a>            <font color=Cyan>(</font>Any<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"definite fromElem"</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\"ANY\" \""</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line205)"></a>                                                 ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line206)"></a>            <font color=Cyan>(</font>Defined m<font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"definite fromElem"</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line207)"></a>				 text <font color=Magenta>"\"&lt;"</font> <font color=Cyan>&lt;&gt;</font> ppXName m <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;\" \""</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line208)"></a>                                                 ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line209)"></a>            <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"nyi_fromElem_Defaultable"</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line210)"></a>          <font color=Cyan>)</font>
+<a name="(line173)"></a><font color=Blue>-- mkFrElem :: Name -&gt; [StructType] -&gt; [Doc] -&gt; Doc -&gt; Doc</font>
+<a name="(line174)"></a><font color=Blue>-- mkFrElem n sts vs inner =</font>
+<a name="(line175)"></a><font color=Blue>--     foldr (frElem n) inner (zip3 sts vs cvs)</font>
+<a name="(line176)"></a><font color=Blue>--   where</font>
+<a name="(line177)"></a><font color=Blue>--     cvs = let ns = nameSupply2 vs</font>
+<a name="(line178)"></a><font color=Blue>--           in zip ns (text "c0": init ns)</font>
+<a name="(line179)"></a><font color=Blue>--     frElem _ (st,v,(cvi,cvo)) inner =</font>
+<a name="(line180)"></a><font color=Blue>--         parens (text "\\" &lt;&gt; parens (v&lt;&gt;comma&lt;&gt;cvi) &lt;&gt; text "-&gt;" $$</font>
+<a name="(line181)"></a><font color=Blue>--                 nest 2 inner) $$</font>
+<a name="(line182)"></a><font color=Blue>--         parens (</font>
+<a name="(line183)"></a><font color=Blue>--           case st of</font>
+<a name="(line184)"></a><font color=Blue>--             (Maybe String)  -&gt; text "fromText" &lt;+&gt; cvo</font>
+<a name="(line185)"></a><font color=Blue>--             (Maybe _)       -&gt; text "fromElem" &lt;+&gt; cvo</font>
+<a name="(line186)"></a><font color=Blue>--             (List String)   -&gt; text "many fromText" &lt;+&gt; cvo</font>
+<a name="(line187)"></a><font color=Blue>--             (List _)        -&gt; text "many fromElem" &lt;+&gt; cvo</font>
+<a name="(line188)"></a><font color=Blue>--             (List1 s)       -&gt; text "definite fromElem"</font>
+<a name="(line189)"></a><font color=Blue>--                                &lt;+&gt; text "\"" &lt;&gt; text (show s)&lt;&gt; text "+\""</font>
+<a name="(line190)"></a><font color=Blue>--                                &lt;+&gt; text "\"" &lt;&gt; ppXName n &lt;&gt; text "\""</font>
+<a name="(line191)"></a><font color=Blue>--                                &lt;+&gt; cvo</font>
+<a name="(line192)"></a><font color=Blue>--             (Tuple ss)  -&gt; text "definite fromElem"</font>
+<a name="(line193)"></a><font color=Blue>--                            &lt;+&gt; text "\"(" &lt;&gt; hcat (intersperse (text ",")</font>
+<a name="(line194)"></a><font color=Blue>--                                                            (map (text.show) ss))</font>
+<a name="(line195)"></a><font color=Blue>--                                           &lt;&gt; text ")\""</font>
+<a name="(line196)"></a><font color=Blue>--                            &lt;+&gt; text "\"" &lt;&gt; ppXName n &lt;&gt; text "\""</font>
+<a name="(line197)"></a><font color=Blue>--                            &lt;+&gt; cvo</font>
+<a name="(line198)"></a><font color=Blue>--             (OneOf _)  -&gt; text "definite fromElem"</font>
+<a name="(line199)"></a><font color=Blue>--                            &lt;+&gt; text "\"OneOf\""</font>
+<a name="(line200)"></a><font color=Blue>--                            &lt;+&gt; text "\"" &lt;&gt; ppXName n &lt;&gt; text "\""</font>
+<a name="(line201)"></a><font color=Blue>--                            &lt;+&gt; cvo</font>
+<a name="(line202)"></a><font color=Blue>--             (String)    -&gt; text "definite fromText" &lt;+&gt; text "\"text\" \"" &lt;&gt;</font>
+<a name="(line203)"></a><font color=Blue>--                                                  ppXName n &lt;&gt; text "\"" &lt;+&gt; cvo</font>
+<a name="(line204)"></a><font color=Blue>--             (Any)       -&gt; text "definite fromElem" &lt;+&gt; text "\"ANY\" \"" &lt;&gt;</font>
+<a name="(line205)"></a><font color=Blue>--                                                  ppXName n &lt;&gt; text "\"" &lt;+&gt; cvo</font>
+<a name="(line206)"></a><font color=Blue>--             (Defined m) -&gt; text "definite fromElem" &lt;+&gt;</font>
+<a name="(line207)"></a><font color=Blue>--                                  text "\"&lt;" &lt;&gt; ppXName m &lt;&gt; text "&gt;\" \"" &lt;&gt;</font>
+<a name="(line208)"></a><font color=Blue>--                                                  ppXName m &lt;&gt; text "\"" &lt;+&gt; cvo</font>
+<a name="(line209)"></a><font color=Blue>--             (Defaultable _ _)  -&gt; text "nyi_fromElem_Defaultable" &lt;+&gt; cvo</font>
+<a name="(line210)"></a><font color=Blue>--           )</font>
 <a name="(line211)"></a>
-<a name="(line212)"></a><font color=Blue>-- </font>
+<a name="(line212)"></a><a name="mkParseConstr"></a><font color=Blue>--</font>
 <a name="(line213)"></a><font color=Blue>{-
 <a name="(line214)"></a>mkParseContents :: Name -&gt; [StructType] -&gt; [Doc] -&gt; Doc -&gt; Doc
 <a name="(line215)"></a>mkParseContents n sts vs inner =
@@ -225,171 +225,173 @@
 <a name="(line223)"></a>        parens (
 <a name="(line224)"></a>          )
 <a name="(line225)"></a>-}</font>
-<a name="(line226)"></a>
-<a name="(line227)"></a><a name="mkParseConstr"></a>mkParseConstr frattr <font color=Cyan>(</font>c<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line226)"></a>mkParseConstr <font color=Red>::</font> Doc <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font> <font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc
+<a name="(line227)"></a>mkParseConstr frattr <font color=Cyan>(</font>c<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>
 <a name="(line228)"></a>        fsep <font color=Cyan>(</font>text <font color=Magenta>"return"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>ppHName c <font color=Cyan>&lt;+&gt;</font> frattr<font color=Cyan>)</font>
 <a name="(line229)"></a>             <font color=Red><b>:</b></font> map mkParseContents sts<font color=Cyan>)</font>
 <a name="(line230)"></a>
-<a name="(line231)"></a><a name="mkParseContents"></a>mkParseContents st <font color=Red>=</font>
-<a name="(line232)"></a>  <font color=Green><u>let</u></font> ap <font color=Red>=</font> text <font color=Magenta>"`apply`"</font> <font color=Green><u>in</u></font>
-<a name="(line233)"></a>          <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
-<a name="(line234)"></a>            <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>  <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"optional text"</font>
-<a name="(line235)"></a>            <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font>       <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"optional parseContents"</font>
-<a name="(line236)"></a>            <font color=Cyan>(</font>List String<font color=Cyan>)</font>   <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"many text"</font>
-<a name="(line237)"></a>            <font color=Cyan>(</font>List s<font color=Cyan>)</font>        <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"many parseContents"</font>
-<a name="(line238)"></a>            <font color=Cyan>(</font>List1 s<font color=Cyan>)</font>       <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>
-<a name="(line239)"></a>            <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>      <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>
-<a name="(line240)"></a>            <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>      <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>
-<a name="(line241)"></a>            <font color=Cyan>(</font>String<font color=Cyan>)</font>        <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"(text `onFail` return \"\")"</font>
-<a name="(line242)"></a>            <font color=Cyan>(</font>Any<font color=Cyan>)</font>           <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>
-<a name="(line243)"></a>            <font color=Cyan>(</font>Defined m<font color=Cyan>)</font>     <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>
-<a name="(line244)"></a>            <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"nyi_fromElem_Defaultable"</font>
-<a name="(line245)"></a>
-<a name="(line246)"></a><a name="mkToElem"></a><font color=Blue>--</font>
-<a name="(line247)"></a>mkToElem <font color=Red>::</font> <font color=Red>[</font>StructType<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc
-<a name="(line248)"></a>mkToElem []  [] <font color=Red>=</font> text <font color=Magenta>"[]"</font>
-<a name="(line249)"></a>mkToElem sts vs <font color=Red>=</font>
-<a name="(line250)"></a>    fsep <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"++"</font><font color=Cyan>)</font> <font color=Cyan>(</font>zipWith toElem sts vs<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line251)"></a>  <font color=Green><u>where</u></font>
-<a name="(line252)"></a>    toElem st v <font color=Red>=</font>
-<a name="(line253)"></a>      <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
-<a name="(line254)"></a>        <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"maybe [] toText"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line255)"></a>        <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"maybe [] toContents"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line256)"></a>        <font color=Cyan>(</font>List String<font color=Cyan>)</font>   <font color=Red>-&gt;</font> text <font color=Magenta>"concatMap toText"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line257)"></a>        <font color=Cyan>(</font>List s<font color=Cyan>)</font>        <font color=Red>-&gt;</font> text <font color=Magenta>"concatMap toContents"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line258)"></a>        <font color=Cyan>(</font>List1 s<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line259)"></a>        <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line260)"></a>        <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line261)"></a>        <font color=Cyan>(</font>String<font color=Cyan>)</font>        <font color=Red>-&gt;</font> text <font color=Magenta>"toText"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line262)"></a>        <font color=Cyan>(</font>Any<font color=Cyan>)</font>           <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line263)"></a>        <font color=Cyan>(</font>Defined m<font color=Cyan>)</font>     <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line264)"></a>        <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"nyi_toElem_Defaultable"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line265)"></a>
-<a name="(line266)"></a><a name="mkRpat"></a>mkRpat <font color=Red>::</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc
-<a name="(line267)"></a>mkRpat <font color=Red>[</font>v<font color=Red>]</font> <font color=Red>=</font> v
-<a name="(line268)"></a>mkRpat vs  <font color=Red>=</font> <font color=Cyan>(</font>parens <font color=Cyan>.</font> hcat <font color=Cyan>.</font> intersperse comma<font color=Cyan>)</font> vs
-<a name="(line269)"></a>
-<a name="(line270)"></a><a name="mkCpat"></a>mkCpat <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc
-<a name="(line271)"></a>mkCpat n i vs <font color=Red>=</font> ppHName n <font color=Cyan>&lt;+&gt;</font> i <font color=Cyan>&lt;+&gt;</font> fsep vs
-<a name="(line272)"></a>
-<a name="(line273)"></a><a name="nameSupply"></a>nameSupply<font color=Cyan>,</font>nameSupply2 <font color=Red>::</font> <font color=Red>[</font>b<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Doc<font color=Red>]</font>
-<a name="(line274)"></a>nameSupply  ss <font color=Red>=</font> take <font color=Cyan>(</font>length ss<font color=Cyan>)</font> <font color=Cyan>(</font>map char <font color=Red>[</font><font color=Magenta>'a'</font><font color=Red>..</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line275)"></a><a name="nameSupply2"></a>nameSupply2 ss <font color=Red>=</font> take <font color=Cyan>(</font>length ss<font color=Cyan>)</font> <font color=Red>[</font> text <font color=Cyan>(</font><font color=Magenta>'c'</font><font color=Red><b>:</b></font>v<font color=Red><b>:</b></font>[]<font color=Cyan>)</font> <font color=Red>|</font> v <font color=Red>&lt;-</font> <font color=Red>[</font><font color=Magenta>'a'</font><font color=Red>..</font><font color=Red>]</font><font color=Red>]</font>
-<a name="(line276)"></a>
-<a name="(line277)"></a><a name="mkTranslate"></a>mkTranslate <font color=Red>::</font> <font color=Red>[</font>Name<font color=Red>]</font> <font color=Red>-&gt;</font> Doc
-<a name="(line278)"></a>mkTranslate es <font color=Red>=</font>
-<a name="(line279)"></a>    vcat <font color=Cyan>(</font>map trans es<font color=Cyan>)</font> <font color=Cyan>$$</font>
-<a name="(line280)"></a>    text <font color=Magenta>"translate _ = Nothing"</font>
-<a name="(line281)"></a>  <font color=Green><u>where</u></font>
-<a name="(line282)"></a>    trans n <font color=Red>=</font> text <font color=Magenta>"translate \""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\" ="</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line283)"></a>              text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n
-<a name="(line284)"></a>
-<a name="(line285)"></a><a name="mkToAttr"></a>mkToAttr n <font color=Red>=</font> text <font color=Magenta>"toAttrFrTyp n"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line286)"></a>             text <font color=Magenta>"Just (n, str2attr"</font> <font color=Cyan>&lt;+&gt;</font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>")"</font>
-<a name="(line287)"></a>
-<a name="(line288)"></a><a name="mkFrFld"></a>mkFrFld <font color=Red>::</font> Name <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc
-<a name="(line289)"></a>mkFrFld tag <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line290)"></a>    ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line291)"></a>    <font color=Cyan>(</font> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
-<a name="(line292)"></a>        <font color=Cyan>(</font>Defaultable String s<font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"defaultA fromAttrToStr"</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line293)"></a>						 doubleQuotes <font color=Cyan>(</font>text s<font color=Cyan>)</font>
-<a name="(line294)"></a>        <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> s<font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"defaultA fromAttrToTyp"</font> <font color=Cyan>&lt;+&gt;</font> text s
-<a name="(line295)"></a>        <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>         <font color=Red>-&gt;</font> text <font color=Magenta>"possibleA fromAttrToStr"</font>
-<a name="(line296)"></a>        <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font>              <font color=Red>-&gt;</font> text <font color=Magenta>"possibleA fromAttrToTyp"</font>
-<a name="(line297)"></a>        String                 <font color=Red>-&gt;</font> text <font color=Magenta>"definiteA fromAttrToStr"</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line298)"></a>						 doubleQuotes <font color=Cyan>(</font>ppXName tag<font color=Cyan>)</font>
-<a name="(line299)"></a>        <font color=Green><u>_</u></font>                      <font color=Red>-&gt;</font> text <font color=Magenta>"definiteA fromAttrToTyp"</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line300)"></a>						 doubleQuotes <font color=Cyan>(</font>ppXName tag<font color=Cyan>)</font>
-<a name="(line301)"></a>    <font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"as"</font>
-<a name="(line302)"></a>
-<a name="(line303)"></a><a name="mkToFld"></a>mkToFld <font color=Red>::</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc
-<a name="(line304)"></a>mkToFld <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line305)"></a>    <font color=Cyan>(</font> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
-<a name="(line306)"></a>        <font color=Cyan>(</font>Defaultable String <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"defaultToAttr toAttrFrStr"</font>
-<a name="(line307)"></a>        <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"defaultToAttr toAttrFrTyp"</font>
-<a name="(line308)"></a>        <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>         <font color=Red>-&gt;</font> text <font color=Magenta>"maybeToAttr toAttrFrStr"</font>
-<a name="(line309)"></a>        <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font>              <font color=Red>-&gt;</font> text <font color=Magenta>"maybeToAttr toAttrFrTyp"</font>
-<a name="(line310)"></a>        String                 <font color=Red>-&gt;</font> text <font color=Magenta>"toAttrFrStr"</font>
-<a name="(line311)"></a>        <font color=Green><u>_</u></font>                      <font color=Red>-&gt;</font> text <font color=Magenta>"toAttrFrTyp"</font>
-<a name="(line312)"></a>    <font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"v"</font><font color=Cyan>)</font>
-<a name="(line313)"></a>
-<a name="(line314)"></a><a name="mkFrAux"></a>mkFrAux <font color=Red>::</font> Bool <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> Doc
-<a name="(line315)"></a>mkFrAux keeprest attrs cs <font color=Red>=</font> foldr frAux inner cs
-<a name="(line316)"></a>  <font color=Green><u>where</u></font>
-<a name="(line317)"></a>    inner <font color=Red>=</font> text <font color=Magenta>"(Nothing, c0)"</font>
-<a name="(line318)"></a>    rest  <font color=Red>=</font> <font color=Green><u>if</u></font> keeprest <font color=Green><u>then</u></font> text <font color=Magenta>"rest"</font> <font color=Green><u>else</u></font> text <font color=Magenta>"_"</font>
-<a name="(line319)"></a>    frAux <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> inner <font color=Red>=</font>
-<a name="(line320)"></a>        <font color=Green><u>let</u></font> vs  <font color=Red>=</font> nameSupply sts <font color=Green><u>in</u></font>
-<a name="(line321)"></a>        nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"case"</font> <font color=Cyan>&lt;+&gt;</font> blah sts vs <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"of"</font> <font color=Cyan>$$</font>
-<a name="(line322)"></a>                succpat sts vs <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"-&gt; (Just"</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line323)"></a>                                   parens <font color=Cyan>(</font>mkCpat n attrs vs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>", rest)"</font>
-<a name="(line324)"></a>                <font color=Cyan>$$</font>
-<a name="(line325)"></a>                failpat sts <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"-&gt;"</font> <font color=Cyan>$$</font> nest <font color=Magenta>4</font> inner
-<a name="(line326)"></a>               <font color=Cyan>)</font>
-<a name="(line327)"></a>    blah <font color=Red>[</font>st<font color=Red>]</font> <font color=Red>[</font>v<font color=Red>]</font> <font color=Red>=</font>
-<a name="(line328)"></a>        blahblahblah st <font color=Cyan>(</font>text <font color=Magenta>"c0"</font><font color=Cyan>)</font>
-<a name="(line329)"></a>    blah sts vs <font color=Red>=</font>
-<a name="(line330)"></a>        <font color=Green><u>let</u></font> ns <font color=Red>=</font> nameSupply2 vs
-<a name="(line331)"></a>            cvs <font color=Red>=</font> zip ns <font color=Cyan>(</font>text <font color=Magenta>"c0"</font><font color=Red><b>:</b></font> init ns<font color=Cyan>)</font>
-<a name="(line332)"></a>            blahblah <font color=Cyan>(</font>st<font color=Cyan>,</font>v<font color=Cyan>,</font><font color=Cyan>(</font>cvi<font color=Cyan>,</font>cvo<font color=Cyan>)</font><font color=Cyan>)</font> inner <font color=Red>=</font>
-<a name="(line333)"></a>                parens <font color=Cyan>(</font>text <font color=Magenta>"\\"</font> <font color=Cyan>&lt;&gt;</font> parens <font color=Cyan>(</font>v<font color=Cyan>&lt;&gt;</font>comma<font color=Cyan>&lt;&gt;</font>cvi<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"-&gt;"</font> <font color=Cyan>$$</font>
-<a name="(line334)"></a>                        nest <font color=Magenta>2</font> inner<font color=Cyan>)</font> <font color=Cyan>$$</font>
-<a name="(line335)"></a>                blahblahblah st cvo
-<a name="(line336)"></a>        <font color=Green><u>in</u></font>
-<a name="(line337)"></a>        foldr blahblah <font color=Cyan>(</font>mkRpat <font color=Cyan>(</font>vs<font color=Cyan>++</font><font color=Red>[</font>last ns<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>zip3 sts vs cvs<font color=Cyan>)</font>
-<a name="(line338)"></a>    blahblahblah st cvo <font color=Red>=</font> parens <font color=Cyan>(</font>
-<a name="(line339)"></a>        <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
-<a name="(line340)"></a>          <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"fromText"</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line341)"></a>          <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line342)"></a>          <font color=Cyan>(</font>List String<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"many fromText"</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line343)"></a>          <font color=Cyan>(</font>List s<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"many fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line344)"></a>          <font color=Cyan>(</font>List1 s<font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line345)"></a>          <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>     <font color=Red>-&gt;</font> text <font color=Magenta>"fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo	<font color=Blue>-- ??</font>
-<a name="(line346)"></a>          <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>     <font color=Red>-&gt;</font> text <font color=Magenta>"fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line347)"></a>          <font color=Cyan>(</font>String<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"fromText"</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line348)"></a>          <font color=Cyan>(</font>Any<font color=Cyan>)</font>          <font color=Red>-&gt;</font> text <font color=Magenta>"fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line349)"></a>          <font color=Cyan>(</font>Defined m<font color=Cyan>)</font>    <font color=Red>-&gt;</font> text <font color=Magenta>"fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo
-<a name="(line350)"></a>        <font color=Cyan>)</font>
-<a name="(line351)"></a>    failpat sts <font color=Red>=</font>
-<a name="(line352)"></a>        <font color=Green><u>let</u></font> fp st <font color=Red>=</font>
-<a name="(line353)"></a>                <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
-<a name="(line354)"></a>                  <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font>   <font color=Red>-&gt;</font> text <font color=Magenta>"Nothing"</font>
-<a name="(line355)"></a>                  <font color=Cyan>(</font>List s<font color=Cyan>)</font>    <font color=Red>-&gt;</font> text <font color=Magenta>"[]"</font>
-<a name="(line356)"></a>                  <font color=Cyan>(</font>List1 s<font color=Cyan>)</font>   <font color=Red>-&gt;</font> text <font color=Magenta>"_"</font>
-<a name="(line357)"></a>                  <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"_"</font>
-<a name="(line358)"></a>                  <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"_"</font>
-<a name="(line359)"></a>                  <font color=Cyan>(</font>String<font color=Cyan>)</font>    <font color=Red>-&gt;</font> text <font color=Magenta>"_"</font>
-<a name="(line360)"></a>                  <font color=Cyan>(</font>Any<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"_"</font>
-<a name="(line361)"></a>                  <font color=Cyan>(</font>Defined m<font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"_"</font>
-<a name="(line362)"></a>        <font color=Green><u>in</u></font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse comma <font color=Cyan>(</font>map fp sts<font color=Cyan>++</font><font color=Red>[</font>text <font color=Magenta>"_"</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line363)"></a>    succpat sts vs <font color=Red>=</font>
-<a name="(line364)"></a>        <font color=Green><u>let</u></font> sp st v <font color=Red>=</font>
-<a name="(line365)"></a>                <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
-<a name="(line366)"></a>                  <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font>   <font color=Red>-&gt;</font> v
-<a name="(line367)"></a>                  <font color=Cyan>(</font>List s<font color=Cyan>)</font>    <font color=Red>-&gt;</font> v
-<a name="(line368)"></a>                  <font color=Cyan>(</font>List1 s<font color=Cyan>)</font>   <font color=Red>-&gt;</font> text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line369)"></a>                  <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line370)"></a>                  <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line371)"></a>                  <font color=Cyan>(</font>String<font color=Cyan>)</font>    <font color=Red>-&gt;</font> text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line372)"></a>                  <font color=Cyan>(</font>Any<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line373)"></a>                  <font color=Cyan>(</font>Defined m<font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> v
-<a name="(line374)"></a>        <font color=Green><u>in</u></font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse comma <font color=Cyan>(</font>zipWith sp sts vs<font color=Cyan>++</font><font color=Red>[</font>rest<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line375)"></a>
-<a name="(line376)"></a><a name="mkToAux"></a>mkToAux <font color=Red>::</font> Bool <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc
-<a name="(line377)"></a>mkToAux mixattrs <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line378)"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts
-<a name="(line379)"></a>        attrs <font color=Red>=</font> <font color=Green><u>if</u></font> mixattrs <font color=Green><u>then</u></font> text <font color=Magenta>"as"</font> <font color=Green><u>else</u></font> empty
-<a name="(line380)"></a>    <font color=Green><u>in</u></font>
-<a name="(line381)"></a>    text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkCpat n attrs vs<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line382)"></a>    mkToElem sts vs
-<a name="(line383)"></a>
-<a name="(line384)"></a><a name="mkToMult"></a>mkToMult <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc
-<a name="(line385)"></a>mkToMult tag attrpat attrexp <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line386)"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts
-<a name="(line387)"></a>    <font color=Green><u>in</u></font>
-<a name="(line388)"></a>    text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkCpat n attrpat vs<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font>
-<a name="(line389)"></a>    <font color=Cyan>$$</font> nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"[CElem (Elem \""</font> <font color=Cyan>&lt;&gt;</font> ppXName tag <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font><font color=Cyan>&lt;+&gt;</font> attrexp
-<a name="(line390)"></a>              <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkToElem sts vs<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>") ()]"</font><font color=Cyan>)</font>
-<a name="(line391)"></a>
+<a name="(line231)"></a><a name="mkParseContents"></a>mkParseContents <font color=Red>::</font> StructType <font color=Red>-&gt;</font> Doc
+<a name="(line232)"></a>mkParseContents st <font color=Red>=</font>
+<a name="(line233)"></a>  <font color=Green><u>let</u></font> ap <font color=Red>=</font> text <font color=Magenta>"`apply`"</font> <font color=Green><u>in</u></font>
+<a name="(line234)"></a>          <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
+<a name="(line235)"></a>            <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>  <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"optional text"</font>
+<a name="(line236)"></a>            <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font>       <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"optional parseContents"</font>
+<a name="(line237)"></a>            <font color=Cyan>(</font>List String<font color=Cyan>)</font>   <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"many text"</font>
+<a name="(line238)"></a>            <font color=Cyan>(</font>List <font color=Green><u>_</u></font><font color=Cyan>)</font>        <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"many parseContents"</font>
+<a name="(line239)"></a>            <font color=Cyan>(</font>List1 <font color=Green><u>_</u></font><font color=Cyan>)</font>       <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>
+<a name="(line240)"></a>            <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>
+<a name="(line241)"></a>            <font color=Cyan>(</font>OneOf <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>
+<a name="(line242)"></a>            <font color=Cyan>(</font>String<font color=Cyan>)</font>        <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"(text `onFail` return \"\")"</font>
+<a name="(line243)"></a>            <font color=Cyan>(</font>Any<font color=Cyan>)</font>           <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>
+<a name="(line244)"></a>            <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font><font color=Cyan>)</font>     <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>
+<a name="(line245)"></a>            <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"nyi_fromElem_Defaultable"</font>
+<a name="(line246)"></a>
+<a name="(line247)"></a><a name="mkToElem"></a><font color=Blue>--</font>
+<a name="(line248)"></a>mkToElem <font color=Red>::</font> <font color=Red>[</font>StructType<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc
+<a name="(line249)"></a>mkToElem []  [] <font color=Red>=</font> text <font color=Magenta>"[]"</font>
+<a name="(line250)"></a>mkToElem sts vs <font color=Red>=</font>
+<a name="(line251)"></a>    fsep <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"++"</font><font color=Cyan>)</font> <font color=Cyan>(</font>zipWith toElem sts vs<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line252)"></a>  <font color=Green><u>where</u></font>
+<a name="(line253)"></a>    toElem st v <font color=Red>=</font>
+<a name="(line254)"></a>      <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
+<a name="(line255)"></a>        <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"maybe [] toText"</font> <font color=Cyan>&lt;+&gt;</font> v
+<a name="(line256)"></a>        <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"maybe [] toContents"</font> <font color=Cyan>&lt;+&gt;</font> v
+<a name="(line257)"></a>        <font color=Cyan>(</font>List String<font color=Cyan>)</font>   <font color=Red>-&gt;</font> text <font color=Magenta>"concatMap toText"</font> <font color=Cyan>&lt;+&gt;</font> v
+<a name="(line258)"></a>        <font color=Cyan>(</font>List <font color=Green><u>_</u></font><font color=Cyan>)</font>        <font color=Red>-&gt;</font> text <font color=Magenta>"concatMap toContents"</font> <font color=Cyan>&lt;+&gt;</font> v
+<a name="(line259)"></a>        <font color=Cyan>(</font>List1 <font color=Green><u>_</u></font><font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v
+<a name="(line260)"></a>        <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v
+<a name="(line261)"></a>        <font color=Cyan>(</font>OneOf <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v
+<a name="(line262)"></a>        <font color=Cyan>(</font>String<font color=Cyan>)</font>        <font color=Red>-&gt;</font> text <font color=Magenta>"toText"</font> <font color=Cyan>&lt;+&gt;</font> v
+<a name="(line263)"></a>        <font color=Cyan>(</font>Any<font color=Cyan>)</font>           <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v
+<a name="(line264)"></a>        <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font><font color=Cyan>)</font>     <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v
+<a name="(line265)"></a>        <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"nyi_toElem_Defaultable"</font> <font color=Cyan>&lt;+&gt;</font> v
+<a name="(line266)"></a>
+<a name="(line267)"></a><font color=Blue>-- mkRpat :: [Doc] -&gt; Doc</font>
+<a name="(line268)"></a><font color=Blue>-- mkRpat [v] = v</font>
+<a name="(line269)"></a><font color=Blue>-- mkRpat vs  = (parens . hcat . intersperse comma) vs</font>
+<a name="(line270)"></a>
+<a name="(line271)"></a><a name="mkCpat"></a>mkCpat <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc
+<a name="(line272)"></a>mkCpat n i vs <font color=Red>=</font> ppHName n <font color=Cyan>&lt;+&gt;</font> i <font color=Cyan>&lt;+&gt;</font> fsep vs
+<a name="(line273)"></a>
+<a name="(line274)"></a><a name="nameSupply"></a>nameSupply <font color=Red>::</font> <font color=Red>[</font>b<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Doc<font color=Red>]</font>
+<a name="(line275)"></a>nameSupply  ss <font color=Red>=</font> take <font color=Cyan>(</font>length ss<font color=Cyan>)</font> <font color=Cyan>(</font>map char <font color=Red>[</font><font color=Magenta>'a'</font><font color=Red>..</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="(line276)"></a><font color=Blue>-- nameSupply2 ss = take (length ss) [ text ('c':v:[]) | v &lt;- ['a'..]]</font>
+<a name="(line277)"></a>
+<a name="(line278)"></a><a name="mkTranslate"></a>mkTranslate <font color=Red>::</font> <font color=Red>[</font>Name<font color=Red>]</font> <font color=Red>-&gt;</font> Doc
+<a name="(line279)"></a>mkTranslate es <font color=Red>=</font>
+<a name="(line280)"></a>    vcat <font color=Cyan>(</font>map trans es<font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="(line281)"></a>    text <font color=Magenta>"translate _ = Nothing"</font>
+<a name="(line282)"></a>  <font color=Green><u>where</u></font>
+<a name="(line283)"></a>    trans n <font color=Red>=</font> text <font color=Magenta>"translate \""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\" ="</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line284)"></a>              text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n
+<a name="(line285)"></a>
+<a name="(line286)"></a><a name="mkToAttr"></a>mkToAttr <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc
+<a name="(line287)"></a>mkToAttr n <font color=Red>=</font> text <font color=Magenta>"toAttrFrTyp n"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line288)"></a>             text <font color=Magenta>"Just (n, str2attr"</font> <font color=Cyan>&lt;+&gt;</font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>")"</font>
+<a name="(line289)"></a>
+<a name="(line290)"></a><a name="mkFrFld"></a>mkFrFld <font color=Red>::</font> Name <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc
+<a name="(line291)"></a>mkFrFld tag <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line292)"></a>    ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line293)"></a>    <font color=Cyan>(</font> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
+<a name="(line294)"></a>        <font color=Cyan>(</font>Defaultable String s<font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"defaultA fromAttrToStr"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line295)"></a>                                                 doubleQuotes <font color=Cyan>(</font>text s<font color=Cyan>)</font>
+<a name="(line296)"></a>        <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> s<font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"defaultA fromAttrToTyp"</font> <font color=Cyan>&lt;+&gt;</font> text s
+<a name="(line297)"></a>        <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>         <font color=Red>-&gt;</font> text <font color=Magenta>"possibleA fromAttrToStr"</font>
+<a name="(line298)"></a>        <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font>              <font color=Red>-&gt;</font> text <font color=Magenta>"possibleA fromAttrToTyp"</font>
+<a name="(line299)"></a>        String                 <font color=Red>-&gt;</font> text <font color=Magenta>"definiteA fromAttrToStr"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line300)"></a>                                                 doubleQuotes <font color=Cyan>(</font>ppXName tag<font color=Cyan>)</font>
+<a name="(line301)"></a>        <font color=Green><u>_</u></font>                      <font color=Red>-&gt;</font> text <font color=Magenta>"definiteA fromAttrToTyp"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line302)"></a>                                                 doubleQuotes <font color=Cyan>(</font>ppXName tag<font color=Cyan>)</font>
+<a name="(line303)"></a>    <font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"as"</font>
+<a name="(line304)"></a>
+<a name="(line305)"></a><a name="mkToFld"></a>mkToFld <font color=Red>::</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc
+<a name="(line306)"></a>mkToFld <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line307)"></a>    <font color=Cyan>(</font> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
+<a name="(line308)"></a>        <font color=Cyan>(</font>Defaultable String <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"defaultToAttr toAttrFrStr"</font>
+<a name="(line309)"></a>        <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"defaultToAttr toAttrFrTyp"</font>
+<a name="(line310)"></a>        <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>         <font color=Red>-&gt;</font> text <font color=Magenta>"maybeToAttr toAttrFrStr"</font>
+<a name="(line311)"></a>        <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font>              <font color=Red>-&gt;</font> text <font color=Magenta>"maybeToAttr toAttrFrTyp"</font>
+<a name="(line312)"></a>        String                 <font color=Red>-&gt;</font> text <font color=Magenta>"toAttrFrStr"</font>
+<a name="(line313)"></a>        <font color=Green><u>_</u></font>                      <font color=Red>-&gt;</font> text <font color=Magenta>"toAttrFrTyp"</font>
+<a name="(line314)"></a>    <font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"v"</font><font color=Cyan>)</font>
+<a name="(line315)"></a>
+<a name="(line316)"></a><font color=Blue>-- mkFrAux :: Bool -&gt; Doc -&gt; [(Name,[StructType])] -&gt; Doc</font>
+<a name="(line317)"></a><font color=Blue>-- mkFrAux keeprest attrs cs = foldr frAux inner cs</font>
+<a name="(line318)"></a><font color=Blue>--   where</font>
+<a name="(line319)"></a><font color=Blue>--     inner = text "(Nothing, c0)"</font>
+<a name="(line320)"></a><font color=Blue>--     rest  = if keeprest then text "rest" else text "_"</font>
+<a name="(line321)"></a><font color=Blue>--     frAux (n,sts) innr =</font>
+<a name="(line322)"></a><font color=Blue>--         let vs  = nameSupply sts in</font>
+<a name="(line323)"></a><font color=Blue>--         nest 4 (text "case" &lt;+&gt; blah sts vs &lt;+&gt; text "of" $$</font>
+<a name="(line324)"></a><font color=Blue>--                 succpat sts vs &lt;+&gt; text "-&gt; (Just" &lt;+&gt;</font>
+<a name="(line325)"></a><font color=Blue>--                                    parens (mkCpat n attrs vs) &lt;&gt; text ", rest)"</font>
+<a name="(line326)"></a><font color=Blue>--                 $$</font>
+<a name="(line327)"></a><font color=Blue>--                 failpat sts &lt;+&gt; text "-&gt;" $$ nest 4 innr</font>
+<a name="(line328)"></a><font color=Blue>--                )</font>
+<a name="(line329)"></a><font color=Blue>--     blah [st] [_] =</font>
+<a name="(line330)"></a><font color=Blue>--         blahblahblah st (text "c0")</font>
+<a name="(line331)"></a><font color=Blue>--     blah sts vs =</font>
+<a name="(line332)"></a><font color=Blue>--         let ns = nameSupply2 vs</font>
+<a name="(line333)"></a><font color=Blue>--             cvs = zip ns (text "c0": init ns)</font>
+<a name="(line334)"></a><font color=Blue>--             blahblah (st,v,(cvi,cvo)) innr =</font>
+<a name="(line335)"></a><font color=Blue>--                 parens (text "\\" &lt;&gt; parens (v&lt;&gt;comma&lt;&gt;cvi) &lt;&gt; text "-&gt;" $$</font>
+<a name="(line336)"></a><font color=Blue>--                         nest 2 innr) $$</font>
+<a name="(line337)"></a><font color=Blue>--                 blahblahblah st cvo</font>
+<a name="(line338)"></a><font color=Blue>--         in</font>
+<a name="(line339)"></a><font color=Blue>--         foldr blahblah (mkRpat (vs++[last ns])) (zip3 sts vs cvs)</font>
+<a name="(line340)"></a><font color=Blue>--     blahblahblah st cvo = parens (</font>
+<a name="(line341)"></a><font color=Blue>--         case st of</font>
+<a name="(line342)"></a><font color=Blue>--           (Maybe String) -&gt; text "fromText" &lt;+&gt; cvo</font>
+<a name="(line343)"></a><font color=Blue>--           (Maybe _)      -&gt; text "fromElem" &lt;+&gt; cvo</font>
+<a name="(line344)"></a><font color=Blue>--           (List String)  -&gt; text "many fromText" &lt;+&gt; cvo</font>
+<a name="(line345)"></a><font color=Blue>--           (List _)       -&gt; text "many fromElem" &lt;+&gt; cvo</font>
+<a name="(line346)"></a><font color=Blue>--           (List1 _)      -&gt; text "fromElem" &lt;+&gt; cvo</font>
+<a name="(line347)"></a><font color=Blue>--           (Tuple _)     -&gt; text "fromElem" &lt;+&gt; cvo      -- ??</font>
+<a name="(line348)"></a><font color=Blue>--           (OneOf _)     -&gt; text "fromElem" &lt;+&gt; cvo</font>
+<a name="(line349)"></a><font color=Blue>--           (String)       -&gt; text "fromText" &lt;+&gt; cvo</font>
+<a name="(line350)"></a><font color=Blue>--           (Any)          -&gt; text "fromElem" &lt;+&gt; cvo</font>
+<a name="(line351)"></a><font color=Blue>--           (Defined _)    -&gt; text "fromElem" &lt;+&gt; cvo</font>
+<a name="(line352)"></a><font color=Blue>--         )</font>
+<a name="(line353)"></a><font color=Blue>--     failpat sts =</font>
+<a name="(line354)"></a><font color=Blue>--         let fp st =</font>
+<a name="(line355)"></a><font color=Blue>--                 case st of</font>
+<a name="(line356)"></a><font color=Blue>--                   (Maybe _)   -&gt; text "Nothing"</font>
+<a name="(line357)"></a><font color=Blue>--                   (List _)    -&gt; text "[]"</font>
+<a name="(line358)"></a><font color=Blue>--                   (List1 _)   -&gt; text "_"</font>
+<a name="(line359)"></a><font color=Blue>--                   (Tuple _)  -&gt; text "_"</font>
+<a name="(line360)"></a><font color=Blue>--                   (OneOf _)  -&gt; text "_"</font>
+<a name="(line361)"></a><font color=Blue>--                   (String)    -&gt; text "_"</font>
+<a name="(line362)"></a><font color=Blue>--                   (Any)       -&gt; text "_"</font>
+<a name="(line363)"></a><font color=Blue>--                   (Defined _) -&gt; text "_"</font>
+<a name="(line364)"></a><font color=Blue>--         in parens (hcat (intersperse comma (map fp sts++[text "_"])))</font>
+<a name="(line365)"></a><font color=Blue>--     succpat sts vs =</font>
+<a name="(line366)"></a><font color=Blue>--         let sp st v =</font>
+<a name="(line367)"></a><font color=Blue>--                 case st of</font>
+<a name="(line368)"></a><font color=Blue>--                   (Maybe _)   -&gt; v</font>
+<a name="(line369)"></a><font color=Blue>--                   (List _)    -&gt; v</font>
+<a name="(line370)"></a><font color=Blue>--                   (List1 _)   -&gt; text "Just" &lt;+&gt; v</font>
+<a name="(line371)"></a><font color=Blue>--                   (Tuple _)  -&gt; text "Just" &lt;+&gt; v</font>
+<a name="(line372)"></a><font color=Blue>--                   (OneOf _)  -&gt; text "Just" &lt;+&gt; v</font>
+<a name="(line373)"></a><font color=Blue>--                   (String)    -&gt; text "Just" &lt;+&gt; v</font>
+<a name="(line374)"></a><font color=Blue>--                   (Any)       -&gt; text "Just" &lt;+&gt; v</font>
+<a name="(line375)"></a><font color=Blue>--                   (Defined _) -&gt; text "Just" &lt;+&gt; v</font>
+<a name="(line376)"></a><font color=Blue>--         in parens (hcat (intersperse comma (zipWith sp sts vs++[rest])))</font>
+<a name="(line377)"></a>
+<a name="(line378)"></a><a name="mkToAux"></a>mkToAux <font color=Red>::</font> Bool <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc
+<a name="(line379)"></a>mkToAux mixattrs <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line380)"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts
+<a name="(line381)"></a>        attrs <font color=Red>=</font> <font color=Green><u>if</u></font> mixattrs <font color=Green><u>then</u></font> text <font color=Magenta>"as"</font> <font color=Green><u>else</u></font> empty
+<a name="(line382)"></a>    <font color=Green><u>in</u></font>
+<a name="(line383)"></a>    text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkCpat n attrs vs<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line384)"></a>    mkToElem sts vs
+<a name="(line385)"></a>
+<a name="(line386)"></a><a name="mkToMult"></a>mkToMult <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc
+<a name="(line387)"></a>mkToMult tag attrpat attrexp <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line388)"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts
+<a name="(line389)"></a>    <font color=Green><u>in</u></font>
+<a name="(line390)"></a>    text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkCpat n attrpat vs<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font>
+<a name="(line391)"></a>    <font color=Cyan>$$</font> nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"[CElem (Elem \""</font> <font color=Cyan>&lt;&gt;</font> ppXName tag <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font><font color=Cyan>&lt;+&gt;</font> attrexp
+<a name="(line392)"></a>              <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkToElem sts vs<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>") ()]"</font><font color=Cyan>)</font>
+<a name="(line393)"></a>
 </pre>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/TypeDef.html b/docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/TypeDef.html
--- a/docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/TypeDef.html
+++ b/docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/TypeDef.html
@@ -28,25 +28,25 @@
 <a name="(line26)"></a><font color=Blue>---- Internal representation for typedefs ----</font>
 <a name="(line27)"></a>
 <a name="(line28)"></a><a name="Name"></a><font color=Blue>-- | Need to keep both the XML and Haskell versions of a name.</font>
-<a name="(line29)"></a><a name="Name"></a><font color=Green><u>data</u></font> Name <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>::</font> String	<font color=Blue>-- ^ original XML name</font>
-<a name="(line30)"></a>		 <font color=Cyan>,</font> hName <font color=Red>::</font> String	<font color=Blue>-- ^ mangled Haskell name</font>
+<a name="(line29)"></a><a name="Name"></a><font color=Green><u>data</u></font> Name <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>::</font> String       <font color=Blue>-- ^ original XML name</font>
+<a name="(line30)"></a>                 <font color=Cyan>,</font> hName <font color=Red>::</font> String       <font color=Blue>-- ^ mangled Haskell name</font>
 <a name="(line31)"></a>                 <font color=Cyan>}</font>
 <a name="(line32)"></a>          <font color=Green><u>deriving</u></font> Eq
 <a name="(line33)"></a>
 <a name="(line34)"></a><a name="TypeDef"></a><font color=Green><u>data</u></font> TypeDef <font color=Red>=</font>
-<a name="(line35)"></a>      DataDef Bool Name AttrFields Constructors	<font color=Blue>-- ^ Bool for main\/aux.</font>
+<a name="(line35)"></a>      DataDef Bool Name AttrFields Constructors <font color=Blue>-- ^ Bool for main\/aux.</font>
 <a name="(line36)"></a>    <font color=Red>|</font> EnumDef Name <font color=Red>[</font>Name<font color=Red>]</font>
 <a name="(line37)"></a>    <font color=Green><u>deriving</u></font> Eq
 <a name="(line38)"></a><a name="Constructors"></a><font color=Green><u>type</u></font> Constructors <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>
 <a name="(line39)"></a><a name="AttrFields"></a><font color=Green><u>type</u></font> AttrFields   <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font> StructType<font color=Cyan>)</font><font color=Red>]</font>
 <a name="(line40)"></a><a name="StructType"></a><font color=Green><u>data</u></font> StructType <font color=Red>=</font>
 <a name="(line41)"></a>      Maybe StructType
-<a name="(line42)"></a>    <font color=Red>|</font> Defaultable StructType String	<font color=Blue>-- ^ String holds default value.</font>
+<a name="(line42)"></a>    <font color=Red>|</font> Defaultable StructType String     <font color=Blue>-- ^ String holds default value.</font>
 <a name="(line43)"></a>    <font color=Red>|</font> List StructType
-<a name="(line44)"></a>    <font color=Red>|</font> List1 StructType			<font color=Blue>-- ^ Non-empty lists.</font>
+<a name="(line44)"></a>    <font color=Red>|</font> List1 StructType                  <font color=Blue>-- ^ Non-empty lists.</font>
 <a name="(line45)"></a>    <font color=Red>|</font> Tuple <font color=Red>[</font>StructType<font color=Red>]</font>
 <a name="(line46)"></a>    <font color=Red>|</font> OneOf <font color=Red>[</font>StructType<font color=Red>]</font>
-<a name="(line47)"></a>    <font color=Red>|</font> Any				<font color=Blue>-- ^ XML's contentspec allows ANY</font>
+<a name="(line47)"></a>    <font color=Red>|</font> Any                               <font color=Blue>-- ^ XML's contentspec allows ANY</font>
 <a name="(line48)"></a>    <font color=Red>|</font> String
 <a name="(line49)"></a>    <font color=Red>|</font> Defined Name
 <a name="(line50)"></a>    <font color=Green><u>deriving</u></font> Eq
@@ -54,50 +54,50 @@
 <a name="(line52)"></a><font color=Blue>-- used for converting StructType (roughly) back to an XML content model</font>
 <a name="(line53)"></a><font color=Green><u>instance</u></font> Show StructType <font color=Green><u>where</u></font>
 <a name="(line54)"></a>    showsPrec p <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font>         <font color=Red>=</font> showsPrec <font color=Cyan>(</font>p<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> s <font color=Cyan>.</font> showChar <font color=Magenta>'?'</font>
-<a name="(line55)"></a>    showsPrec p <font color=Cyan>(</font>Defaultable s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> shows s
+<a name="(line55)"></a>    showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Defaultable s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> shows s
 <a name="(line56)"></a>    showsPrec p <font color=Cyan>(</font>List s<font color=Cyan>)</font>          <font color=Red>=</font> showsPrec <font color=Cyan>(</font>p<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> s <font color=Cyan>.</font> showChar <font color=Magenta>'*'</font>
 <a name="(line57)"></a>    showsPrec p <font color=Cyan>(</font>List1 s<font color=Cyan>)</font>         <font color=Red>=</font> showsPrec <font color=Cyan>(</font>p<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> s <font color=Cyan>.</font> showChar <font color=Magenta>'+'</font>
-<a name="(line58)"></a>    showsPrec p <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>        <font color=Red>=</font> showChar <font color=Magenta>'('</font>
+<a name="(line58)"></a>    showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>        <font color=Red>=</font> showChar <font color=Magenta>'('</font>
 <a name="(line59)"></a>                                    <font color=Cyan>.</font> foldr1 <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>','</font><font color=Cyan>)</font>
 <a name="(line60)"></a>                                                              <font color=Cyan>(</font>map shows ss<font color=Cyan>)</font><font color=Cyan>)</font>
 <a name="(line61)"></a>                                    <font color=Cyan>.</font> showChar <font color=Magenta>')'</font>
-<a name="(line62)"></a>    showsPrec p <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>        <font color=Red>=</font> showChar <font color=Magenta>'('</font>
+<a name="(line62)"></a>    showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>        <font color=Red>=</font> showChar <font color=Magenta>'('</font>
 <a name="(line63)"></a>                                    <font color=Cyan>.</font> foldr1 <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'|'</font><font color=Cyan>)</font>
 <a name="(line64)"></a>                                                              <font color=Cyan>(</font>map shows ss<font color=Cyan>)</font><font color=Cyan>)</font>
 <a name="(line65)"></a>                                    <font color=Cyan>.</font> showChar <font color=Magenta>')'</font>
-<a name="(line66)"></a>    showsPrec p <font color=Cyan>(</font>Any<font color=Cyan>)</font>             <font color=Red>=</font> showString <font color=Magenta>"ANY"</font>
-<a name="(line67)"></a>    showsPrec p <font color=Cyan>(</font>String<font color=Cyan>)</font>          <font color=Red>=</font> showString <font color=Magenta>"#PCDATA"</font>
-<a name="(line68)"></a>    showsPrec p <font color=Cyan>(</font>Defined <font color=Cyan>(</font>Name n <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> showString n
+<a name="(line66)"></a>    showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Any<font color=Cyan>)</font>             <font color=Red>=</font> showString <font color=Magenta>"ANY"</font>
+<a name="(line67)"></a>    showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>String<font color=Cyan>)</font>          <font color=Red>=</font> showString <font color=Magenta>"#PCDATA"</font>
+<a name="(line68)"></a>    showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Defined <font color=Cyan>(</font>Name n <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> showString n
 <a name="(line69)"></a>
 <a name="(line70)"></a>
 <a name="(line71)"></a><a name="ppTypeDef"></a><font color=Blue>---- Pretty-printing typedefs ----</font>
 <a name="(line72)"></a>ppTypeDef <font color=Red>::</font> TypeDef <font color=Red>-&gt;</font> Doc
 <a name="(line73)"></a>
-<a name="(line74)"></a><font color=Blue>--	no attrs, no constructors</font>
+<a name="(line74)"></a><font color=Blue>--      no attrs, no constructors</font>
 <a name="(line75)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n [] []<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line76)"></a>    <font color=Green><u>let</u></font> name <font color=Red>=</font> ppHName n <font color=Green><u>in</u></font>
-<a name="(line77)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> name <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> name <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\t\t"</font> <font color=Cyan>&lt;&gt;</font> derives
+<a name="(line76)"></a>    <font color=Green><u>let</u></font> nme <font color=Red>=</font> ppHName n <font color=Green><u>in</u></font>
+<a name="(line77)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> nme <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> nme <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\t\t"</font> <font color=Cyan>&lt;&gt;</font> derives
 <a name="(line78)"></a>
-<a name="(line79)"></a><font color=Blue>--	no attrs, single constructor</font>
+<a name="(line79)"></a><font color=Blue>--      no attrs, single constructor</font>
 <a name="(line80)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n [] <font color=Red>[</font>c<font color=Red>@</font><font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font><font color=Red>[</font><font color=Green><u>_</u></font><font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Red>=</font>
 <a name="(line81)"></a>    text <font color=Magenta>"newtype"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> ppC c <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\t\t"</font> <font color=Cyan>&lt;&gt;</font> derives
 <a name="(line82)"></a>
-<a name="(line83)"></a><font color=Blue>--	no attrs, multiple constrs</font>
+<a name="(line83)"></a><font color=Blue>--      no attrs, multiple constrs</font>
 <a name="(line84)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n [] cs<font color=Cyan>)</font> <font color=Red>=</font>
 <a name="(line85)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font>
 <a name="(line86)"></a>           <font color=Cyan>(</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> ppC <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Cyan>$$</font>
 <a name="(line87)"></a>             vcat <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font> text <font color=Magenta>"|"</font> <font color=Cyan>&lt;+&gt;</font> ppC c<font color=Cyan>)</font> <font color=Cyan>(</font>tail cs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>$$</font>
 <a name="(line88)"></a>             derives <font color=Cyan>)</font>
 <a name="(line89)"></a>
-<a name="(line90)"></a><font color=Blue>--	nonzero attrs, no constructors</font>
+<a name="(line90)"></a><font color=Blue>--      nonzero attrs, no constructors</font>
 <a name="(line91)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n fs []<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line92)"></a>    <font color=Green><u>let</u></font> name <font color=Red>=</font> ppHName n <font color=Green><u>in</u></font>
-<a name="(line93)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> name <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> name <font color=Cyan>$$</font>
+<a name="(line92)"></a>    <font color=Green><u>let</u></font> nme <font color=Red>=</font> ppHName n <font color=Green><u>in</u></font>
+<a name="(line93)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> nme <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> nme <font color=Cyan>$$</font>
 <a name="(line94)"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"{"</font> <font color=Cyan>&lt;+&gt;</font> ppF <font color=Cyan>(</font>head fs<font color=Cyan>)</font> <font color=Cyan>$$</font>
 <a name="(line95)"></a>             vcat <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>f<font color=Red>-&gt;</font> text <font color=Magenta>","</font> <font color=Cyan>&lt;+&gt;</font> ppF f<font color=Cyan>)</font> <font color=Cyan>(</font>tail fs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>$$</font>
 <a name="(line96)"></a>             text <font color=Magenta>"}"</font> <font color=Cyan>&lt;+&gt;</font> derives <font color=Cyan>)</font>
 <a name="(line97)"></a>
-<a name="(line98)"></a><font color=Blue>--	nonzero attrs, one or more constrs</font>
+<a name="(line98)"></a><font color=Blue>--      nonzero attrs, one or more constrs</font>
 <a name="(line99)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n fs cs<font color=Cyan>)</font> <font color=Red>=</font>
 <a name="(line100)"></a>    <font color=Green><u>let</u></font> attr <font color=Red>=</font> ppAName n <font color=Green><u>in</u></font>
 <a name="(line101)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font>
@@ -109,7 +109,7 @@
 <a name="(line107)"></a>             vcat <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>f<font color=Red>-&gt;</font> text <font color=Magenta>","</font> <font color=Cyan>&lt;+&gt;</font> ppF f<font color=Cyan>)</font> <font color=Cyan>(</font>tail fs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>$$</font>
 <a name="(line108)"></a>             text <font color=Magenta>"}"</font> <font color=Cyan>&lt;+&gt;</font> derives <font color=Cyan>)</font>
 <a name="(line109)"></a>
-<a name="(line110)"></a><font color=Blue>--	enumerations (of attribute values)</font>
+<a name="(line110)"></a><font color=Blue>--      enumerations (of attribute values)</font>
 <a name="(line111)"></a>ppTypeDef <font color=Cyan>(</font>EnumDef n es<font color=Cyan>)</font> <font color=Red>=</font>
 <a name="(line112)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font>
 <a name="(line113)"></a>    <font color=Cyan>(</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>
@@ -150,86 +150,86 @@
 <a name="(line148)"></a><a name="ppAName"></a><font color=Blue>-- | Pretty print Haskell attributes name.</font>
 <a name="(line149)"></a>ppAName <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc
 <a name="(line150)"></a>ppAName <font color=Cyan>(</font>Name <font color=Green><u>_</u></font> s<font color=Cyan>)</font> <font color=Red>=</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"_Attrs"</font>
-<a name="(line151)"></a>                      
-<a name="(line152)"></a><a name="derives"></a>derives <font color=Red>=</font> text <font color=Magenta>"deriving"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>commaList <font color=Cyan>(</font>map text <font color=Red>[</font><font color=Magenta>"Eq"</font><font color=Cyan>,</font><font color=Magenta>"Show"</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line153)"></a>
+<a name="(line151)"></a>
+<a name="(line152)"></a><a name="derives"></a>derives <font color=Red>::</font> Doc
+<a name="(line153)"></a>derives <font color=Red>=</font> text <font color=Magenta>"deriving"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>commaList <font color=Cyan>(</font>map text <font color=Red>[</font><font color=Magenta>"Eq"</font><font color=Cyan>,</font><font color=Magenta>"Show"</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>
 <a name="(line154)"></a>
-<a name="(line155)"></a><font color=Blue>---- Some operations on Names ----</font>
-<a name="(line156)"></a>
-<a name="(line157)"></a><a name="name"></a><font color=Blue>-- | Make a type name valid in both XML and Haskell.</font>
-<a name="(line158)"></a>name <font color=Red>::</font> String <font color=Red>-&gt;</font> Name
-<a name="(line159)"></a>name n     <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
-<a name="(line160)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> mangle n <font color=Cyan>}</font>
-<a name="(line161)"></a>
-<a name="(line162)"></a><a name="name_"></a><font color=Blue>-- | Append an underscore to the Haskell version of the name.</font>
-<a name="(line163)"></a>name_ <font color=Red>::</font> String <font color=Red>-&gt;</font> Name
-<a name="(line164)"></a>name_ n    <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
-<a name="(line165)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> mangle n <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>}</font>
-<a name="(line166)"></a>
-<a name="(line167)"></a><a name="name_a"></a><font color=Blue>-- | Prefix an attribute enumeration type name with its containing element</font>
-<a name="(line168)"></a><font color=Blue>--   name.</font>
-<a name="(line169)"></a>name_a <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Name
-<a name="(line170)"></a>name_a e n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
-<a name="(line171)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> mangle e <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify n <font color=Cyan>}</font>
-<a name="(line172)"></a>
-<a name="(line173)"></a><a name="name_ac"></a><font color=Blue>-- | Prefix an attribute enumeration constructor with its element-tag name,</font>
-<a name="(line174)"></a><font color=Blue>--   and its enumeration type name.</font>
-<a name="(line175)"></a>name_ac <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Name
-<a name="(line176)"></a>name_ac e t n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
-<a name="(line177)"></a>                     <font color=Cyan>,</font> hName <font color=Red>=</font> mangle e <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify t
-<a name="(line178)"></a>                                        <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify n <font color=Cyan>}</font>
-<a name="(line179)"></a>
-<a name="(line180)"></a><a name="name_f"></a><font color=Blue>-- | Prefix a field name with its enclosing element name.</font>
-<a name="(line181)"></a>name_f <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Name
-<a name="(line182)"></a>name_f e n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
-<a name="(line183)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> manglef e <font color=Cyan>++</font> mangle n <font color=Cyan>}</font>
-<a name="(line184)"></a>
-<a name="(line185)"></a><font color=Blue>---- obsolete</font>
-<a name="(line186)"></a><font color=Blue>-- elementname_at :: String -&gt; Name</font>
-<a name="(line187)"></a><font color=Blue>-- elementname_at n  = Name n (mangle n ++ "_Attrs")</font>
-<a name="(line188)"></a>
-<a name="(line189)"></a><a name="mangle"></a><font color=Blue>-- | Convert an XML name to a Haskell conid.</font>
-<a name="(line190)"></a>mangle <font color=Red>::</font> String <font color=Red>-&gt;</font> String
-<a name="(line191)"></a>mangle <font color=Cyan>(</font>n<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
-<a name="(line192)"></a>    <font color=Red>|</font> isLower n   <font color=Red>=</font> notPrelude <font color=Cyan>(</font>toUpper n<font color=Red><b>:</b></font> map decolonify ns<font color=Cyan>)</font>
-<a name="(line193)"></a>    <font color=Red>|</font> isDigit n   <font color=Red>=</font> <font color=Magenta>'I'</font><font color=Red><b>:</b></font> n<font color=Red><b>:</b></font> map decolonify ns
-<a name="(line194)"></a>    <font color=Red>|</font> otherwise   <font color=Red>=</font> notPrelude <font color=Cyan>(</font>n<font color=Red><b>:</b></font> map decolonify ns<font color=Cyan>)</font>
-<a name="(line195)"></a>
-<a name="(line196)"></a><a name="notPrelude"></a><font color=Blue>-- | Ensure a generated name does not conflict with a standard haskell one.</font>
-<a name="(line197)"></a>notPrelude <font color=Red>::</font> String <font color=Red>-&gt;</font> String
-<a name="(line198)"></a>notPrelude <font color=Magenta>"String"</font>  <font color=Red>=</font> <font color=Magenta>"AString"</font>
-<a name="(line199)"></a>notPrelude <font color=Magenta>"Maybe"</font>   <font color=Red>=</font> <font color=Magenta>"AMaybe"</font>
-<a name="(line200)"></a>notPrelude <font color=Magenta>"Either"</font>  <font color=Red>=</font> <font color=Magenta>"AEither"</font>
+<a name="(line155)"></a>
+<a name="(line156)"></a><font color=Blue>---- Some operations on Names ----</font>
+<a name="(line157)"></a>
+<a name="(line158)"></a><a name="name"></a><font color=Blue>-- | Make a type name valid in both XML and Haskell.</font>
+<a name="(line159)"></a>name <font color=Red>::</font> String <font color=Red>-&gt;</font> Name
+<a name="(line160)"></a>name n     <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
+<a name="(line161)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> mangle n <font color=Cyan>}</font>
+<a name="(line162)"></a>
+<a name="(line163)"></a><a name="name_"></a><font color=Blue>-- | Append an underscore to the Haskell version of the name.</font>
+<a name="(line164)"></a>name_ <font color=Red>::</font> String <font color=Red>-&gt;</font> Name
+<a name="(line165)"></a>name_ n    <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
+<a name="(line166)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> mangle n <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>}</font>
+<a name="(line167)"></a>
+<a name="(line168)"></a><a name="name_a"></a><font color=Blue>-- | Prefix an attribute enumeration type name with its containing element</font>
+<a name="(line169)"></a><font color=Blue>--   name.</font>
+<a name="(line170)"></a>name_a <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Name
+<a name="(line171)"></a>name_a e n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
+<a name="(line172)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> mangle e <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify n <font color=Cyan>}</font>
+<a name="(line173)"></a>
+<a name="(line174)"></a><a name="name_ac"></a><font color=Blue>-- | Prefix an attribute enumeration constructor with its element-tag name,</font>
+<a name="(line175)"></a><font color=Blue>--   and its enumeration type name.</font>
+<a name="(line176)"></a>name_ac <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Name
+<a name="(line177)"></a>name_ac e t n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
+<a name="(line178)"></a>                     <font color=Cyan>,</font> hName <font color=Red>=</font> mangle e <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify t
+<a name="(line179)"></a>                                        <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify n <font color=Cyan>}</font>
+<a name="(line180)"></a>
+<a name="(line181)"></a><a name="name_f"></a><font color=Blue>-- | Prefix a field name with its enclosing element name.</font>
+<a name="(line182)"></a>name_f <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Name
+<a name="(line183)"></a>name_f e n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
+<a name="(line184)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> manglef e <font color=Cyan>++</font> mangle n <font color=Cyan>}</font>
+<a name="(line185)"></a>
+<a name="(line186)"></a><font color=Blue>---- obsolete</font>
+<a name="(line187)"></a><font color=Blue>-- elementname_at :: String -&gt; Name</font>
+<a name="(line188)"></a><font color=Blue>-- elementname_at n  = Name n (mangle n ++ "_Attrs")</font>
+<a name="(line189)"></a>
+<a name="(line190)"></a><a name="mangle"></a><font color=Blue>-- | Convert an XML name to a Haskell conid.</font>
+<a name="(line191)"></a>mangle <font color=Red>::</font> String <font color=Red>-&gt;</font> String
+<a name="(line192)"></a>mangle <font color=Cyan>(</font>n<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
+<a name="(line193)"></a>    <font color=Red>|</font> isLower n   <font color=Red>=</font> notPrelude <font color=Cyan>(</font>toUpper n<font color=Red><b>:</b></font> map decolonify ns<font color=Cyan>)</font>
+<a name="(line194)"></a>    <font color=Red>|</font> isDigit n   <font color=Red>=</font> <font color=Magenta>'I'</font><font color=Red><b>:</b></font> n<font color=Red><b>:</b></font> map decolonify ns
+<a name="(line195)"></a>    <font color=Red>|</font> otherwise   <font color=Red>=</font> notPrelude <font color=Cyan>(</font>n<font color=Red><b>:</b></font> map decolonify ns<font color=Cyan>)</font>
+<a name="(line196)"></a>
+<a name="(line197)"></a><a name="notPrelude"></a><font color=Blue>-- | Ensure a generated name does not conflict with a standard haskell one.</font>
+<a name="(line198)"></a>notPrelude <font color=Red>::</font> String <font color=Red>-&gt;</font> String
+<a name="(line199)"></a>notPrelude <font color=Magenta>"Bool"</font>    <font color=Red>=</font> <font color=Magenta>"ABool"</font>
+<a name="(line200)"></a>notPrelude <font color=Magenta>"Bounded"</font> <font color=Red>=</font> <font color=Magenta>"ABounded"</font>
 <a name="(line201)"></a>notPrelude <font color=Magenta>"Char"</font>    <font color=Red>=</font> <font color=Magenta>"AChar"</font>
-<a name="(line202)"></a>notPrelude <font color=Magenta>"String"</font>  <font color=Red>=</font> <font color=Magenta>"AString"</font>
-<a name="(line203)"></a>notPrelude <font color=Magenta>"Int"</font>     <font color=Red>=</font> <font color=Magenta>"AInt"</font>
-<a name="(line204)"></a>notPrelude <font color=Magenta>"Integer"</font> <font color=Red>=</font> <font color=Magenta>"AInteger"</font>
-<a name="(line205)"></a>notPrelude <font color=Magenta>"Float"</font>   <font color=Red>=</font> <font color=Magenta>"AFloat"</font>
-<a name="(line206)"></a>notPrelude <font color=Magenta>"Double"</font>  <font color=Red>=</font> <font color=Magenta>"ADouble"</font>
-<a name="(line207)"></a>notPrelude <font color=Magenta>"List1"</font>   <font color=Red>=</font> <font color=Magenta>"AList1"</font>	<font color=Blue>-- part of HaXml</font>
-<a name="(line208)"></a>notPrelude <font color=Magenta>"IO"</font>      <font color=Red>=</font> <font color=Magenta>"AIO"</font>
-<a name="(line209)"></a>notPrelude <font color=Magenta>"IOError"</font> <font color=Red>=</font> <font color=Magenta>"AIOError"</font>
-<a name="(line210)"></a>notPrelude <font color=Magenta>"FilePath"</font><font color=Red>=</font> <font color=Magenta>"AFilePath"</font>
-<a name="(line211)"></a>notPrelude <font color=Magenta>"Bool"</font>    <font color=Red>=</font> <font color=Magenta>"ABool"</font>
-<a name="(line212)"></a>notPrelude <font color=Magenta>"Ordering"</font><font color=Red>=</font> <font color=Magenta>"AOrdering"</font>
-<a name="(line213)"></a>notPrelude <font color=Magenta>"Eq"</font>      <font color=Red>=</font> <font color=Magenta>"AEq"</font>
-<a name="(line214)"></a>notPrelude <font color=Magenta>"Ord"</font>     <font color=Red>=</font> <font color=Magenta>"AOrd"</font>
-<a name="(line215)"></a>notPrelude <font color=Magenta>"Enum"</font>    <font color=Red>=</font> <font color=Magenta>"AEnum"</font>
-<a name="(line216)"></a>notPrelude <font color=Magenta>"Bounded"</font> <font color=Red>=</font> <font color=Magenta>"ABounded"</font>
-<a name="(line217)"></a>notPrelude <font color=Magenta>"Functor"</font> <font color=Red>=</font> <font color=Magenta>"AFunctor"</font>
+<a name="(line202)"></a>notPrelude <font color=Magenta>"Double"</font>  <font color=Red>=</font> <font color=Magenta>"ADouble"</font>
+<a name="(line203)"></a>notPrelude <font color=Magenta>"Either"</font>  <font color=Red>=</font> <font color=Magenta>"AEither"</font>
+<a name="(line204)"></a>notPrelude <font color=Magenta>"Enum"</font>    <font color=Red>=</font> <font color=Magenta>"AEnum"</font>
+<a name="(line205)"></a>notPrelude <font color=Magenta>"Eq"</font>      <font color=Red>=</font> <font color=Magenta>"AEq"</font>
+<a name="(line206)"></a>notPrelude <font color=Magenta>"FilePath"</font><font color=Red>=</font> <font color=Magenta>"AFilePath"</font>
+<a name="(line207)"></a>notPrelude <font color=Magenta>"Float"</font>   <font color=Red>=</font> <font color=Magenta>"AFloat"</font>
+<a name="(line208)"></a>notPrelude <font color=Magenta>"Floating"</font><font color=Red>=</font> <font color=Magenta>"AFloating"</font>
+<a name="(line209)"></a>notPrelude <font color=Magenta>"Fractional"</font><font color=Red>=</font> <font color=Magenta>"AFractional"</font>
+<a name="(line210)"></a>notPrelude <font color=Magenta>"Functor"</font> <font color=Red>=</font> <font color=Magenta>"AFunctor"</font>
+<a name="(line211)"></a>notPrelude <font color=Magenta>"IO"</font>      <font color=Red>=</font> <font color=Magenta>"AIO"</font>
+<a name="(line212)"></a>notPrelude <font color=Magenta>"IOError"</font> <font color=Red>=</font> <font color=Magenta>"AIOError"</font>
+<a name="(line213)"></a>notPrelude <font color=Magenta>"Int"</font>     <font color=Red>=</font> <font color=Magenta>"AInt"</font>
+<a name="(line214)"></a>notPrelude <font color=Magenta>"Integer"</font> <font color=Red>=</font> <font color=Magenta>"AInteger"</font>
+<a name="(line215)"></a>notPrelude <font color=Magenta>"Integral"</font><font color=Red>=</font> <font color=Magenta>"AIntegral"</font>
+<a name="(line216)"></a>notPrelude <font color=Magenta>"List1"</font>   <font color=Red>=</font> <font color=Magenta>"AList1"</font> <font color=Blue>-- part of HaXml</font>
+<a name="(line217)"></a>notPrelude <font color=Magenta>"Maybe"</font>   <font color=Red>=</font> <font color=Magenta>"AMaybe"</font>
 <a name="(line218)"></a>notPrelude <font color=Magenta>"Monad"</font>   <font color=Red>=</font> <font color=Magenta>"AMonad"</font>
-<a name="(line219)"></a>notPrelude <font color=Magenta>"Rational"</font><font color=Red>=</font> <font color=Magenta>"ARational"</font>
-<a name="(line220)"></a>notPrelude <font color=Magenta>"Integral"</font><font color=Red>=</font> <font color=Magenta>"AIntegral"</font>
-<a name="(line221)"></a>notPrelude <font color=Magenta>"Num"</font>     <font color=Red>=</font> <font color=Magenta>"ANum"</font>
-<a name="(line222)"></a>notPrelude <font color=Magenta>"Real"</font>    <font color=Red>=</font> <font color=Magenta>"AReal"</font>
-<a name="(line223)"></a>notPrelude <font color=Magenta>"RealFrac"</font><font color=Red>=</font> <font color=Magenta>"ARealFrac"</font>
-<a name="(line224)"></a>notPrelude <font color=Magenta>"Floating"</font><font color=Red>=</font> <font color=Magenta>"AFloating"</font>
-<a name="(line225)"></a>notPrelude <font color=Magenta>"RealFloat"</font> <font color=Red>=</font> <font color=Magenta>"ARealFloat"</font>
-<a name="(line226)"></a>notPrelude <font color=Magenta>"Fractional"</font><font color=Red>=</font> <font color=Magenta>"AFractional"</font>
-<a name="(line227)"></a>notPrelude <font color=Magenta>"Read"</font>    <font color=Red>=</font> <font color=Magenta>"ARead"</font>
+<a name="(line219)"></a>notPrelude <font color=Magenta>"Num"</font>     <font color=Red>=</font> <font color=Magenta>"ANum"</font>
+<a name="(line220)"></a>notPrelude <font color=Magenta>"Ord"</font>     <font color=Red>=</font> <font color=Magenta>"AOrd"</font>
+<a name="(line221)"></a>notPrelude <font color=Magenta>"Ordering"</font><font color=Red>=</font> <font color=Magenta>"AOrdering"</font>
+<a name="(line222)"></a>notPrelude <font color=Magenta>"Rational"</font><font color=Red>=</font> <font color=Magenta>"ARational"</font>
+<a name="(line223)"></a>notPrelude <font color=Magenta>"Read"</font>    <font color=Red>=</font> <font color=Magenta>"ARead"</font>
+<a name="(line224)"></a>notPrelude <font color=Magenta>"ReadS"</font>   <font color=Red>=</font> <font color=Magenta>"AReadS"</font>
+<a name="(line225)"></a>notPrelude <font color=Magenta>"Real"</font>    <font color=Red>=</font> <font color=Magenta>"AReal"</font>
+<a name="(line226)"></a>notPrelude <font color=Magenta>"RealFloat"</font> <font color=Red>=</font> <font color=Magenta>"ARealFloat"</font>
+<a name="(line227)"></a>notPrelude <font color=Magenta>"RealFrac"</font><font color=Red>=</font> <font color=Magenta>"ARealFrac"</font>
 <a name="(line228)"></a>notPrelude <font color=Magenta>"Show"</font>    <font color=Red>=</font> <font color=Magenta>"AShow"</font>
-<a name="(line229)"></a>notPrelude <font color=Magenta>"ReadS"</font>   <font color=Red>=</font> <font color=Magenta>"AReadS"</font>
-<a name="(line230)"></a>notPrelude <font color=Magenta>"ShowS"</font>   <font color=Red>=</font> <font color=Magenta>"AShowS"</font>
+<a name="(line229)"></a>notPrelude <font color=Magenta>"ShowS"</font>   <font color=Red>=</font> <font color=Magenta>"AShowS"</font>
+<a name="(line230)"></a>notPrelude <font color=Magenta>"String"</font>  <font color=Red>=</font> <font color=Magenta>"AString"</font>
 <a name="(line231)"></a>notPrelude n         <font color=Red>=</font> n
 <a name="(line232)"></a>
 <a name="(line233)"></a><a name="manglef"></a><font color=Blue>-- | Convert an XML name to a Haskell varid.</font>
@@ -246,6 +246,7 @@
 <a name="(line244)"></a>decolonify <font color=Magenta>'.'</font> <font color=Red>=</font> <font color=Magenta>'_'</font>
 <a name="(line245)"></a>decolonify  c  <font color=Red>=</font> c
 <a name="(line246)"></a>
-<a name="(line247)"></a><a name="commaList"></a>commaList <font color=Red>=</font> hcat <font color=Cyan>.</font> intersperse comma
+<a name="(line247)"></a><a name="commaList"></a>commaList <font color=Red>::</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc
+<a name="(line248)"></a>commaList <font color=Red>=</font> hcat <font color=Cyan>.</font> intersperse comma
 </pre>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Escape.html b/docs/HaXml/src/Text/XML/HaXml/Escape.html
--- a/docs/HaXml/src/Text/XML/HaXml/Escape.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Escape.html
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
 <pre><a name="(line1)"></a><font color=Blue>{- This module contains code for escaping/unescaping text in attributes
-<a name="(line2)"></a>   and elements in the HaXml Element type, replacing characters by character 
+<a name="(line2)"></a>   and elements in the HaXml Element type, replacing characters by character
 <a name="(line3)"></a>   references or vice-versa.  Two uses are envisaged for this:
 <a name="(line4)"></a>
 <a name="(line5)"></a>   (1) stopping HaXml generating incorrect XML when a character is included
@@ -23,7 +23,7 @@
 <a name="(line21)"></a>      <font color=Blue>-- Something describing a particular set of escapes.</font>
 <a name="(line22)"></a>
 <a name="(line23)"></a>   stdXmlEscaper<font color=Cyan>,</font>
-<a name="(line24)"></a>      <font color=Blue>-- Standard boilerplate escaper, escaping everything that is </font>
+<a name="(line24)"></a>      <font color=Blue>-- Standard boilerplate escaper, escaping everything that is</font>
 <a name="(line25)"></a>      <font color=Blue>-- nonprintable, non-ASCII, or might conceivably cause problems by</font>
 <a name="(line26)"></a>      <font color=Blue>-- parsing XML, for example quotes, &lt; signs, and ampersands.</font>
 <a name="(line27)"></a>
@@ -58,7 +58,7 @@
 <a name="(line56)"></a>   <font color=Cyan>)</font> <font color=Green><u>where</u></font>
 <a name="(line57)"></a>
 <a name="(line58)"></a><font color=Green><u>import</u></font> Char
-<a name="(line59)"></a><font color=Green><u>import</u></font> Numeric
+<a name="(line59)"></a><font color=Blue>-- import Numeric</font>
 <a name="(line60)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
 <a name="(line61)"></a>
 <a name="(line62)"></a><font color=Magenta><em>#if __GLASGOW_HASKELL__ &gt;= 604 || __NHC__ &gt;= 118 || defined(__HUGS__)</em></font>
@@ -100,16 +100,16 @@
 <a name="(line98)"></a>
 <a name="(line99)"></a>
 <a name="(line100)"></a><a name="xmlEscape"></a>xmlEscape <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> Element i
-<a name="(line101)"></a>xmlEscape xmlEscaper element <font color=Red>=</font> 
+<a name="(line101)"></a>xmlEscape xmlEscaper element <font color=Red>=</font>
 <a name="(line102)"></a>   compressElement <font color=Cyan>(</font>escapeElement xmlEscaper element<font color=Cyan>)</font>
 <a name="(line103)"></a>
 <a name="(line104)"></a><a name="xmlEscapeContent"></a>xmlEscapeContent <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font>
-<a name="(line105)"></a>xmlEscapeContent xmlEscaper cs <font color=Red>=</font> 
+<a name="(line105)"></a>xmlEscapeContent xmlEscaper cs <font color=Red>=</font>
 <a name="(line106)"></a>   compressContent <font color=Cyan>(</font>escapeContent xmlEscaper cs<font color=Cyan>)</font>
 <a name="(line107)"></a>
 <a name="(line108)"></a><a name="escapeElement"></a>escapeElement <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> Element i
 <a name="(line109)"></a>escapeElement xmlEscaper <font color=Cyan>(</font>Elem name attributes content<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line110)"></a>   Elem name <font color=Cyan>(</font>escapeAttributes xmlEscaper attributes<font color=Cyan>)</font> 
+<a name="(line110)"></a>   Elem name <font color=Cyan>(</font>escapeAttributes xmlEscaper attributes<font color=Cyan>)</font>
 <a name="(line111)"></a>      <font color=Cyan>(</font>escapeContent xmlEscaper content<font color=Cyan>)</font>
 <a name="(line112)"></a>
 <a name="(line113)"></a><a name="escapeAttributes"></a>escapeAttributes <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font>
@@ -117,23 +117,23 @@
 <a name="(line115)"></a>   map
 <a name="(line116)"></a>      <font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>name<font color=Cyan>,</font>av<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>name<font color=Cyan>,</font>escapeAttValue xmlEscaper av<font color=Cyan>)</font><font color=Cyan>)</font>
 <a name="(line117)"></a>      atts
-<a name="(line118)"></a>   
+<a name="(line118)"></a>
 <a name="(line119)"></a><a name="escapeAttValue"></a>escapeAttValue <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> AttValue <font color=Red>-&gt;</font> AttValue
 <a name="(line120)"></a>escapeAttValue xmlEscaper <font color=Cyan>(</font>AttValue attValList<font color=Cyan>)</font> <font color=Red>=</font>
 <a name="(line121)"></a>   AttValue <font color=Cyan>(</font>
-<a name="(line122)"></a>      concat <font color=Cyan>(</font> 
+<a name="(line122)"></a>      concat <font color=Cyan>(</font>
 <a name="(line123)"></a>         map
 <a name="(line124)"></a>            <font color=Cyan>(</font><font color=Red>\</font> av <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> av <font color=Green><u>of</u></font>
-<a name="(line125)"></a>               Right ref <font color=Red>-&gt;</font> <font color=Red>[</font>av<font color=Red>]</font>
+<a name="(line125)"></a>               Right <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Red>[</font>av<font color=Red>]</font>
 <a name="(line126)"></a>               Left s <font color=Red>-&gt;</font>
 <a name="(line127)"></a>                  map
-<a name="(line128)"></a>                     <font color=Cyan>(</font><font color=Red>\</font> c <font color=Red>-&gt;</font> <font color=Green><u>if</u></font> isEscape xmlEscaper c 
+<a name="(line128)"></a>                     <font color=Cyan>(</font><font color=Red>\</font> c <font color=Red>-&gt;</font> <font color=Green><u>if</u></font> isEscape xmlEscaper c
 <a name="(line129)"></a>                        <font color=Green><u>then</u></font>
 <a name="(line130)"></a>                           Right <font color=Cyan>(</font>mkEscape xmlEscaper c<font color=Cyan>)</font>
 <a name="(line131)"></a>                        <font color=Green><u>else</u></font>
 <a name="(line132)"></a>                           Left <font color=Red>[</font>c<font color=Red>]</font>
 <a name="(line133)"></a>                        <font color=Cyan>)</font>
-<a name="(line134)"></a>                     s 
+<a name="(line134)"></a>                     s
 <a name="(line135)"></a>               <font color=Cyan>)</font>
 <a name="(line136)"></a>            attValList
 <a name="(line137)"></a>         <font color=Cyan>)</font>
@@ -153,20 +153,20 @@
 <a name="(line151)"></a>                         CString b <font color=Red>[</font>c<font color=Red>]</font> i
 <a name="(line152)"></a>                      <font color=Cyan>)</font>
 <a name="(line153)"></a>                   str
-<a name="(line154)"></a>             <font color=Cyan>(</font>CElem elem i<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>escapeElement xmlEscaper elem<font color=Cyan>)</font> i<font color=Red>]</font>
+<a name="(line154)"></a>             <font color=Cyan>(</font>CElem element i<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>escapeElement xmlEscaper element<font color=Cyan>)</font> i<font color=Red>]</font>
 <a name="(line155)"></a>             <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Red>[</font>content<font color=Red>]</font>
 <a name="(line156)"></a>             <font color=Cyan>)</font>
 <a name="(line157)"></a>          contents
 <a name="(line158)"></a>          <font color=Cyan>)</font>
 <a name="(line159)"></a>
 <a name="(line160)"></a><a name="mkEscape"></a>mkEscape <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Char <font color=Red>-&gt;</font> Reference
-<a name="(line161)"></a>mkEscape <font color=Cyan>(</font>XmlEscaper <font color=Cyan>{</font>toEscape <font color=Red>=</font> toEscape<font color=Cyan>}</font><font color=Cyan>)</font> ch <font color=Red>=</font>
-<a name="(line162)"></a>   <font color=Green><u>case</u></font> lookupFM toEscape ch <font color=Green><u>of</u></font>
+<a name="(line161)"></a>mkEscape <font color=Cyan>(</font>XmlEscaper <font color=Cyan>{</font>toEscape <font color=Red>=</font> toescape<font color=Cyan>}</font><font color=Cyan>)</font> ch <font color=Red>=</font>
+<a name="(line162)"></a>   <font color=Green><u>case</u></font> lookupFM toescape ch <font color=Green><u>of</u></font>
 <a name="(line163)"></a>      Nothing  <font color=Red>-&gt;</font> RefChar <font color=Cyan>(</font>ord ch<font color=Cyan>)</font>
 <a name="(line164)"></a>      Just str <font color=Red>-&gt;</font> RefEntity str
-<a name="(line165)"></a>   <font color=Green><u>where</u></font>
-<a name="(line166)"></a>      showHex <font color=Red>=</font> showIntAtBase <font color=Magenta>16</font> intToDigit 
-<a name="(line167)"></a>      <font color=Blue>-- It should be, but in GHC it isn't.</font>
+<a name="(line165)"></a><font color=Blue>--    where</font>
+<a name="(line166)"></a><font color=Blue>--       _ = showIntAtBase 16 intToDigit</font>
+<a name="(line167)"></a><font color=Blue>--       -- It should be, but in GHC it isn't.</font>
 <a name="(line168)"></a>
 <a name="(line169)"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
 <a name="(line170)"></a><font color=Blue>-- Unescaping</font>
@@ -177,7 +177,7 @@
 <a name="(line175)"></a>   compressElement <font color=Cyan>(</font>unEscapeElement xmlEscaper element<font color=Cyan>)</font>
 <a name="(line176)"></a>
 <a name="(line177)"></a><a name="xmlUnEscapeContent"></a>xmlUnEscapeContent <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font>
-<a name="(line178)"></a>xmlUnEscapeContent xmlEscaper cs <font color=Red>=</font> 
+<a name="(line178)"></a>xmlUnEscapeContent xmlEscaper cs <font color=Red>=</font>
 <a name="(line179)"></a>   compressContent <font color=Cyan>(</font>unEscapeContent xmlEscaper cs<font color=Cyan>)</font>
 <a name="(line180)"></a>
 <a name="(line181)"></a><a name="unEscapeElement"></a>unEscapeElement <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> Element i
@@ -196,7 +196,7 @@
 <a name="(line194)"></a>   AttValue <font color=Cyan>(</font>
 <a name="(line195)"></a>      map
 <a name="(line196)"></a>         <font color=Cyan>(</font><font color=Red>\</font> av <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> av <font color=Green><u>of</u></font>
-<a name="(line197)"></a>            Left s <font color=Red>-&gt;</font> av
+<a name="(line197)"></a>            Left <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> av
 <a name="(line198)"></a>            Right ref <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> unEscapeChar xmlEscaper ref <font color=Green><u>of</u></font>
 <a name="(line199)"></a>               Just c <font color=Red>-&gt;</font> Left <font color=Red>[</font>c<font color=Red>]</font>
 <a name="(line200)"></a>               Nothing <font color=Red>-&gt;</font> av
@@ -207,12 +207,12 @@
 <a name="(line205)"></a><a name="unEscapeContent"></a>unEscapeContent <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font>
 <a name="(line206)"></a>unEscapeContent xmlEscaper content <font color=Red>=</font>
 <a name="(line207)"></a>   map
-<a name="(line208)"></a>      <font color=Cyan>(</font><font color=Red>\</font> content <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> content <font color=Green><u>of</u></font>
+<a name="(line208)"></a>      <font color=Cyan>(</font><font color=Red>\</font> cntnt <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> cntnt <font color=Green><u>of</u></font>
 <a name="(line209)"></a>         CRef ref i <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> unEscapeChar xmlEscaper ref <font color=Green><u>of</u></font>
 <a name="(line210)"></a>            Just c <font color=Red>-&gt;</font> CString False <font color=Red>[</font>c<font color=Red>]</font> i
-<a name="(line211)"></a>            Nothing <font color=Red>-&gt;</font> content
-<a name="(line212)"></a>         CElem elem i <font color=Red>-&gt;</font> CElem <font color=Cyan>(</font>unEscapeElement xmlEscaper elem<font color=Cyan>)</font> i
-<a name="(line213)"></a>         <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> content
+<a name="(line211)"></a>            Nothing <font color=Red>-&gt;</font> cntnt
+<a name="(line212)"></a>         CElem element i <font color=Red>-&gt;</font> CElem <font color=Cyan>(</font>unEscapeElement xmlEscaper element<font color=Cyan>)</font> i
+<a name="(line213)"></a>         <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> cntnt
 <a name="(line214)"></a>         <font color=Cyan>)</font>
 <a name="(line215)"></a>      content
 <a name="(line216)"></a>
@@ -252,11 +252,11 @@
 <a name="(line250)"></a>compressContent [] <font color=Red>=</font> []
 <a name="(line251)"></a>compressContent <font color=Cyan>(</font><font color=Cyan>(</font>csb <font color=Red>@</font> <font color=Cyan>(</font>CString b1 s1 i1<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font>
 <a name="(line252)"></a>   <font color=Green><u>case</u></font> compressContent cs <font color=Green><u>of</u></font>
-<a name="(line253)"></a>      <font color=Cyan>(</font>CString b2 s2 i2<font color=Cyan>)</font> <font color=Red><b>:</b></font> cs2
+<a name="(line253)"></a>      <font color=Cyan>(</font>CString b2 s2 <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red><b>:</b></font> cs2
 <a name="(line254)"></a>          <font color=Red>|</font> b1 <font color=Cyan>==</font> b2
 <a name="(line255)"></a>          <font color=Red>-&gt;</font> CString b1 <font color=Cyan>(</font>s1 <font color=Cyan>++</font> s2<font color=Cyan>)</font> i1<font color=Red><b>:</b></font> cs2
 <a name="(line256)"></a>      cs2 <font color=Red>-&gt;</font> csb <font color=Red><b>:</b></font> cs2
-<a name="(line257)"></a>compressContent <font color=Cyan>(</font>CElem element i <font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font> 
+<a name="(line257)"></a>compressContent <font color=Cyan>(</font>CElem element i <font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font>
 <a name="(line258)"></a>   CElem <font color=Cyan>(</font>compressElement element<font color=Cyan>)</font> i <font color=Red><b>:</b></font> compressContent cs
 <a name="(line259)"></a>compressContent <font color=Cyan>(</font>c <font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font> c <font color=Red><b>:</b></font> compressContent cs
 <a name="(line260)"></a>
@@ -268,7 +268,7 @@
 <a name="(line266)"></a><a name="stdXmlEscaper"></a>stdXmlEscaper <font color=Red>::</font> XmlEscaper
 <a name="(line267)"></a>stdXmlEscaper <font color=Red>=</font> mkXmlEscaper
 <a name="(line268)"></a>   <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>'\60'</font><font color=Cyan>,</font><font color=Magenta>"lt"</font><font color=Cyan>)</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>'\62'</font><font color=Cyan>,</font><font color=Magenta>"gt"</font><font color=Cyan>)</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>'\38'</font><font color=Cyan>,</font><font color=Magenta>"amp"</font><font color=Cyan>)</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>'\39'</font><font color=Cyan>,</font><font color=Magenta>"apos"</font><font color=Cyan>)</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>'\34'</font><font color=Cyan>,</font><font color=Magenta>"quot"</font><font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line269)"></a>   <font color=Cyan>(</font><font color=Red>\</font> ch <font color=Red>-&gt;</font> 
+<a name="(line269)"></a>   <font color=Cyan>(</font><font color=Red>\</font> ch <font color=Red>-&gt;</font>
 <a name="(line270)"></a>      <font color=Green><u>let</u></font>
 <a name="(line271)"></a>         i <font color=Red>=</font> ord ch
 <a name="(line272)"></a>      <font color=Green><u>in</u></font>
@@ -281,14 +281,14 @@
 <a name="(line279)"></a>               <font color=Magenta>'&gt;'</font> <font color=Red>-&gt;</font> True
 <a name="(line280)"></a>               <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> False
 <a name="(line281)"></a>      <font color=Cyan>)</font>
-<a name="(line282)"></a>             
-<a name="(line283)"></a>            
+<a name="(line282)"></a>
+<a name="(line283)"></a>
 <a name="(line284)"></a><a name="mkXmlEscaper"></a>mkXmlEscaper <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>Char<font color=Cyan>,</font>String<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Char <font color=Red>-&gt;</font> Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> XmlEscaper
-<a name="(line285)"></a>mkXmlEscaper escapes isEscape <font color=Red>=</font>
+<a name="(line285)"></a>mkXmlEscaper escapes isescape <font color=Red>=</font>
 <a name="(line286)"></a>   XmlEscaper <font color=Cyan>{</font>
 <a name="(line287)"></a>      toEscape <font color=Red>=</font> listToFM escapes<font color=Cyan>,</font>
 <a name="(line288)"></a>      fromEscape <font color=Red>=</font> listToFM <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>c<font color=Cyan>,</font>str<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>str<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> escapes<font color=Cyan>)</font><font color=Cyan>,</font>
-<a name="(line289)"></a>      isEscape <font color=Red>=</font> isEscape
+<a name="(line289)"></a>      isEscape <font color=Red>=</font> isescape
 <a name="(line290)"></a>      <font color=Cyan>}</font>
 <a name="(line291)"></a>
 </pre>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Html/Generate.html b/docs/HaXml/src/Text/XML/HaXml/Html/Generate.html
--- a/docs/HaXml/src/Text/XML/HaXml/Html/Generate.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Html/Generate.html
@@ -31,149 +31,149 @@
 <a name="(line29)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
 <a name="(line30)"></a>
 <a name="(line31)"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>isSpace<font color=Cyan>)</font>
-<a name="(line32)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>partition<font color=Cyan>)</font>
-<a name="(line33)"></a>
-<a name="(line34)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
-<a name="(line35)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators
-<a name="(line36)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ <font color=Green><u>as</u></font> Pretty
-<a name="(line37)"></a>
-<a name="(line38)"></a><font color=Blue>---- Constructor functions</font>
-<a name="(line39)"></a>
-<a name="(line40)"></a><a name="html"></a>html<font color=Cyan>,</font> hhead<font color=Cyan>,</font> htitle<font color=Cyan>,</font> hbody<font color=Cyan>,</font> h1<font color=Cyan>,</font> h2<font color=Cyan>,</font> h3<font color=Cyan>,</font> h4<font color=Cyan>,</font> hpara<font color=Cyan>,</font> hpre<font color=Cyan>,</font> hcentre<font color=Cyan>,</font>
-<a name="(line41)"></a>    hem<font color=Cyan>,</font> htt<font color=Cyan>,</font> hbold<font color=Cyan>,</font> htable<font color=Cyan>,</font> hrow<font color=Cyan>,</font> hcol<font color=Cyan>,</font> hdiv<font color=Cyan>,</font> hspan<font color=Cyan>,</font> margin
-<a name="(line42)"></a>       <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i
-<a name="(line43)"></a>html    <font color=Red>=</font> mkElem <font color=Magenta>"html"</font>
-<a name="(line44)"></a><a name="hhead"></a>hhead   <font color=Red>=</font> mkElem <font color=Magenta>"head"</font>
-<a name="(line45)"></a><a name="htitle"></a>htitle  <font color=Red>=</font> mkElem <font color=Magenta>"title"</font>
-<a name="(line46)"></a><a name="hbody"></a>hbody   <font color=Red>=</font> mkElem <font color=Magenta>"body"</font>
-<a name="(line47)"></a><a name="h1"></a>h1      <font color=Red>=</font> mkElem <font color=Magenta>"h1"</font>
-<a name="(line48)"></a><a name="h2"></a>h2      <font color=Red>=</font> mkElem <font color=Magenta>"h2"</font>
-<a name="(line49)"></a><a name="h3"></a>h3      <font color=Red>=</font> mkElem <font color=Magenta>"h3"</font>
-<a name="(line50)"></a><a name="h4"></a>h4      <font color=Red>=</font> mkElem <font color=Magenta>"h4"</font>
-<a name="(line51)"></a><a name="hpara"></a>hpara   <font color=Red>=</font> mkElem <font color=Magenta>"p"</font>
-<a name="(line52)"></a><a name="hpre"></a>hpre    <font color=Red>=</font> mkElem <font color=Magenta>"pre"</font>
-<a name="(line53)"></a><a name="hcentre"></a>hcentre <font color=Red>=</font> mkElem <font color=Magenta>"center"</font>
-<a name="(line54)"></a><a name="hem"></a>hem     <font color=Red>=</font> mkElem <font color=Magenta>"em"</font>
-<a name="(line55)"></a><a name="htt"></a>htt     <font color=Red>=</font> mkElem <font color=Magenta>"tt"</font>
-<a name="(line56)"></a><a name="hbold"></a>hbold   <font color=Red>=</font> mkElem <font color=Magenta>"b"</font>
-<a name="(line57)"></a>
-<a name="(line58)"></a><a name="htable"></a>htable <font color=Red>=</font> mkElem <font color=Magenta>"table"</font>
-<a name="(line59)"></a><a name="hrow"></a>hrow   <font color=Red>=</font> mkElem <font color=Magenta>"tr"</font>
-<a name="(line60)"></a><a name="hcol"></a>hcol   <font color=Red>=</font> mkElem <font color=Magenta>"td"</font>
-<a name="(line61)"></a>
-<a name="(line62)"></a><a name="hdiv"></a>hdiv   <font color=Red>=</font> mkElem <font color=Magenta>"div"</font>
-<a name="(line63)"></a><a name="hspan"></a>hspan  <font color=Red>=</font> mkElem <font color=Magenta>"span"</font>
-<a name="(line64)"></a><a name="margin"></a>margin <font color=Red>=</font> mkElemAttr <font color=Magenta>"div"</font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"margin-left"</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>"2em"</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>,</font>
-<a name="(line65)"></a>                           <font color=Cyan>(</font><font color=Magenta>"margin-top"</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"1em"</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line66)"></a>
-<a name="(line67)"></a><a name="anchor"></a>anchor      <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font> CFilter i<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter  i
-<a name="(line68)"></a>anchor       <font color=Red>=</font> mkElemAttr <font color=Magenta>"a"</font>
-<a name="(line69)"></a>
-<a name="(line70)"></a><a name="makehref"></a>makehref<font color=Cyan>,</font> anchorname <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i
-<a name="(line71)"></a>makehref r   <font color=Red>=</font> anchor <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"href"</font><font color=Cyan>,</font>r<font color=Cyan>)</font> <font color=Red>]</font>
-<a name="(line72)"></a><a name="anchorname"></a>anchorname n <font color=Red>=</font> anchor <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"name"</font><font color=Cyan>,</font>n<font color=Cyan>)</font> <font color=Red>]</font>
+<a name="(line32)"></a>
+<a name="(line33)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
+<a name="(line34)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators
+<a name="(line35)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ <font color=Green><u>as</u></font> Pretty
+<a name="(line36)"></a>
+<a name="(line37)"></a><font color=Blue>---- Constructor functions</font>
+<a name="(line38)"></a>
+<a name="(line39)"></a><a name="html"></a>html<font color=Cyan>,</font> hhead<font color=Cyan>,</font> htitle<font color=Cyan>,</font> hbody<font color=Cyan>,</font> h1<font color=Cyan>,</font> h2<font color=Cyan>,</font> h3<font color=Cyan>,</font> h4<font color=Cyan>,</font> hpara<font color=Cyan>,</font> hpre<font color=Cyan>,</font> hcentre<font color=Cyan>,</font>
+<a name="(line40)"></a>    hem<font color=Cyan>,</font> htt<font color=Cyan>,</font> hbold<font color=Cyan>,</font> htable<font color=Cyan>,</font> hrow<font color=Cyan>,</font> hcol<font color=Cyan>,</font> hdiv<font color=Cyan>,</font> hspan<font color=Cyan>,</font> margin
+<a name="(line41)"></a>       <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i
+<a name="(line42)"></a>html    <font color=Red>=</font> mkElem <font color=Magenta>"html"</font>
+<a name="(line43)"></a><a name="hhead"></a>hhead   <font color=Red>=</font> mkElem <font color=Magenta>"head"</font>
+<a name="(line44)"></a><a name="htitle"></a>htitle  <font color=Red>=</font> mkElem <font color=Magenta>"title"</font>
+<a name="(line45)"></a><a name="hbody"></a>hbody   <font color=Red>=</font> mkElem <font color=Magenta>"body"</font>
+<a name="(line46)"></a><a name="h1"></a>h1      <font color=Red>=</font> mkElem <font color=Magenta>"h1"</font>
+<a name="(line47)"></a><a name="h2"></a>h2      <font color=Red>=</font> mkElem <font color=Magenta>"h2"</font>
+<a name="(line48)"></a><a name="h3"></a>h3      <font color=Red>=</font> mkElem <font color=Magenta>"h3"</font>
+<a name="(line49)"></a><a name="h4"></a>h4      <font color=Red>=</font> mkElem <font color=Magenta>"h4"</font>
+<a name="(line50)"></a><a name="hpara"></a>hpara   <font color=Red>=</font> mkElem <font color=Magenta>"p"</font>
+<a name="(line51)"></a><a name="hpre"></a>hpre    <font color=Red>=</font> mkElem <font color=Magenta>"pre"</font>
+<a name="(line52)"></a><a name="hcentre"></a>hcentre <font color=Red>=</font> mkElem <font color=Magenta>"center"</font>
+<a name="(line53)"></a><a name="hem"></a>hem     <font color=Red>=</font> mkElem <font color=Magenta>"em"</font>
+<a name="(line54)"></a><a name="htt"></a>htt     <font color=Red>=</font> mkElem <font color=Magenta>"tt"</font>
+<a name="(line55)"></a><a name="hbold"></a>hbold   <font color=Red>=</font> mkElem <font color=Magenta>"b"</font>
+<a name="(line56)"></a>
+<a name="(line57)"></a><a name="htable"></a>htable <font color=Red>=</font> mkElem <font color=Magenta>"table"</font>
+<a name="(line58)"></a><a name="hrow"></a>hrow   <font color=Red>=</font> mkElem <font color=Magenta>"tr"</font>
+<a name="(line59)"></a><a name="hcol"></a>hcol   <font color=Red>=</font> mkElem <font color=Magenta>"td"</font>
+<a name="(line60)"></a>
+<a name="(line61)"></a><a name="hdiv"></a>hdiv   <font color=Red>=</font> mkElem <font color=Magenta>"div"</font>
+<a name="(line62)"></a><a name="hspan"></a>hspan  <font color=Red>=</font> mkElem <font color=Magenta>"span"</font>
+<a name="(line63)"></a><a name="margin"></a>margin <font color=Red>=</font> mkElemAttr <font color=Magenta>"div"</font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"margin-left"</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>"2em"</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>,</font>
+<a name="(line64)"></a>                           <font color=Cyan>(</font><font color=Magenta>"margin-top"</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"1em"</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>
+<a name="(line65)"></a>
+<a name="(line66)"></a><a name="anchor"></a>anchor      <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font> CFilter i<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter  i
+<a name="(line67)"></a>anchor       <font color=Red>=</font> mkElemAttr <font color=Magenta>"a"</font>
+<a name="(line68)"></a>
+<a name="(line69)"></a><a name="makehref"></a>makehref<font color=Cyan>,</font> anchorname <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i
+<a name="(line70)"></a>makehref r   <font color=Red>=</font> anchor <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"href"</font><font color=Cyan>,</font>r<font color=Cyan>)</font> <font color=Red>]</font>
+<a name="(line71)"></a><a name="anchorname"></a>anchorname n <font color=Red>=</font> anchor <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"name"</font><font color=Cyan>,</font>n<font color=Cyan>)</font> <font color=Red>]</font>
+<a name="(line72)"></a>
 <a name="(line73)"></a>
-<a name="(line74)"></a>
-<a name="(line75)"></a><a name="hbr"></a>hbr<font color=Cyan>,</font> hhr <font color=Red>::</font> CFilter i
-<a name="(line76)"></a>hbr       <font color=Red>=</font> mkElem <font color=Magenta>"br"</font> []
-<a name="(line77)"></a><a name="hhr"></a>hhr       <font color=Red>=</font> mkElem <font color=Magenta>"hr"</font> []
+<a name="(line74)"></a><a name="hbr"></a>hbr<font color=Cyan>,</font> hhr <font color=Red>::</font> CFilter i
+<a name="(line75)"></a>hbr       <font color=Red>=</font> mkElem <font color=Magenta>"br"</font> []
+<a name="(line76)"></a><a name="hhr"></a>hhr       <font color=Red>=</font> mkElem <font color=Magenta>"hr"</font> []
+<a name="(line77)"></a>
 <a name="(line78)"></a>
-<a name="(line79)"></a>
-<a name="(line80)"></a><a name="showattr"></a>showattr<font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i
-<a name="(line81)"></a>showattr n <font color=Red>=</font> find n literal
-<a name="(line82)"></a><a name="!"></a><font color=Cyan>(</font><font color=Cyan>!</font><font color=Cyan>)</font> <font color=Red>=</font> literal
-<a name="(line83)"></a><a name="?"></a><font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>=</font> showattr
-<a name="(line84)"></a>
-<a name="(line85)"></a><a name="parens"></a>parens <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line86)"></a>parens f <font color=Red>=</font> cat <font color=Red>[</font> literal <font color=Magenta>"("</font><font color=Cyan>,</font> f<font color=Cyan>,</font> literal <font color=Magenta>")"</font> <font color=Red>]</font>
-<a name="(line87)"></a>
-<a name="(line88)"></a><a name="bullet"></a>bullet <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i
-<a name="(line89)"></a>bullet <font color=Red>=</font> cat <font color=Cyan>.</font> <font color=Cyan>(</font>literal <font color=Magenta>"M-^U"</font><font color=Red><b>:</b></font><font color=Cyan>)</font>
+<a name="(line79)"></a><a name="showattr"></a>showattr<font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i
+<a name="(line80)"></a>showattr n <font color=Red>=</font> find n literal
+<a name="(line81)"></a><a name="!"></a><font color=Cyan>(</font><font color=Cyan>!</font><font color=Cyan>)</font> <font color=Red>=</font> literal
+<a name="(line82)"></a><a name="?"></a><font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>=</font> showattr
+<a name="(line83)"></a>
+<a name="(line84)"></a><a name="parens"></a>parens <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="(line85)"></a>parens f <font color=Red>=</font> cat <font color=Red>[</font> literal <font color=Magenta>"("</font><font color=Cyan>,</font> f<font color=Cyan>,</font> literal <font color=Magenta>")"</font> <font color=Red>]</font>
+<a name="(line86)"></a>
+<a name="(line87)"></a><a name="bullet"></a>bullet <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i
+<a name="(line88)"></a>bullet <font color=Red>=</font> cat <font color=Cyan>.</font> <font color=Cyan>(</font>literal <font color=Magenta>"M-^U"</font><font color=Red><b>:</b></font><font color=Cyan>)</font>
+<a name="(line89)"></a>
 <a name="(line90)"></a>
-<a name="(line91)"></a>
-<a name="(line92)"></a><font color=Blue>---- Printing function</font>
-<a name="(line93)"></a>
-<a name="(line94)"></a><font color=Blue>-- htmlprint :: [Content] -&gt; String</font>
-<a name="(line95)"></a><font color=Blue>-- htmlprint = concatMap cprint</font>
-<a name="(line96)"></a><font color=Blue>--   where</font>
-<a name="(line97)"></a><font color=Blue>--   cprint (CElem e _) = elem e </font>
-<a name="(line98)"></a><font color=Blue>--   cprint (CString _ s) = s</font>
-<a name="(line99)"></a><font color=Blue>--   cprint (CMisc m) = ""</font>
-<a name="(line100)"></a><font color=Blue>--  </font>
-<a name="(line101)"></a><font color=Blue>--   elem (Elem n as []) = "\n&lt;"++n++attrs as++" /&gt;"</font>
-<a name="(line102)"></a><font color=Blue>--   elem (Elem n as cs) = "\n&lt;"++n++attrs as++"&gt;"++htmlprint cs++"\n&lt;/"++n++"&gt;"</font>
-<a name="(line103)"></a><font color=Blue>-- </font>
-<a name="(line104)"></a><font color=Blue>--   attrs = concatMap attr</font>
-<a name="(line105)"></a><font color=Blue>--   attr (n,v) = " "++n++"='"++v++"'"</font>
+<a name="(line91)"></a><font color=Blue>---- Printing function</font>
+<a name="(line92)"></a>
+<a name="(line93)"></a><font color=Blue>-- htmlprint :: [Content] -&gt; String</font>
+<a name="(line94)"></a><font color=Blue>-- htmlprint = concatMap cprint</font>
+<a name="(line95)"></a><font color=Blue>--   where</font>
+<a name="(line96)"></a><font color=Blue>--   cprint (CElem e _) = elem e</font>
+<a name="(line97)"></a><font color=Blue>--   cprint (CString _ s) = s</font>
+<a name="(line98)"></a><font color=Blue>--   cprint (CMisc m) = ""</font>
+<a name="(line99)"></a><font color=Blue>--</font>
+<a name="(line100)"></a><font color=Blue>--   elem (Elem n as []) = "\n&lt;"++n++attrs as++" /&gt;"</font>
+<a name="(line101)"></a><font color=Blue>--   elem (Elem n as cs) = "\n&lt;"++n++attrs as++"&gt;"++htmlprint cs++"\n&lt;/"++n++"&gt;"</font>
+<a name="(line102)"></a><font color=Blue>--</font>
+<a name="(line103)"></a><font color=Blue>--   attrs = concatMap attr</font>
+<a name="(line104)"></a><font color=Blue>--   attr (n,v) = " "++n++"='"++v++"'"</font>
+<a name="(line105)"></a>
 <a name="(line106)"></a>
-<a name="(line107)"></a>
-<a name="(line108)"></a><a name="htmlprint"></a>htmlprint <font color=Red>::</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-&gt;</font> Pretty<font color=Cyan>.</font>Doc
-<a name="(line109)"></a>htmlprint <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>.</font> map cprint <font color=Cyan>.</font> foldrefs 
-<a name="(line110)"></a>  <font color=Green><u>where</u></font>
-<a name="(line111)"></a>  foldrefs [] <font color=Red>=</font> []
-<a name="(line112)"></a>  foldrefs <font color=Cyan>(</font>CString ws s1 i<font color=Red><b>:</b></font>CRef r <font color=Green><u>_</u></font><font color=Red><b>:</b></font>CString <font color=Green><u>_</u></font> s2 <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line113)"></a>              CString ws <font color=Cyan>(</font>s1<font color=Cyan>++</font><font color=Magenta>"&amp;"</font><font color=Cyan>++</font>ref r<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>++</font>s2<font color=Cyan>)</font> i<font color=Red><b>:</b></font> foldrefs cs
-<a name="(line114)"></a>  foldrefs <font color=Cyan>(</font>c<font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>=</font> c <font color=Red><b>:</b></font> foldrefs cs
-<a name="(line115)"></a>
-<a name="(line116)"></a><font color=Blue>--ref (RefEntity (EntityRef n)) = n	-- Actually, should look-up symtable.</font>
-<a name="(line117)"></a><font color=Blue>--ref (RefChar (CharRef s)) = s</font>
-<a name="(line118)"></a>  ref <font color=Cyan>(</font>RefEntity n<font color=Cyan>)</font> <font color=Red>=</font> n	<font color=Blue>-- Actually, should look-up symtable.</font>
-<a name="(line119)"></a>  ref <font color=Cyan>(</font>RefChar s<font color=Cyan>)</font> <font color=Red>=</font> show s
-<a name="(line120)"></a>
-<a name="(line121)"></a>  cprint <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> elem e
-<a name="(line122)"></a>  cprint <font color=Cyan>(</font>CString ws s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>(</font>map Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font>fmt <font color=Magenta>60</font>
-<a name="(line123)"></a>                                             <font color=Cyan>(</font><font color=Cyan>(</font><font color=Green><u>if</u></font> ws <font color=Green><u>then</u></font> id <font color=Green><u>else</u></font> deSpace<font color=Cyan>)</font> s<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line124)"></a>  cprint <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>       <font color=Red>=</font> Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font><font color=Magenta>"&amp;"</font><font color=Cyan>++</font>ref r<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
-<a name="(line125)"></a>  cprint <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> Pretty<font color=Cyan>.</font>empty
-<a name="(line126)"></a> 
-<a name="(line127)"></a>  elem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"&lt;"</font>   Pretty<font color=Cyan>.&lt;&gt;</font>
-<a name="(line128)"></a>                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>
-<a name="(line129)"></a>                        attrs <font color=Green><u>as</u></font>          Pretty<font color=Cyan>.&lt;&gt;</font>
-<a name="(line130)"></a>                        Pretty<font color=Cyan>.</font>text <font color=Magenta>" /&gt;"</font>
-<a name="(line131)"></a>  elem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line132)"></a>                    <font color=Blue>--  ( Pretty.text "&lt;"   Pretty.&lt;&gt;</font>
-<a name="(line133)"></a>                    <font color=Blue>--    Pretty.text n     Pretty.&lt;&gt;</font>
-<a name="(line134)"></a>                    <font color=Blue>--    attrs as          Pretty.&lt;&gt;</font>
-<a name="(line135)"></a>                    <font color=Blue>--    Pretty.text "&gt;")  Pretty.$$</font>
-<a name="(line136)"></a>                    <font color=Blue>--  Pretty.nest 6 (htmlprint cs)  Pretty.$$</font>
-<a name="(line137)"></a>                    <font color=Blue>--  ( Pretty.text "&lt;/"  Pretty.&lt;&gt;</font>
-<a name="(line138)"></a>                    <font color=Blue>--    Pretty.text n     Pretty.&lt;&gt;</font>
-<a name="(line139)"></a>                    <font color=Blue>--    Pretty.text "&gt;" )</font>
-<a name="(line140)"></a>                        Pretty<font color=Cyan>.</font>fcat <font color=Red>[</font> <font color=Cyan>(</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"&lt;"</font>   Pretty<font color=Cyan>.&lt;&gt;</font>
-<a name="(line141)"></a>                                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>
-<a name="(line142)"></a>                                        attrs <font color=Green><u>as</u></font>          Pretty<font color=Cyan>.&lt;&gt;</font>
-<a name="(line143)"></a>                                        Pretty<font color=Cyan>.</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
-<a name="(line144)"></a>                                    <font color=Cyan>,</font> Pretty<font color=Cyan>.</font>nest <font color=Magenta>4</font> <font color=Cyan>(</font>htmlprint cs<font color=Cyan>)</font>
-<a name="(line145)"></a>                                    <font color=Cyan>,</font> <font color=Cyan>(</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"&lt;/"</font>  Pretty<font color=Cyan>.&lt;&gt;</font>
-<a name="(line146)"></a>                                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>
-<a name="(line147)"></a>                                        Pretty<font color=Cyan>.</font>text <font color=Magenta>"&gt;"</font> <font color=Cyan>)</font>
-<a name="(line148)"></a>                                    <font color=Red>]</font>
-<a name="(line149)"></a>
-<a name="(line150)"></a>  attrs <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>.</font> map attr
-<a name="(line151)"></a>  attr <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line152)"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>" "</font>  Pretty<font color=Cyan>.&lt;&gt;</font>
-<a name="(line153)"></a>               Pretty<font color=Cyan>.</font>text n    Pretty<font color=Cyan>.&lt;&gt;</font>
-<a name="(line154)"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>"='"</font> Pretty<font color=Cyan>.&lt;&gt;</font>
-<a name="(line155)"></a>               Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font>show v<font color=Cyan>)</font> Pretty<font color=Cyan>.&lt;&gt;</font>
-<a name="(line156)"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>"'"</font>
-<a name="(line157)"></a>
-<a name="(line158)"></a>  fmt n [] <font color=Red>=</font> []
-<a name="(line159)"></a>  fmt n s  <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>top<font color=Cyan>,</font>bot<font color=Cyan>)</font> <font color=Red>=</font> splitAt n s
-<a name="(line160)"></a>                 <font color=Cyan>(</font>word<font color=Cyan>,</font>left<font color=Cyan>)</font> <font color=Red>=</font> keepUntil isSpace <font color=Cyan>(</font>reverse top<font color=Cyan>)</font>
-<a name="(line161)"></a>             <font color=Green><u>in</u></font> <font color=Green><u>if</u></font> length top <font color=Cyan>&lt;</font> n <font color=Green><u>then</u></font> <font color=Red>[</font>s<font color=Red>]</font>
-<a name="(line162)"></a>                <font color=Green><u>else</u></font> <font color=Green><u>if</u></font> not <font color=Cyan>(</font>null left<font color=Cyan>)</font> <font color=Green><u>then</u></font>
-<a name="(line163)"></a>                     reverse left<font color=Red><b>:</b></font> fmt n <font color=Cyan>(</font>word<font color=Cyan>++</font>bot<font color=Cyan>)</font>
-<a name="(line164)"></a>                <font color=Green><u>else</u></font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>big<font color=Cyan>,</font>rest<font color=Cyan>)</font> <font color=Red>=</font> keepUntil isSpace s
-<a name="(line165)"></a>                     <font color=Green><u>in</u></font> reverse big<font color=Red><b>:</b></font> fmt n rest
-<a name="(line166)"></a>
-<a name="(line167)"></a>  deSpace []     <font color=Red>=</font> []
-<a name="(line168)"></a>  deSpace <font color=Cyan>(</font>c<font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>|</font> c<font color=Cyan>==</font><font color=Magenta>'\n'</font>   <font color=Red>=</font> deSpace <font color=Cyan>(</font><font color=Magenta>' '</font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>
-<a name="(line169)"></a>                 <font color=Red>|</font> isSpace c <font color=Red>=</font> c <font color=Red><b>:</b></font> deSpace <font color=Cyan>(</font>dropWhile isSpace cs<font color=Cyan>)</font>
-<a name="(line170)"></a>                 <font color=Red>|</font> otherwise <font color=Red>=</font> c <font color=Red><b>:</b></font> deSpace cs
-<a name="(line171)"></a>
-<a name="(line172)"></a>  keepUntil p xs <font color=Red>=</font> select p <font color=Cyan>(</font>[]<font color=Cyan>,</font>xs<font color=Cyan>)</font>
-<a name="(line173)"></a>      <font color=Green><u>where</u></font> select p <font color=Cyan>(</font>ls<font color=Cyan>,</font>[]<font color=Cyan>)</font>     <font color=Red>=</font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>[]<font color=Cyan>)</font>
-<a name="(line174)"></a>            select p <font color=Cyan>(</font>ls<font color=Cyan>,</font><font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>|</font> p x       <font color=Red>=</font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font>
-<a name="(line175)"></a>                                 <font color=Red>|</font> otherwise <font color=Red>=</font> select p <font color=Cyan>(</font>x<font color=Red><b>:</b></font>ls<font color=Cyan>,</font>xs<font color=Cyan>)</font>
+<a name="(line107)"></a><a name="htmlprint"></a>htmlprint <font color=Red>::</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-&gt;</font> Pretty<font color=Cyan>.</font>Doc
+<a name="(line108)"></a>htmlprint <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>.</font> map cprint <font color=Cyan>.</font> foldrefs
+<a name="(line109)"></a>  <font color=Green><u>where</u></font>
+<a name="(line110)"></a>  foldrefs [] <font color=Red>=</font> []
+<a name="(line111)"></a>  foldrefs <font color=Cyan>(</font>CString ws s1 i<font color=Red><b>:</b></font>CRef r <font color=Green><u>_</u></font><font color=Red><b>:</b></font>CString <font color=Green><u>_</u></font> s2 <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line112)"></a>              CString ws <font color=Cyan>(</font>s1<font color=Cyan>++</font><font color=Magenta>"&amp;"</font><font color=Cyan>++</font>ref r<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>++</font>s2<font color=Cyan>)</font> i<font color=Red><b>:</b></font> foldrefs cs
+<a name="(line113)"></a>  foldrefs <font color=Cyan>(</font>c<font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>=</font> c <font color=Red><b>:</b></font> foldrefs cs
+<a name="(line114)"></a>
+<a name="(line115)"></a><font color=Blue>--ref (RefEntity (EntityRef n)) = n     -- Actually, should look-up symtable.</font>
+<a name="(line116)"></a><font color=Blue>--ref (RefChar (CharRef s)) = s</font>
+<a name="(line117)"></a>  ref <font color=Cyan>(</font>RefEntity n<font color=Cyan>)</font> <font color=Red>=</font> n <font color=Blue>-- Actually, should look-up symtable.</font>
+<a name="(line118)"></a>  ref <font color=Cyan>(</font>RefChar s<font color=Cyan>)</font> <font color=Red>=</font> show s
+<a name="(line119)"></a>
+<a name="(line120)"></a>  cprint <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> element e
+<a name="(line121)"></a>  cprint <font color=Cyan>(</font>CString ws s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>(</font>map Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font>fmt <font color=Magenta>60</font>
+<a name="(line122)"></a>                                             <font color=Cyan>(</font><font color=Cyan>(</font><font color=Green><u>if</u></font> ws <font color=Green><u>then</u></font> id <font color=Green><u>else</u></font> deSpace<font color=Cyan>)</font> s<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line123)"></a>  cprint <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>       <font color=Red>=</font> Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font><font color=Magenta>"&amp;"</font><font color=Cyan>++</font>ref r<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
+<a name="(line124)"></a>  cprint <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> Pretty<font color=Cyan>.</font>empty
+<a name="(line125)"></a>
+<a name="(line126)"></a>  element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"&lt;"</font>   Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="(line127)"></a>                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="(line128)"></a>                        attrs <font color=Green><u>as</u></font>          Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="(line129)"></a>                        Pretty<font color=Cyan>.</font>text <font color=Magenta>" /&gt;"</font>
+<a name="(line130)"></a>  element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line131)"></a>                    <font color=Blue>--  ( Pretty.text "&lt;"   Pretty.&lt;&gt;</font>
+<a name="(line132)"></a>                    <font color=Blue>--    Pretty.text n     Pretty.&lt;&gt;</font>
+<a name="(line133)"></a>                    <font color=Blue>--    attrs as          Pretty.&lt;&gt;</font>
+<a name="(line134)"></a>                    <font color=Blue>--    Pretty.text "&gt;")  Pretty.$$</font>
+<a name="(line135)"></a>                    <font color=Blue>--  Pretty.nest 6 (htmlprint cs)  Pretty.$$</font>
+<a name="(line136)"></a>                    <font color=Blue>--  ( Pretty.text "&lt;/"  Pretty.&lt;&gt;</font>
+<a name="(line137)"></a>                    <font color=Blue>--    Pretty.text n     Pretty.&lt;&gt;</font>
+<a name="(line138)"></a>                    <font color=Blue>--    Pretty.text "&gt;" )</font>
+<a name="(line139)"></a>                        Pretty<font color=Cyan>.</font>fcat <font color=Red>[</font> <font color=Cyan>(</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"&lt;"</font>   Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="(line140)"></a>                                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="(line141)"></a>                                        attrs <font color=Green><u>as</u></font>          Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="(line142)"></a>                                        Pretty<font color=Cyan>.</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="(line143)"></a>                                    <font color=Cyan>,</font> Pretty<font color=Cyan>.</font>nest <font color=Magenta>4</font> <font color=Cyan>(</font>htmlprint cs<font color=Cyan>)</font>
+<a name="(line144)"></a>                                    <font color=Cyan>,</font> <font color=Cyan>(</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"&lt;/"</font>  Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="(line145)"></a>                                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="(line146)"></a>                                        Pretty<font color=Cyan>.</font>text <font color=Magenta>"&gt;"</font> <font color=Cyan>)</font>
+<a name="(line147)"></a>                                    <font color=Red>]</font>
+<a name="(line148)"></a>
+<a name="(line149)"></a>  attrs <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>.</font> map attribute
+<a name="(line150)"></a>  attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line151)"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>" "</font>  Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="(line152)"></a>               Pretty<font color=Cyan>.</font>text n    Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="(line153)"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>"='"</font> Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="(line154)"></a>               Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font>show v<font color=Cyan>)</font> Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="(line155)"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>"'"</font>
+<a name="(line156)"></a>
+<a name="(line157)"></a>  fmt <font color=Green><u>_</u></font> [] <font color=Red>=</font> []
+<a name="(line158)"></a>  fmt n s  <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>top<font color=Cyan>,</font>bot<font color=Cyan>)</font> <font color=Red>=</font> splitAt n s
+<a name="(line159)"></a>                 <font color=Cyan>(</font>word<font color=Cyan>,</font>left<font color=Cyan>)</font> <font color=Red>=</font> keepUntil isSpace <font color=Cyan>(</font>reverse top<font color=Cyan>)</font>
+<a name="(line160)"></a>             <font color=Green><u>in</u></font> <font color=Green><u>if</u></font> length top <font color=Cyan>&lt;</font> n <font color=Green><u>then</u></font> <font color=Red>[</font>s<font color=Red>]</font>
+<a name="(line161)"></a>                <font color=Green><u>else</u></font> <font color=Green><u>if</u></font> not <font color=Cyan>(</font>null left<font color=Cyan>)</font> <font color=Green><u>then</u></font>
+<a name="(line162)"></a>                     reverse left<font color=Red><b>:</b></font> fmt n <font color=Cyan>(</font>word<font color=Cyan>++</font>bot<font color=Cyan>)</font>
+<a name="(line163)"></a>                <font color=Green><u>else</u></font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>big<font color=Cyan>,</font>rest<font color=Cyan>)</font> <font color=Red>=</font> keepUntil isSpace s
+<a name="(line164)"></a>                     <font color=Green><u>in</u></font> reverse big<font color=Red><b>:</b></font> fmt n rest
+<a name="(line165)"></a>
+<a name="(line166)"></a>  deSpace []     <font color=Red>=</font> []
+<a name="(line167)"></a>  deSpace <font color=Cyan>(</font>c<font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>|</font> c<font color=Cyan>==</font><font color=Magenta>'\n'</font>   <font color=Red>=</font> deSpace <font color=Cyan>(</font><font color=Magenta>' '</font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>
+<a name="(line168)"></a>                 <font color=Red>|</font> isSpace c <font color=Red>=</font> c <font color=Red><b>:</b></font> deSpace <font color=Cyan>(</font>dropWhile isSpace cs<font color=Cyan>)</font>
+<a name="(line169)"></a>                 <font color=Red>|</font> otherwise <font color=Red>=</font> c <font color=Red><b>:</b></font> deSpace cs
+<a name="(line170)"></a>
+<a name="(line171)"></a>  keepUntil p xs <font color=Red>=</font> select p <font color=Cyan>(</font>[]<font color=Cyan>,</font>xs<font color=Cyan>)</font>
+<a name="(line172)"></a>      <font color=Green><u>where</u></font> select <font color=Green><u>_</u></font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>[]<font color=Cyan>)</font>     <font color=Red>=</font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>[]<font color=Cyan>)</font>
+<a name="(line173)"></a>            select q <font color=Cyan>(</font>ls<font color=Cyan>,</font><font color=Cyan>(</font>y<font color=Red><b>:</b></font>ys<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>|</font> q y       <font color=Red>=</font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>y<font color=Red><b>:</b></font>ys<font color=Cyan>)</font>
+<a name="(line174)"></a>                                 <font color=Red>|</font> otherwise <font color=Red>=</font> select q <font color=Cyan>(</font>y<font color=Red><b>:</b></font>ls<font color=Cyan>,</font>ys<font color=Cyan>)</font>
+<a name="(line175)"></a>
 </pre>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/OneOfN.html b/docs/HaXml/src/Text/XML/HaXml/OneOfN.html
--- a/docs/HaXml/src/Text/XML/HaXml/OneOfN.html
+++ b/docs/HaXml/src/Text/XML/HaXml/OneOfN.html
@@ -10,7 +10,7 @@
 <a name="(line8)"></a>
 <a name="(line9)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>)</font>
 <a name="(line10)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf2 a b<font color=Cyan>)</font>
-<a name="(line11)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf2"</font> [] []
+<a name="(line11)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf2"</font> [] []
 <a name="(line12)"></a>  <font color=Blue>--         toHType m = Defined "OneOf2" [a,b] []</font>
 <a name="(line13)"></a>  <font color=Blue>--            where a = toHType $ (\ (OneOf2 a)-&gt;a) $ m</font>
 <a name="(line14)"></a>  <font color=Blue>--                  b = toHType $ (\ (TwoOf2 b)-&gt;b) $ m</font>
@@ -32,7 +32,7 @@
 <a name="(line30)"></a>
 <a name="(line31)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>)</font>
 <a name="(line32)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf3 a b c<font color=Cyan>)</font>
-<a name="(line33)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf3"</font> [] []
+<a name="(line33)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf3"</font> [] []
 <a name="(line34)"></a>
 <a name="(line35)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>)</font>
 <a name="(line36)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf3 a b c<font color=Cyan>)</font>
@@ -51,7 +51,7 @@
 <a name="(line49)"></a>
 <a name="(line50)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>)</font>
 <a name="(line51)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf4 a b c d<font color=Cyan>)</font>
-<a name="(line52)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf4"</font> [] []
+<a name="(line52)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf4"</font> [] []
 <a name="(line53)"></a>
 <a name="(line54)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>)</font>
 <a name="(line55)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf4 a b c d<font color=Cyan>)</font>
@@ -71,7 +71,7 @@
 <a name="(line69)"></a>
 <a name="(line70)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e<font color=Cyan>)</font>
 <a name="(line71)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf5 a b c d e<font color=Cyan>)</font>
-<a name="(line72)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf5"</font> [] []
+<a name="(line72)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf5"</font> [] []
 <a name="(line73)"></a>
 <a name="(line74)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e<font color=Cyan>)</font>
 <a name="(line75)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf5 a b c d e<font color=Cyan>)</font>
@@ -94,7 +94,7 @@
 <a name="(line92)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e
 <a name="(line93)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>)</font>
 <a name="(line94)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf6 a b c d e f<font color=Cyan>)</font>
-<a name="(line95)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf6"</font> [] []
+<a name="(line95)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf6"</font> [] []
 <a name="(line96)"></a>
 <a name="(line97)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line98)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>)</font>
@@ -120,7 +120,7 @@
 <a name="(line118)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e
 <a name="(line119)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>)</font>
 <a name="(line120)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf7 a b c d e f g<font color=Cyan>)</font>
-<a name="(line121)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf7"</font> [] []
+<a name="(line121)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf7"</font> [] []
 <a name="(line122)"></a>
 <a name="(line123)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line124)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>)</font>
@@ -147,7 +147,7 @@
 <a name="(line145)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e
 <a name="(line146)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>)</font>
 <a name="(line147)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf8 a b c d e f g h<font color=Cyan>)</font>
-<a name="(line148)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf8"</font> [] []
+<a name="(line148)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf8"</font> [] []
 <a name="(line149)"></a>
 <a name="(line150)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line151)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>)</font>
@@ -175,7 +175,7 @@
 <a name="(line173)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e
 <a name="(line174)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>)</font>
 <a name="(line175)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf9 a b c d e f g h i<font color=Cyan>)</font>
-<a name="(line176)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf9"</font> [] []
+<a name="(line176)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf9"</font> [] []
 <a name="(line177)"></a>
 <a name="(line178)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line179)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>)</font>
@@ -205,7 +205,7 @@
 <a name="(line203)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e
 <a name="(line204)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j<font color=Cyan>)</font>
 <a name="(line205)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf10 a b c d e f g h i j<font color=Cyan>)</font>
-<a name="(line206)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf10"</font> [] []
+<a name="(line206)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf10"</font> [] []
 <a name="(line207)"></a>
 <a name="(line208)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line209)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j<font color=Cyan>)</font>
@@ -238,7 +238,7 @@
 <a name="(line236)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j
 <a name="(line237)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>)</font>
 <a name="(line238)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf11 a b c d e f g h i j k<font color=Cyan>)</font>
-<a name="(line239)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf11"</font> [] []
+<a name="(line239)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf11"</font> [] []
 <a name="(line240)"></a>
 <a name="(line241)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line242)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j
@@ -274,7 +274,7 @@
 <a name="(line272)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j
 <a name="(line273)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>)</font>
 <a name="(line274)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf12 a b c d e f g h i j k l<font color=Cyan>)</font>
-<a name="(line275)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf12"</font> [] []
+<a name="(line275)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf12"</font> [] []
 <a name="(line276)"></a>
 <a name="(line277)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line278)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j
@@ -311,7 +311,7 @@
 <a name="(line309)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j
 <a name="(line310)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>)</font>
 <a name="(line311)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf13 a b c d e f g h i j k l m<font color=Cyan>)</font>
-<a name="(line312)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf13"</font> [] []
+<a name="(line312)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf13"</font> [] []
 <a name="(line313)"></a>
 <a name="(line314)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line315)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j
@@ -349,7 +349,7 @@
 <a name="(line347)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j
 <a name="(line348)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>)</font>
 <a name="(line349)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf14 a b c d e f g h i j k l m n<font color=Cyan>)</font>
-<a name="(line350)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf14"</font> [] []
+<a name="(line350)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf14"</font> [] []
 <a name="(line351)"></a>
 <a name="(line352)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line353)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j
@@ -390,7 +390,7 @@
 <a name="(line388)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j
 <a name="(line389)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o<font color=Cyan>)</font>
 <a name="(line390)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf15 a b c d e f g h i j k l m n o<font color=Cyan>)</font>
-<a name="(line391)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf15"</font> [] []
+<a name="(line391)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf15"</font> [] []
 <a name="(line392)"></a>
 <a name="(line393)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line394)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j
@@ -433,7 +433,7 @@
 <a name="(line431)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o
 <a name="(line432)"></a>          <font color=Cyan>,</font>HTypeable p<font color=Cyan>)</font>
 <a name="(line433)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf16 a b c d e f g h i j k l m n o p<font color=Cyan>)</font>
-<a name="(line434)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf16"</font> [] []
+<a name="(line434)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf16"</font> [] []
 <a name="(line435)"></a>
 <a name="(line436)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line437)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j
@@ -478,7 +478,7 @@
 <a name="(line476)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o
 <a name="(line477)"></a>          <font color=Cyan>,</font>HTypeable p<font color=Cyan>,</font>HTypeable q<font color=Cyan>)</font>
 <a name="(line478)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf17 a b c d e f g h i j k l m n o p q<font color=Cyan>)</font>
-<a name="(line479)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf17"</font> [] []
+<a name="(line479)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf17"</font> [] []
 <a name="(line480)"></a>
 <a name="(line481)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line482)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j
@@ -525,7 +525,7 @@
 <a name="(line523)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o
 <a name="(line524)"></a>          <font color=Cyan>,</font>HTypeable p<font color=Cyan>,</font>HTypeable q<font color=Cyan>,</font>HTypeable r<font color=Cyan>)</font>
 <a name="(line525)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf18 a b c d e f g h i j k l m n o p q r<font color=Cyan>)</font>
-<a name="(line526)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf18"</font> [] []
+<a name="(line526)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf18"</font> [] []
 <a name="(line527)"></a>
 <a name="(line528)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line529)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j
@@ -574,7 +574,7 @@
 <a name="(line572)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o
 <a name="(line573)"></a>          <font color=Cyan>,</font>HTypeable p<font color=Cyan>,</font>HTypeable q<font color=Cyan>,</font>HTypeable r<font color=Cyan>,</font>HTypeable s<font color=Cyan>)</font>
 <a name="(line574)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf19 a b c d e f g h i j k l m n o p q r s<font color=Cyan>)</font>
-<a name="(line575)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf19"</font> [] []
+<a name="(line575)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf19"</font> [] []
 <a name="(line576)"></a>
 <a name="(line577)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line578)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j
@@ -624,7 +624,7 @@
 <a name="(line622)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o
 <a name="(line623)"></a>          <font color=Cyan>,</font>HTypeable p<font color=Cyan>,</font>HTypeable q<font color=Cyan>,</font>HTypeable r<font color=Cyan>,</font>HTypeable s<font color=Cyan>,</font>HTypeable t<font color=Cyan>)</font>
 <a name="(line624)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf20 a b c d e f g h i j k l m n o p q r s t<font color=Cyan>)</font>
-<a name="(line625)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf20"</font> [] []
+<a name="(line625)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf20"</font> [] []
 <a name="(line626)"></a>
 <a name="(line627)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e
 <a name="(line628)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j
diff --git a/docs/HaXml/src/Text/XML/HaXml/Posn.html b/docs/HaXml/src/Text/XML/HaXml/Posn.html
--- a/docs/HaXml/src/Text/XML/HaXml/Posn.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Posn.html
@@ -44,7 +44,7 @@
 <a name="(line42)"></a>posInNewCxt name pos <font color=Red>=</font> Pn name <font color=Magenta>1</font> <font color=Magenta>1</font> pos
 <a name="(line43)"></a>
 <a name="(line44)"></a><font color=Green><u>instance</u></font> Show Posn <font color=Green><u>where</u></font>
-<a name="(line45)"></a>      showsPrec p <font color=Cyan>(</font>Pn f l c i<font color=Cyan>)</font> <font color=Red>=</font> showString f <font color=Cyan>.</font>
+<a name="(line45)"></a>      showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Pn f l c i<font color=Cyan>)</font> <font color=Red>=</font> showString f <font color=Cyan>.</font>
 <a name="(line46)"></a>                                 showString <font color=Magenta>"  at line "</font> <font color=Cyan>.</font> shows l <font color=Cyan>.</font>
 <a name="(line47)"></a>                                 showString <font color=Magenta>" col "</font> <font color=Cyan>.</font> shows c <font color=Cyan>.</font>
 <a name="(line48)"></a>                                 <font color=Cyan>(</font> <font color=Green><u>case</u></font> i <font color=Green><u>of</u></font>
@@ -55,7 +55,7 @@
 <a name="(line53)"></a><a name="forcep"></a><font color=Blue>-- | Just used to strictify the internal values of a position, to avoid</font>
 <a name="(line54)"></a><font color=Blue>--   space leaks.</font>
 <a name="(line55)"></a>forcep <font color=Red>::</font> Posn <font color=Red>-&gt;</font> Int
-<a name="(line56)"></a>forcep <font color=Cyan>(</font>Pn f n m i<font color=Cyan>)</font> <font color=Red>=</font> m <font color=Cyan>`seq`</font> n
+<a name="(line56)"></a>forcep <font color=Cyan>(</font>Pn <font color=Green><u>_</u></font> n m <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> m <font color=Cyan>`seq`</font> n
 <a name="(line57)"></a>
 <a name="(line58)"></a><a name="addcol"></a><font color=Blue>-- | Add n character positions to the given position.</font>
 <a name="(line59)"></a>addcol <font color=Red>::</font> Int <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> Posn
@@ -63,7 +63,7 @@
 <a name="(line61)"></a>
 <a name="(line62)"></a><a name="newline"></a><font color=Blue>-- | Add a newline or tab to the given position.</font>
 <a name="(line63)"></a>newline<font color=Cyan>,</font> tab <font color=Red>::</font> Posn <font color=Red>-&gt;</font> Posn
-<a name="(line64)"></a>newline <font color=Cyan>(</font>Pn f r c i<font color=Cyan>)</font> <font color=Red>=</font> Pn f <font color=Cyan>(</font>r<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> <font color=Magenta>1</font> i
+<a name="(line64)"></a>newline <font color=Cyan>(</font>Pn f r <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> Pn f <font color=Cyan>(</font>r<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> <font color=Magenta>1</font> i
 <a name="(line65)"></a><a name="tab"></a>tab     <font color=Cyan>(</font>Pn f r c i<font color=Cyan>)</font> <font color=Red>=</font> Pn f r <font color=Cyan>(</font><font color=Cyan>(</font><font color=Cyan>(</font>c<font color=Cyan>`div`</font><font color=Magenta>8</font><font color=Cyan>)</font><font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font><font color=Cyan>*</font><font color=Magenta>8</font><font color=Cyan>)</font> i
 <a name="(line66)"></a>
 <a name="(line67)"></a><a name="white"></a><font color=Blue>-- | Add the given whitespace char to the given position.</font>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Pretty.html b/docs/HaXml/src/Text/XML/HaXml/Pretty.html
--- a/docs/HaXml/src/Text/XML/HaXml/Pretty.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Pretty.html
@@ -30,234 +30,273 @@
 <a name="(line28)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ
 <a name="(line29)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
 <a name="(line30)"></a>
-<a name="(line31)"></a><a name="either"></a>either f g <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> f x
-<a name="(line32)"></a>either f g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x
-<a name="(line33)"></a>
-<a name="(line34)"></a><a name="maybe"></a>maybe f Nothing  <font color=Red>=</font> empty
-<a name="(line35)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x
-<a name="(line36)"></a>
-<a name="(line37)"></a><font color=Blue>--peref p   = text "%" &lt;&gt; text p &lt;&gt; text ";"</font>
+<a name="(line31)"></a><a name="either"></a>either <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-&gt;</font> t1<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>t2 <font color=Red>-&gt;</font> t1<font color=Cyan>)</font> <font color=Red>-&gt;</font> Either t t2 <font color=Red>-&gt;</font> t1
+<a name="(line32)"></a>either f <font color=Green><u>_</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> f x
+<a name="(line33)"></a>either <font color=Green><u>_</u></font> g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x
+<a name="(line34)"></a>
+<a name="(line35)"></a><a name="maybe"></a>maybe <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-&gt;</font> Doc<font color=Cyan>)</font> <font color=Red>-&gt;</font> Maybe t <font color=Red>-&gt;</font> Doc
+<a name="(line36)"></a>maybe <font color=Green><u>_</u></font> Nothing  <font color=Red>=</font> empty
+<a name="(line37)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x
 <a name="(line38)"></a>
-<a name="(line39)"></a><font color=Blue>----</font>
+<a name="(line39)"></a><font color=Blue>--peref p   = text "%" &lt;&gt; text p &lt;&gt; text ";"</font>
 <a name="(line40)"></a>
-<a name="(line41)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Doc
-<a name="(line42)"></a><a name="prolog"></a>prolog   <font color=Red>::</font> Prolog <font color=Red>-&gt;</font> Doc
-<a name="(line43)"></a><a name="xmldecl"></a>xmldecl  <font color=Red>::</font> XMLDecl <font color=Red>-&gt;</font> Doc
-<a name="(line44)"></a><a name="misc"></a>misc     <font color=Red>::</font> Misc <font color=Red>-&gt;</font> Doc
-<a name="(line45)"></a><a name="sddecl"></a>sddecl   <font color=Red>::</font> Bool <font color=Red>-&gt;</font> Doc
-<a name="(line46)"></a>
-<a name="(line47)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Doc
-<a name="(line48)"></a><a name="markupdecl"></a>markupdecl  <font color=Red>::</font> MarkupDecl <font color=Red>-&gt;</font> Doc
-<a name="(line49)"></a><a name="extsubset"></a>extsubset   <font color=Red>::</font> ExtSubset <font color=Red>-&gt;</font> Doc
-<a name="(line50)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> ExtSubsetDecl <font color=Red>-&gt;</font> Doc
-<a name="(line51)"></a><a name="cp"></a>cp          <font color=Red>::</font> CP <font color=Red>-&gt;</font> Doc
-<a name="(line52)"></a>
-<a name="(line53)"></a><a name="element"></a>element   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> Doc
-<a name="(line54)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> Doc                     <font color=Cyan>--etc</font>
-<a name="(line55)"></a><a name="content"></a>content   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> Doc
-<a name="(line56)"></a>
-<a name="(line57)"></a><font color=Blue>----</font>
+<a name="(line41)"></a><font color=Blue>----</font>
+<a name="(line42)"></a>
+<a name="(line43)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Doc
+<a name="(line44)"></a><a name="prolog"></a>prolog   <font color=Red>::</font> Prolog <font color=Red>-&gt;</font> Doc
+<a name="(line45)"></a><a name="xmldecl"></a>xmldecl  <font color=Red>::</font> XMLDecl <font color=Red>-&gt;</font> Doc
+<a name="(line46)"></a><a name="misc"></a>misc     <font color=Red>::</font> Misc <font color=Red>-&gt;</font> Doc
+<a name="(line47)"></a><a name="sddecl"></a>sddecl   <font color=Red>::</font> Bool <font color=Red>-&gt;</font> Doc
+<a name="(line48)"></a>
+<a name="(line49)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Doc
+<a name="(line50)"></a><a name="markupdecl"></a>markupdecl  <font color=Red>::</font> MarkupDecl <font color=Red>-&gt;</font> Doc
+<a name="(line51)"></a><a name="extsubset"></a>extsubset   <font color=Red>::</font> ExtSubset <font color=Red>-&gt;</font> Doc
+<a name="(line52)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> ExtSubsetDecl <font color=Red>-&gt;</font> Doc
+<a name="(line53)"></a><a name="cp"></a>cp          <font color=Red>::</font> CP <font color=Red>-&gt;</font> Doc
+<a name="(line54)"></a>
+<a name="(line55)"></a><a name="element"></a>element   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> Doc
+<a name="(line56)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> Doc                     <font color=Cyan>--etc</font>
+<a name="(line57)"></a><a name="content"></a>content   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> Doc
 <a name="(line58)"></a>
-<a name="(line59)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>map misc m<font color=Cyan>)</font>
-<a name="(line60)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>
-<a name="(line61)"></a>                             vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>
-<a name="(line62)"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>
-<a name="(line63)"></a>                             vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>
-<a name="(line64)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font>   <font color=Red>=</font> text <font color=Magenta>"&lt;?xml version='"</font> <font color=Cyan>&lt;&gt;</font> text v <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line65)"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>
-<a name="(line66)"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>
-<a name="(line67)"></a>                             text <font color=Magenta>"?&gt;"</font>
-<a name="(line68)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!--"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"--&gt;"</font>
-<a name="(line69)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"&lt;?"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"?&gt;"</font>
-<a name="(line70)"></a>sddecl sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>
-<a name="(line71)"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>
-<a name="(line72)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font> 
-<a name="(line73)"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
-<a name="(line74)"></a>                             <font color=Green><u>else</u></font> hd <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>
-<a name="(line75)"></a>                                  vcat <font color=Cyan>(</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]&gt;"</font>
-<a name="(line76)"></a>                           <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"&lt;!DOCTYPE"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line77)"></a>                                      maybe externalid eid
-<a name="(line78)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e
-<a name="(line79)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a
-<a name="(line80)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e
-<a name="(line81)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n
-<a name="(line82)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m
-<a name="(line83)"></a><font color=Blue>--markupdecl (MarkupPE p m)  = peref p</font>
-<a name="(line84)"></a>extsubset <font color=Cyan>(</font>ExtSubset t ds<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan>$$</font>
-<a name="(line85)"></a>                             vcat <font color=Cyan>(</font>map extsubsetdecl ds<font color=Cyan>)</font>
-<a name="(line86)"></a>extsubsetdecl <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font>      <font color=Red>=</font> markupdecl m
-<a name="(line87)"></a>extsubsetdecl <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c
-<a name="(line88)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e)   = peref p</font>
-<a name="(line89)"></a>
-<a name="(line90)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line91)"></a>                         fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"/&gt;"</font>
-<a name="(line92)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>
-<a name="(line93)"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>
-<a name="(line94)"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>
-<a name="(line95)"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>
-<a name="(line96)"></a>    <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line97)"></a>                         text <font color=Magenta>"&gt;"</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map content cs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line98)"></a>                         text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
-<a name="(line99)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty
-<a name="(line100)"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c
-<a name="(line101)"></a>
-<a name="(line102)"></a><a name="isText"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True
-<a name="(line103)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> True
-<a name="(line104)"></a>isText <font color=Green><u>_</u></font>               <font color=Red>=</font> False
-<a name="(line105)"></a>
-<a name="(line106)"></a><a name="carryelem"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c
-<a name="(line107)"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
-<a name="(line108)"></a>                           text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>
-<a name="(line109)"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>
-<a name="(line110)"></a>carryelem e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c
-<a name="(line111)"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>
-<a name="(line112)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font>  <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
-<a name="(line113)"></a>                          <font color=Green><u>in</u></font>
-<a name="(line114)"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
-<a name="(line115)"></a>                            text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>
-<a name="(line116)"></a>                            nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> <font color=Blue>--- $$</font>
-<a name="(line117)"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n
-<a name="(line118)"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
-<a name="(line119)"></a><a name="carrycontent"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> carryelem e c
-<a name="(line120)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>
-<a name="(line121)"></a>carrycontent <font color=Cyan>(</font>CString True  s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>
-<a name="(line122)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c    <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>
-<a name="(line123)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>
-<a name="(line124)"></a>
-<a name="(line125)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>c<font color=Red>-&gt;</font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> c <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>
-<a name="(line126)"></a>carryscan f []     c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>
-<a name="(line127)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c
-<a name="(line128)"></a>                           <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0
-<a name="(line129)"></a>                       <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>
-<a name="(line130)"></a>
-<a name="(line131)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>
-<a name="(line132)"></a><font color=Blue>--  | isText (head cs) =</font>
-<a name="(line133)"></a><font color=Blue>--        ( start &lt;&gt;</font>
-<a name="(line134)"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
-<a name="(line135)"></a><font color=Blue>--        , text "&gt;")</font>
-<a name="(line136)"></a><font color=Blue>--  | otherwise =</font>
-<a name="(line137)"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>
-<a name="(line138)"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
-<a name="(line139)"></a><font color=Blue>--        , text "&gt;")</font>
-<a name="(line140)"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>
-<a name="(line141)"></a><font color=Blue>--</font>
-<a name="(line142)"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>
-<a name="(line143)"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>
-<a name="(line144)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>
-<a name="(line145)"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>
-<a name="(line146)"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>
-<a name="(line147)"></a>
-<a name="(line148)"></a>
-<a name="(line149)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>             <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;&gt;</font> attvalue v
-<a name="(line150)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e
-<a name="(line151)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s
-<a name="(line152)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> cdsect s
-<a name="(line153)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r
-<a name="(line154)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m
-<a name="(line155)"></a>
-<a name="(line156)"></a><a name="elementdecl"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ELEMENT"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line157)"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
-<a name="(line158)"></a><a name="contentspec"></a>contentspec EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>
-<a name="(line159)"></a>contentspec ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>
-<a name="(line160)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m
-<a name="(line161)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c
-<a name="(line162)"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>
-<a name="(line163)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>text n<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> modifier m
-<a name="(line164)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line165)"></a>                           modifier m
-<a name="(line166)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font>          <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line167)"></a>                           modifier m
-<a name="(line168)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>
-<a name="(line169)"></a>modifier None          <font color=Red>=</font> empty
-<a name="(line170)"></a>modifier Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>
-<a name="(line171)"></a>modifier Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>
-<a name="(line172)"></a>modifier Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>
-<a name="(line173)"></a><a name="mixed"></a>mixed  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>
-<a name="(line174)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line175)"></a>                         hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line176)"></a>                         text <font color=Magenta>")*"</font>
-<a name="(line177)"></a>
-<a name="(line178)"></a><a name="attlistdecl"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ATTLIST"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line179)"></a>                                 fsep <font color=Cyan>(</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
-<a name="(line180)"></a><a name="attdef"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>          <font color=Red>=</font> text n <font color=Cyan>&lt;+&gt;</font> atttype t <font color=Cyan>&lt;+&gt;</font> defaultdecl d
-<a name="(line181)"></a><a name="atttype"></a>atttype  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>
-<a name="(line182)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t
-<a name="(line183)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t
-<a name="(line184)"></a><a name="tokenizedtype"></a>tokenizedtype ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>
-<a name="(line185)"></a>tokenizedtype IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>
-<a name="(line186)"></a>tokenizedtype IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>
-<a name="(line187)"></a>tokenizedtype ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>
-<a name="(line188)"></a>tokenizedtype ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>
-<a name="(line189)"></a>tokenizedtype NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>
-<a name="(line190)"></a>tokenizedtype NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>
-<a name="(line191)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n
-<a name="(line192)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e
-<a name="(line193)"></a><a name="notationtype"></a>notationtype ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line194)"></a>                                 parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line195)"></a><a name="enumeration"></a>enumeration ns                 <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line196)"></a><a name="defaultdecl"></a>defaultdecl  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>
-<a name="(line197)"></a>defaultdecl  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>
-<a name="(line198)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font>    <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan>&lt;+&gt;</font> attvalue a
-<a name="(line199)"></a><a name="conditionalsect"></a>conditionalsect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Red>=</font> text <font color=Magenta>"&lt;![INCLUDE ["</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line200)"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>
-<a name="(line201)"></a>conditionalsect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![IGNORE ["</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line202)"></a>                                 fsep <font color=Cyan>(</font>map ignoresectcontents i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>
-<a name="(line203)"></a><a name="ignore"></a>ignore <font color=Cyan>(</font>Ignore<font color=Cyan>)</font>                <font color=Red>=</font> empty
-<a name="(line204)"></a><a name="ignoresectcontents"></a>ignoresectcontents <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>
-<a name="(line205)"></a>                               <font color=Red>=</font> ignore i <font color=Cyan>&lt;+&gt;</font> vcat <font color=Cyan>(</font>map internal is<font color=Cyan>)</font>
-<a name="(line206)"></a>                          <font color=Green><u>where</u></font> internal <font color=Cyan>(</font>ics<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![["</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line207)"></a>                                                   ignoresectcontents ics <font color=Cyan>&lt;+&gt;</font>
-<a name="(line208)"></a>                                                   text <font color=Magenta>"]]&gt;"</font> <font color=Cyan>&lt;+&gt;</font> ignore i
-<a name="(line209)"></a><a name="reference"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er
-<a name="(line210)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr
-<a name="(line211)"></a><a name="entityref"></a>entityref n                    <font color=Red>=</font> text <font color=Magenta>"&amp;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>
-<a name="(line212)"></a><a name="charref"></a>charref c                      <font color=Red>=</font> text <font color=Magenta>"&amp;#"</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>
-<a name="(line213)"></a><a name="entitydecl"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d
-<a name="(line214)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d
-<a name="(line215)"></a><a name="gedecl"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> entitydef ed <font color=Cyan>&lt;&gt;</font>
-<a name="(line216)"></a>                                 text <font color=Magenta>"&gt;"</font>
-<a name="(line217)"></a><a name="pedecl"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY %"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> pedef pd <font color=Cyan>&lt;&gt;</font>
-<a name="(line218)"></a>                                 text <font color=Magenta>"&gt;"</font>
-<a name="(line219)"></a><a name="entitydef"></a>entitydef <font color=Cyan>(</font>DefEntityValue ev<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ev
-<a name="(line220)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan>&lt;+&gt;</font> maybe ndatadecl nd
-<a name="(line221)"></a><a name="pedef"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ev
-<a name="(line222)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid
-<a name="(line223)"></a><a name="externalid"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font>         <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan>&lt;+&gt;</font> systemliteral sl
-<a name="(line224)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font>       <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral i <font color=Cyan>&lt;+&gt;</font>
-<a name="(line225)"></a>                                 systemliteral sl
-<a name="(line226)"></a><a name="ndatadecl"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan>&lt;+&gt;</font> text n
-<a name="(line227)"></a><a name="textdecl"></a>textdecl <font color=Cyan>(</font>TextDecl vi ed<font color=Cyan>)</font>      <font color=Red>=</font> text <font color=Magenta>"&lt;?xml"</font> <font color=Cyan>&lt;+&gt;</font> maybe text vi <font color=Cyan>&lt;+&gt;</font>
-<a name="(line228)"></a>                                 encodingdecl ed <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"?&gt;"</font>
-<a name="(line229)"></a><a name="extparsedent"></a>extparsedent <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font><font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font> content c
-<a name="(line230)"></a><a name="extpe"></a>extpe <font color=Cyan>(</font>ExtPE t esd<font color=Cyan>)</font>            <font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font>
-<a name="(line231)"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl esd<font color=Cyan>)</font>
-<a name="(line232)"></a><a name="notationdecl"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>    <font color=Red>=</font> text <font color=Magenta>"&lt;!NOTATION"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line233)"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>
-<a name="(line234)"></a>                                 text <font color=Magenta>"&gt;"</font>
-<a name="(line235)"></a><a name="publicid"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>          <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral p
-<a name="(line236)"></a><a name="encodingdecl"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
-<a name="(line237)"></a><a name="nmtoken"></a>nmtoken s                      <font color=Red>=</font> text s
-<a name="(line238)"></a><a name="attvalue"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font>        <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line239)"></a>                                 hcat <font color=Cyan>(</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line240)"></a>                                 text <font color=Magenta>"\""</font>
-<a name="(line241)"></a><a name="entityvalue"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>
-<a name="(line242)"></a>  <font color=Red>|</font> containsDoubleQuote evs    <font color=Red>=</font> text <font color=Magenta>"'"</font>  <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
-<a name="(line243)"></a>  <font color=Red>|</font> otherwise                  <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
-<a name="(line244)"></a><a name="ev"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s
-<a name="(line245)"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>
-<a name="(line246)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r
-<a name="(line247)"></a><a name="pubidliteral"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>
-<a name="(line248)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
-<a name="(line249)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
-<a name="(line250)"></a><a name="systemliteral"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>
-<a name="(line251)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
-<a name="(line252)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
-<a name="(line253)"></a><a name="chardata"></a>chardata s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s
-<a name="(line254)"></a><a name="cdsect"></a>cdsect c                       <font color=Red>=</font> text <font color=Magenta>"&lt;![CDATA["</font> <font color=Cyan>&lt;&gt;</font> chardata c <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"]]&gt;"</font>
-<a name="(line255)"></a>
-<a name="(line256)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>
-<a name="(line257)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs
-<a name="(line258)"></a>    <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s
-<a name="(line259)"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False
+<a name="(line59)"></a><font color=Blue>----</font>
+<a name="(line60)"></a>
+<a name="(line61)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>map misc m<font color=Cyan>)</font>
+<a name="(line62)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>
+<a name="(line63)"></a>                             vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="(line64)"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>
+<a name="(line65)"></a>                             vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>
+<a name="(line66)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font>   <font color=Red>=</font> text <font color=Magenta>"&lt;?xml version='"</font> <font color=Cyan>&lt;&gt;</font> text v <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line67)"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>
+<a name="(line68)"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>
+<a name="(line69)"></a>                             text <font color=Magenta>"?&gt;"</font>
+<a name="(line70)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!--"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"--&gt;"</font>
+<a name="(line71)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"&lt;?"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"?&gt;"</font>
+<a name="(line72)"></a>sddecl sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>
+<a name="(line73)"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>
+<a name="(line74)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font>
+<a name="(line75)"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="(line76)"></a>                             <font color=Green><u>else</u></font> hd <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>
+<a name="(line77)"></a>                                  vcat <font color=Cyan>(</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]&gt;"</font>
+<a name="(line78)"></a>                           <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"&lt;!DOCTYPE"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line79)"></a>                                      maybe externalid eid
+<a name="(line80)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e
+<a name="(line81)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a
+<a name="(line82)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e
+<a name="(line83)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n
+<a name="(line84)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m
+<a name="(line85)"></a><font color=Blue>-- markupdecl (MarkupPE p m)  = peref p</font>
+<a name="(line86)"></a>extsubset <font color=Cyan>(</font>ExtSubset t ds<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan>$$</font>
+<a name="(line87)"></a>                             vcat <font color=Cyan>(</font>map extsubsetdecl ds<font color=Cyan>)</font>
+<a name="(line88)"></a><a name="extmarkupdecl"></a>extmarkupdecl <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font>      <font color=Red>=</font> markupdecl m
+<a name="(line89)"></a>extsubsetdecl <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c
+<a name="(line90)"></a><font color=Blue>-- extsubsetdecl (ExtPEReference p e)   = peref p</font>
+<a name="(line91)"></a>
+<a name="(line92)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line93)"></a>                         fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"/&gt;"</font>
+<a name="(line94)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>
+<a name="(line95)"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>
+<a name="(line96)"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>
+<a name="(line97)"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>
+<a name="(line98)"></a>    <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line99)"></a>                         text <font color=Magenta>"&gt;"</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map content cs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line100)"></a>                         text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="(line101)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty
+<a name="(line102)"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c
+<a name="(line103)"></a>
+<a name="(line104)"></a><a name="isText"></a>isText <font color=Red>::</font> Content t <font color=Red>-&gt;</font> Bool
+<a name="(line105)"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True
+<a name="(line106)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> True
+<a name="(line107)"></a>isText <font color=Green><u>_</u></font>               <font color=Red>=</font> False
+<a name="(line108)"></a>
+<a name="(line109)"></a><a name="carryelem"></a>carryelem <font color=Red>::</font> Element t <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> <font color=Cyan>(</font>Doc<font color=Cyan>,</font> Doc<font color=Cyan>)</font>
+<a name="(line110)"></a><a name="carrycontent"></a>carrycontent <font color=Red>::</font>  Content t <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> <font color=Cyan>(</font>Doc<font color=Cyan>,</font> Doc<font color=Cyan>)</font>
+<a name="(line111)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c
+<a name="(line112)"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
+<a name="(line113)"></a>                           text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>
+<a name="(line114)"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>
+<a name="(line115)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c
+<a name="(line116)"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>
+<a name="(line117)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font>  <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="(line118)"></a>                          <font color=Green><u>in</u></font>
+<a name="(line119)"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
+<a name="(line120)"></a>                            text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="(line121)"></a>                            nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> <font color=Blue>--- $$</font>
+<a name="(line122)"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n
+<a name="(line123)"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="(line124)"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> carryelem e c
+<a name="(line125)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>
+<a name="(line126)"></a>carrycontent <font color=Cyan>(</font>CString True  s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>
+<a name="(line127)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c    <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>
+<a name="(line128)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>
+<a name="(line129)"></a>
+<a name="(line130)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>c<font color=Red>-&gt;</font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> c <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>
+<a name="(line131)"></a>carryscan <font color=Green><u>_</u></font> []     c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>
+<a name="(line132)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c
+<a name="(line133)"></a>                           <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0
+<a name="(line134)"></a>                       <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>
+<a name="(line135)"></a>
+<a name="(line136)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>
+<a name="(line137)"></a><font color=Blue>--  | isText (head cs) =</font>
+<a name="(line138)"></a><font color=Blue>--        ( start &lt;&gt;</font>
+<a name="(line139)"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
+<a name="(line140)"></a><font color=Blue>--        , text "&gt;")</font>
+<a name="(line141)"></a><font color=Blue>--  | otherwise =</font>
+<a name="(line142)"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>
+<a name="(line143)"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
+<a name="(line144)"></a><font color=Blue>--        , text "&gt;")</font>
+<a name="(line145)"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>
+<a name="(line146)"></a><font color=Blue>--</font>
+<a name="(line147)"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>
+<a name="(line148)"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>
+<a name="(line149)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>
+<a name="(line150)"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>
+<a name="(line151)"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>
+<a name="(line152)"></a>
+<a name="(line153)"></a>
+<a name="(line154)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>             <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;&gt;</font> attvalue v
+<a name="(line155)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e
+<a name="(line156)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s
+<a name="(line157)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> cdsect s
+<a name="(line158)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r
+<a name="(line159)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m
+<a name="(line160)"></a>
+<a name="(line161)"></a><a name="elementdecl"></a>elementdecl <font color=Red>::</font> ElementDecl <font color=Red>-&gt;</font> Doc
+<a name="(line162)"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ELEMENT"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line163)"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="(line164)"></a><a name="contentspec"></a>contentspec <font color=Red>::</font> ContentSpec <font color=Red>-&gt;</font> Doc
+<a name="(line165)"></a>contentspec EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>
+<a name="(line166)"></a>contentspec ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>
+<a name="(line167)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m
+<a name="(line168)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c
+<a name="(line169)"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>
+<a name="(line170)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>text n<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> modifier m
+<a name="(line171)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line172)"></a>                           modifier m
+<a name="(line173)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font>          <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line174)"></a>                           modifier m
+<a name="(line175)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>
+<a name="(line176)"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-&gt;</font> Doc
+<a name="(line177)"></a>modifier None          <font color=Red>=</font> empty
+<a name="(line178)"></a>modifier Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>
+<a name="(line179)"></a>modifier Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>
+<a name="(line180)"></a>modifier Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>
+<a name="(line181)"></a><a name="mixed"></a>mixed <font color=Red>::</font> Mixed <font color=Red>-&gt;</font> Doc
+<a name="(line182)"></a>mixed  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>
+<a name="(line183)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line184)"></a>                         hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line185)"></a>                         text <font color=Magenta>")*"</font>
+<a name="(line186)"></a>
+<a name="(line187)"></a><a name="attlistdecl"></a>attlistdecl <font color=Red>::</font> AttListDecl <font color=Red>-&gt;</font> Doc
+<a name="(line188)"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ATTLIST"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line189)"></a>                                 fsep <font color=Cyan>(</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="(line190)"></a><a name="attdef"></a>attdef <font color=Red>::</font> AttDef <font color=Red>-&gt;</font> Doc
+<a name="(line191)"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>          <font color=Red>=</font> text n <font color=Cyan>&lt;+&gt;</font> atttype t <font color=Cyan>&lt;+&gt;</font> defaultdecl d
+<a name="(line192)"></a><a name="atttype"></a>atttype <font color=Red>::</font> AttType <font color=Red>-&gt;</font> Doc
+<a name="(line193)"></a>atttype  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>
+<a name="(line194)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t
+<a name="(line195)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t
+<a name="(line196)"></a><a name="tokenizedtype"></a>tokenizedtype <font color=Red>::</font> TokenizedType <font color=Red>-&gt;</font> Doc
+<a name="(line197)"></a>tokenizedtype ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>
+<a name="(line198)"></a>tokenizedtype IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>
+<a name="(line199)"></a>tokenizedtype IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>
+<a name="(line200)"></a>tokenizedtype ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>
+<a name="(line201)"></a>tokenizedtype ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>
+<a name="(line202)"></a>tokenizedtype NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>
+<a name="(line203)"></a>tokenizedtype NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>
+<a name="(line204)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Red>::</font> EnumeratedType <font color=Red>-&gt;</font> Doc
+<a name="(line205)"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n
+<a name="(line206)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e
+<a name="(line207)"></a><a name="notationtype"></a>notationtype <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> Doc
+<a name="(line208)"></a>notationtype ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line209)"></a>                                 parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line210)"></a><a name="enumeration"></a>enumeration <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> Doc
+<a name="(line211)"></a>enumeration ns                 <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line212)"></a><a name="defaultdecl"></a>defaultdecl <font color=Red>::</font> DefaultDecl <font color=Red>-&gt;</font> Doc
+<a name="(line213)"></a>defaultdecl  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>
+<a name="(line214)"></a>defaultdecl  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>
+<a name="(line215)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font>    <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan>&lt;+&gt;</font> attvalue a
+<a name="(line216)"></a><a name="conditionalsect"></a>conditionalsect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Red>=</font> text <font color=Magenta>"&lt;![INCLUDE ["</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line217)"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>
+<a name="(line218)"></a>conditionalsect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![IGNORE ["</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line219)"></a>                                 fsep <font color=Cyan>(</font>map ignoresectcontents i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>
+<a name="(line220)"></a><a name="ignore"></a>ignore <font color=Cyan>(</font>Ignore<font color=Cyan>)</font>                <font color=Red>=</font> empty
+<a name="(line221)"></a><a name="ignoresectcontents"></a>ignoresectcontents <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>
+<a name="(line222)"></a>                               <font color=Red>=</font> ignore i <font color=Cyan>&lt;+&gt;</font> vcat <font color=Cyan>(</font>map internal is<font color=Cyan>)</font>
+<a name="(line223)"></a>                          <font color=Green><u>where</u></font> internal <font color=Cyan>(</font>ics<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![["</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line224)"></a>                                                   ignoresectcontents ics <font color=Cyan>&lt;+&gt;</font>
+<a name="(line225)"></a>                                                   text <font color=Magenta>"]]&gt;"</font> <font color=Cyan>&lt;+&gt;</font> ignore i
+<a name="(line226)"></a><a name="reference"></a>reference <font color=Red>::</font> Reference <font color=Red>-&gt;</font> Doc
+<a name="(line227)"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er
+<a name="(line228)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr
+<a name="(line229)"></a><a name="entityref"></a>entityref <font color=Red>::</font> String <font color=Red>-&gt;</font> Doc
+<a name="(line230)"></a>entityref n                    <font color=Red>=</font> text <font color=Magenta>"&amp;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>
+<a name="(line231)"></a><a name="charref"></a>charref <font color=Red>::</font> <font color=Cyan>(</font>Show a<font color=Cyan>)</font> <font color=Red>=&gt;</font> a <font color=Red>-&gt;</font> Doc
+<a name="(line232)"></a>charref c                      <font color=Red>=</font> text <font color=Magenta>"&amp;#"</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>
+<a name="(line233)"></a><a name="entitydecl"></a>entitydecl <font color=Red>::</font> EntityDecl <font color=Red>-&gt;</font> Doc
+<a name="(line234)"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d
+<a name="(line235)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d
+<a name="(line236)"></a><a name="gedecl"></a>gedecl <font color=Red>::</font> GEDecl <font color=Red>-&gt;</font> Doc
+<a name="(line237)"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> entitydef ed <font color=Cyan>&lt;&gt;</font>
+<a name="(line238)"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="(line239)"></a><a name="pedecl"></a>pedecl <font color=Red>::</font> PEDecl <font color=Red>-&gt;</font> Doc
+<a name="(line240)"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY %"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> pedef pd <font color=Cyan>&lt;&gt;</font>
+<a name="(line241)"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="(line242)"></a><a name="entitydef"></a>entitydef <font color=Red>::</font> EntityDef <font color=Red>-&gt;</font> Doc
+<a name="(line243)"></a>entitydef <font color=Cyan>(</font>DefEntityValue ew<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ew
+<a name="(line244)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan>&lt;+&gt;</font> maybe ndatadecl nd
+<a name="(line245)"></a><a name="pedef"></a>pedef <font color=Red>::</font> PEDef <font color=Red>-&gt;</font> Doc
+<a name="(line246)"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ew<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ew
+<a name="(line247)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid
+<a name="(line248)"></a><a name="externalid"></a>externalid <font color=Red>::</font> ExternalID <font color=Red>-&gt;</font> Doc
+<a name="(line249)"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font>         <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan>&lt;+&gt;</font> systemliteral sl
+<a name="(line250)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font>       <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral i <font color=Cyan>&lt;+&gt;</font>
+<a name="(line251)"></a>                                 systemliteral sl
+<a name="(line252)"></a><a name="ndatadecl"></a>ndatadecl <font color=Red>::</font> NDataDecl <font color=Red>-&gt;</font> Doc
+<a name="(line253)"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan>&lt;+&gt;</font> text n
+<a name="(line254)"></a><a name="textdecl"></a>textdecl <font color=Cyan>(</font>TextDecl vi ed<font color=Cyan>)</font>      <font color=Red>=</font> text <font color=Magenta>"&lt;?xml"</font> <font color=Cyan>&lt;+&gt;</font> maybe text vi <font color=Cyan>&lt;+&gt;</font>
+<a name="(line255)"></a>                                 encodingdecl ed <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"?&gt;"</font>
+<a name="(line256)"></a><a name="extparsedent"></a>extparsedent <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font><font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font> content c
+<a name="(line257)"></a><a name="extpe"></a>extpe <font color=Cyan>(</font>ExtPE t esd<font color=Cyan>)</font>            <font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font>
+<a name="(line258)"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl esd<font color=Cyan>)</font>
+<a name="(line259)"></a><a name="notationdecl"></a>notationdecl <font color=Red>::</font> NotationDecl <font color=Red>-&gt;</font> Doc
+<a name="(line260)"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>    <font color=Red>=</font> text <font color=Magenta>"&lt;!NOTATION"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line261)"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>
+<a name="(line262)"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="(line263)"></a><a name="publicid"></a>publicid <font color=Red>::</font> PublicID <font color=Red>-&gt;</font> Doc
+<a name="(line264)"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>          <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral p
+<a name="(line265)"></a><a name="encodingdecl"></a>encodingdecl <font color=Red>::</font> EncodingDecl <font color=Red>-&gt;</font> Doc
+<a name="(line266)"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
+<a name="(line267)"></a><a name="nmtoken"></a>nmtoken <font color=Red>::</font> String <font color=Red>-&gt;</font> Doc
+<a name="(line268)"></a>nmtoken s                      <font color=Red>=</font> text s
+<a name="(line269)"></a><a name="attvalue"></a>attvalue <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> Doc
+<a name="(line270)"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font>        <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line271)"></a>                                 hcat <font color=Cyan>(</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line272)"></a>                                 text <font color=Magenta>"\""</font>
+<a name="(line273)"></a><a name="entityvalue"></a>entityvalue <font color=Red>::</font> EntityValue <font color=Red>-&gt;</font> Doc
+<a name="(line274)"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>
+<a name="(line275)"></a>  <font color=Red>|</font> containsDoubleQuote evs    <font color=Red>=</font> text <font color=Magenta>"'"</font>  <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
+<a name="(line276)"></a>  <font color=Red>|</font> otherwise                  <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
+<a name="(line277)"></a><a name="ev"></a>ev <font color=Red>::</font> EV <font color=Red>-&gt;</font> Doc
+<a name="(line278)"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s
+<a name="(line279)"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>
+<a name="(line280)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r
+<a name="(line281)"></a><a name="pubidliteral"></a>pubidliteral <font color=Red>::</font> PubidLiteral <font color=Red>-&gt;</font> Doc
+<a name="(line282)"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>
+<a name="(line283)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
+<a name="(line284)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
+<a name="(line285)"></a><a name="systemliteral"></a>systemliteral <font color=Red>::</font> SystemLiteral <font color=Red>-&gt;</font> Doc
+<a name="(line286)"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>
+<a name="(line287)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
+<a name="(line288)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
+<a name="(line289)"></a><a name="chardata"></a>chardata <font color=Red>::</font> String <font color=Red>-&gt;</font> Doc
+<a name="(line290)"></a>chardata s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s
+<a name="(line291)"></a><a name="cdsect"></a>cdsect <font color=Red>::</font> String <font color=Red>-&gt;</font> Doc
+<a name="(line292)"></a>cdsect c                       <font color=Red>=</font> text <font color=Magenta>"&lt;![CDATA["</font> <font color=Cyan>&lt;&gt;</font> chardata c <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"]]&gt;"</font>
+<a name="(line293)"></a>
+<a name="(line294)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>
+<a name="(line295)"></a>containsDoubleQuote <font color=Red>::</font> <font color=Red>[</font>EV<font color=Red>]</font> <font color=Red>-&gt;</font> Bool
+<a name="(line296)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs
+<a name="(line297)"></a>    <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s
+<a name="(line298)"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False
 </pre>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/SAX.html b/docs/HaXml/src/Text/XML/HaXml/SAX.html
--- a/docs/HaXml/src/Text/XML/HaXml/SAX.html
+++ b/docs/HaXml/src/Text/XML/HaXml/SAX.html
@@ -37,8 +37,8 @@
 <a name="(line35)"></a>	 <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>SaxElement<font color=Red>]</font><font color=Cyan>,</font>Maybe String<font color=Cyan>)</font>
 <a name="(line36)"></a>		<font color=Blue>-- ^ A tuple of the parsed elements and @Nothing@, if no</font>
 <a name="(line37)"></a>		<font color=Blue>--   error occured, or @Just@ @String@ if an error occured.</font>
-<a name="(line38)"></a>saxParse file content <font color=Red>=</font> parseStream sax emptySTs
-<a name="(line39)"></a>                                    <font color=Cyan>(</font>xmlLex file content<font color=Cyan>)</font>
+<a name="(line38)"></a>saxParse file cntnt <font color=Red>=</font> parseStream sax emptySTs
+<a name="(line39)"></a>                                    <font color=Cyan>(</font>xmlLex file cntnt<font color=Cyan>)</font>
 <a name="(line40)"></a>
 <a name="(line41)"></a><a name="parseStream"></a>parseStream <font color=Red>::</font> Parser s t a <font color=Red>-&gt;</font> s <font color=Red>-&gt;</font> <font color=Red>[</font>t<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>a<font color=Red>]</font><font color=Cyan>,</font> Maybe String<font color=Cyan>)</font>
 <a name="(line42)"></a>parseStream <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>Nothing<font color=Cyan>)</font>
@@ -80,13 +80,13 @@
 <a name="(line78)"></a>saxcomment <font color=Red>=</font> comment <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxComment
 <a name="(line79)"></a>
 <a name="(line80)"></a><a name="saxchardata"></a>saxchardata <font color=Red>::</font> XParser SaxElement
-<a name="(line81)"></a>saxchardata <font color=Red>=</font> 
+<a name="(line81)"></a>saxchardata <font color=Red>=</font>
 <a name="(line82)"></a>  <font color=Cyan>(</font>cdsect <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxCharData<font color=Cyan>)</font>
 <a name="(line83)"></a>  <font color=Cyan>`onFail`</font>
 <a name="(line84)"></a>  <font color=Cyan>(</font>chardata <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxCharData<font color=Cyan>)</font>
 <a name="(line85)"></a>
 <a name="(line86)"></a><a name="saxreference"></a>saxreference <font color=Red>::</font> XParser SaxElement
-<a name="(line87)"></a>saxreference <font color=Red>=</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxReference	
+<a name="(line87)"></a>saxreference <font color=Red>=</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxReference
 <a name="(line88)"></a>
 <a name="(line89)"></a><a name="saxdoctypedecl"></a>saxdoctypedecl <font color=Red>::</font> XParser SaxElement
 <a name="(line90)"></a>saxdoctypedecl <font color=Red>=</font> doctypedecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxDocTypeDecl
diff --git a/docs/HaXml/src/Text/XML/HaXml/ShowXmlLazy.html b/docs/HaXml/src/Text/XML/HaXml/ShowXmlLazy.html
--- a/docs/HaXml/src/Text/XML/HaXml/ShowXmlLazy.html
+++ b/docs/HaXml/src/Text/XML/HaXml/ShowXmlLazy.html
@@ -1,283 +1,331 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a>
-<a name="(line2)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ShowXmlLazy <font color=Cyan>(</font>showXmlLazy<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line3)"></a>
-<a name="(line4)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
-<a name="(line5)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping
-<a name="(line6)"></a>
-<a name="(line7)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent <font color=Green><u>as</u></font> X
-<a name="(line8)"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>maybe<font color=Cyan>,</font>either<font color=Cyan>)</font>
-<a name="(line9)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
-<a name="(line10)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List
-<a name="(line11)"></a>
-<a name="(line12)"></a><a name="showXmlLazy"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (without DTD).                                         </font>
-<a name="(line13)"></a>showXmlLazy <font color=Red>::</font> X<font color=Cyan>.</font>XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> String
-<a name="(line14)"></a>showXmlLazy dtd x <font color=Red>=</font>
-<a name="(line15)"></a>    <font color=Green><u>case</u></font> X<font color=Cyan>.</font>toContents x <font color=Green><u>of</u></font>
-<a name="(line16)"></a>      <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> document <font color=Cyan>$</font> toXmlLazy dtd x
-<a name="(line17)"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Magenta>""</font>
+<pre><a name="(line1)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ShowXmlLazy <font color=Cyan>(</font>showXmlLazy<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line2)"></a>
+<a name="(line3)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
+<a name="(line4)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping <font color=Blue>-- (toHType, toDTD, Tuple(), Defined, showHType)</font>
+<a name="(line5)"></a>
+<a name="(line6)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent <font color=Green><u>as</u></font> X
+<a name="(line7)"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>maybe<font color=Cyan>,</font>either<font color=Cyan>)</font>
+<a name="(line8)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
+<a name="(line9)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List
+<a name="(line10)"></a>
+<a name="(line11)"></a><a name="showXmlLazy"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (without DTD).</font>
+<a name="(line12)"></a>showXmlLazy <font color=Red>::</font> X<font color=Cyan>.</font>XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> String
+<a name="(line13)"></a>showXmlLazy dtd x <font color=Red>=</font>
+<a name="(line14)"></a>    <font color=Green><u>case</u></font> X<font color=Cyan>.</font>toContents x <font color=Green><u>of</u></font>
+<a name="(line15)"></a>      <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> document <font color=Cyan>$</font> toXmlLazy dtd x
+<a name="(line16)"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Magenta>""</font>
+<a name="(line17)"></a>
 <a name="(line18)"></a>
-<a name="(line19)"></a>
-<a name="(line20)"></a><a name="toXmlLazy"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (with or without DTD).                                 </font>
-<a name="(line21)"></a>toXmlLazy <font color=Red>::</font> X<font color=Cyan>.</font>XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Document ()
-<a name="(line22)"></a>toXmlLazy dtd value <font color=Red>=</font>
-<a name="(line23)"></a>    <font color=Green><u>let</u></font> ht <font color=Red>=</font> toHType value <font color=Green><u>in</u></font>
-<a name="(line24)"></a>    Document <font color=Cyan>(</font>Prolog <font color=Cyan>(</font>Just <font color=Cyan>(</font>XMLDecl <font color=Magenta>"1.0"</font> Nothing Nothing<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line25)"></a>                     [] <font color=Cyan>(</font><font color=Green><u>if</u></font> dtd <font color=Green><u>then</u></font> Just <font color=Cyan>(</font>toDTD ht<font color=Cyan>)</font> <font color=Green><u>else</u></font> Nothing<font color=Cyan>)</font> []<font color=Cyan>)</font>
-<a name="(line26)"></a>             emptyST
-<a name="(line27)"></a>             <font color=Cyan>(</font> <font color=Green><u>case</u></font> <font color=Cyan>(</font>ht<font color=Cyan>,</font> X<font color=Cyan>.</font>toContents value<font color=Cyan>)</font> <font color=Green><u>of</u></font>
-<a name="(line28)"></a>                 <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font>       <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> [] cs
-<a name="(line29)"></a>                 <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> [] cs
-<a name="(line30)"></a>                 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Red>[</font>CElem e ()<font color=Red>]</font><font color=Cyan>)</font>   <font color=Red>-&gt;</font> e <font color=Cyan>)</font>
-<a name="(line31)"></a>             []
+<a name="(line19)"></a><a name="toXmlLazy"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (with or without DTD).</font>
+<a name="(line20)"></a>toXmlLazy <font color=Red>::</font> X<font color=Cyan>.</font>XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Document ()
+<a name="(line21)"></a>toXmlLazy dtd value <font color=Red>=</font>
+<a name="(line22)"></a>    <font color=Green><u>let</u></font> ht <font color=Red>=</font> toHType value <font color=Green><u>in</u></font>
+<a name="(line23)"></a>    Document <font color=Cyan>(</font>Prolog <font color=Cyan>(</font>Just <font color=Cyan>(</font>XMLDecl <font color=Magenta>"1.0"</font> Nothing Nothing<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line24)"></a>                     [] <font color=Cyan>(</font><font color=Green><u>if</u></font> dtd <font color=Green><u>then</u></font> Just <font color=Cyan>(</font>toDTD ht<font color=Cyan>)</font> <font color=Green><u>else</u></font> Nothing<font color=Cyan>)</font> []<font color=Cyan>)</font>
+<a name="(line25)"></a>             emptyST
+<a name="(line26)"></a>             <font color=Cyan>(</font> <font color=Green><u>case</u></font> <font color=Cyan>(</font>ht<font color=Cyan>,</font> X<font color=Cyan>.</font>toContents value<font color=Cyan>)</font> <font color=Green><u>of</u></font>
+<a name="(line27)"></a>                 <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font>       <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> [] cs
+<a name="(line28)"></a>                 <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> [] cs
+<a name="(line29)"></a>                 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Red>[</font>CElem e ()<font color=Red>]</font><font color=Cyan>)</font>   <font color=Red>-&gt;</font> e <font color=Cyan>)</font>
+<a name="(line30)"></a>             []
+<a name="(line31)"></a>
 <a name="(line32)"></a>
 <a name="(line33)"></a>
 <a name="(line34)"></a>
-<a name="(line35)"></a>
-<a name="(line36)"></a><a name="Doc"></a><font color=Green><u>type</u></font> Doc <font color=Red>=</font> String
-<a name="(line37)"></a><a name="empty"></a>empty <font color=Red>=</font> <font color=Magenta>""</font>
-<a name="(line38)"></a><a name="$$"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> a b <font color=Red>=</font> a <font color=Cyan>++</font> <font color=Magenta>"\n"</font> <font color=Cyan>++</font> b
-<a name="(line39)"></a><a name="vcat"></a>vcat a <font color=Red>=</font> foldr <font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> [] a
-<a name="(line40)"></a><a name="hcat"></a>hcat <font color=Red>=</font> concat
-<a name="(line41)"></a><a name="<>"></a><font color=Cyan>(</font><font color=Cyan>&lt;&gt;</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line42)"></a><a name="<+>"></a><font color=Cyan>(</font><font color=Cyan>&lt;+&gt;</font><font color=Cyan>)</font> a b <font color=Red>=</font> a <font color=Cyan>++</font> <font color=Magenta>" "</font> <font color=Cyan>++</font> b
-<a name="(line43)"></a><a name="fsep"></a>fsep <font color=Red>=</font> vcat
-<a name="(line44)"></a><a name="text"></a>text string <font color=Red>=</font> string
-<a name="(line45)"></a><a name="parens"></a>parens string <font color=Red>=</font> <font color=Magenta>"("</font><font color=Cyan>++</font>string<font color=Cyan>++</font><font color=Magenta>")"</font>
-<a name="(line46)"></a><a name="nest"></a>nest <font color=Green><u>_</u></font> string <font color=Red>=</font> string
-<a name="(line47)"></a>
-<a name="(line48)"></a>
-<a name="(line49)"></a>
-<a name="(line50)"></a><a name="either"></a>either f g <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> f x
-<a name="(line51)"></a>either f g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x
-<a name="(line52)"></a>
-<a name="(line53)"></a><a name="maybe"></a>maybe f Nothing  <font color=Red>=</font> empty
-<a name="(line54)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x
-<a name="(line55)"></a>
-<a name="(line56)"></a><font color=Blue>--peref p   = text "%" &lt;&gt; text p &lt;&gt; text ";"</font>
+<a name="(line35)"></a><a name="Doc"></a><font color=Green><u>type</u></font> Doc <font color=Red>=</font> String
+<a name="(line36)"></a><a name="empty"></a>empty <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line37)"></a>empty <font color=Red>=</font> <font color=Magenta>""</font>
+<a name="(line38)"></a><a name="$$"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line39)"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> a b <font color=Red>=</font> a <font color=Cyan>++</font> <font color=Magenta>"\n"</font> <font color=Cyan>++</font> b
+<a name="(line40)"></a><a name="vcat"></a>vcat <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line41)"></a>vcat a <font color=Red>=</font> foldr <font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> [] a
+<a name="(line42)"></a><a name="hcat"></a>hcat <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>a<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font>
+<a name="(line43)"></a>hcat <font color=Red>=</font> concat
+<a name="(line44)"></a><a name="<>"></a><font color=Cyan>(</font><font color=Cyan>&lt;&gt;</font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font>
+<a name="(line45)"></a><font color=Cyan>(</font><font color=Cyan>&lt;&gt;</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="(line46)"></a><a name="<+>"></a><font color=Cyan>(</font><font color=Cyan>&lt;+&gt;</font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line47)"></a><font color=Cyan>(</font><font color=Cyan>&lt;+&gt;</font><font color=Cyan>)</font> a b <font color=Red>=</font> a <font color=Cyan>++</font> <font color=Magenta>" "</font> <font color=Cyan>++</font> b
+<a name="(line48)"></a><a name="fsep"></a>fsep <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line49)"></a>fsep <font color=Red>=</font> vcat
+<a name="(line50)"></a><a name="text"></a>text <font color=Red>::</font> t <font color=Red>-&gt;</font> t
+<a name="(line51)"></a>text string <font color=Red>=</font> string
+<a name="(line52)"></a><a name="parens"></a>parens <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line53)"></a>parens string <font color=Red>=</font> <font color=Magenta>"("</font><font color=Cyan>++</font>string<font color=Cyan>++</font><font color=Magenta>")"</font>
+<a name="(line54)"></a><a name="nest"></a>nest <font color=Red>::</font> t <font color=Red>-&gt;</font> t1 <font color=Red>-&gt;</font> t1
+<a name="(line55)"></a>nest <font color=Green><u>_</u></font> string <font color=Red>=</font> string
+<a name="(line56)"></a>
 <a name="(line57)"></a>
-<a name="(line58)"></a><font color=Blue>----</font>
-<a name="(line59)"></a>
-<a name="(line60)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Doc
-<a name="(line61)"></a><a name="prolog"></a>prolog   <font color=Red>::</font> Prolog <font color=Red>-&gt;</font> Doc
-<a name="(line62)"></a><a name="xmldecl"></a>xmldecl  <font color=Red>::</font> XMLDecl <font color=Red>-&gt;</font> Doc
-<a name="(line63)"></a><a name="misc"></a>misc     <font color=Red>::</font> Misc <font color=Red>-&gt;</font> Doc
-<a name="(line64)"></a><a name="sddecl"></a>sddecl   <font color=Red>::</font> Bool <font color=Red>-&gt;</font> Doc
-<a name="(line65)"></a>
-<a name="(line66)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Doc
-<a name="(line67)"></a><a name="markupdecl"></a>markupdecl  <font color=Red>::</font> MarkupDecl <font color=Red>-&gt;</font> Doc
-<a name="(line68)"></a><a name="extsubset"></a>extsubset   <font color=Red>::</font> ExtSubset <font color=Red>-&gt;</font> Doc
-<a name="(line69)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> ExtSubsetDecl <font color=Red>-&gt;</font> Doc
-<a name="(line70)"></a><a name="cp"></a>cp          <font color=Red>::</font> CP <font color=Red>-&gt;</font> Doc
-<a name="(line71)"></a>
-<a name="(line72)"></a><a name="element"></a>element   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> Doc
-<a name="(line73)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> Doc                     <font color=Cyan>--etc</font>
-<a name="(line74)"></a><a name="content"></a>content   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> Doc
-<a name="(line75)"></a>
-<a name="(line76)"></a><font color=Blue>----</font>
-<a name="(line77)"></a>
-<a name="(line78)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>map misc m<font color=Cyan>)</font>
-<a name="(line79)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>
-<a name="(line80)"></a>                             vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>
-<a name="(line81)"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>
-<a name="(line82)"></a>                             vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>
-<a name="(line83)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font>   <font color=Red>=</font> text <font color=Magenta>"&lt;?xml version='"</font> <font color=Cyan>&lt;&gt;</font> text v <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line84)"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>
-<a name="(line85)"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>
-<a name="(line86)"></a>                             text <font color=Magenta>"?&gt;"</font>
-<a name="(line87)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!--"</font> <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"--&gt;"</font>
-<a name="(line88)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"&lt;?"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"?&gt;"</font>
-<a name="(line89)"></a>sddecl sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>
-<a name="(line90)"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>
-<a name="(line91)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font> 
-<a name="(line92)"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
-<a name="(line93)"></a>                             <font color=Green><u>else</u></font> hd <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>
-<a name="(line94)"></a>                                  vcat <font color=Cyan>(</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]&gt;"</font>
-<a name="(line95)"></a>                           <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"&lt;!DOCTYPE"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line96)"></a>                                      maybe externalid eid
-<a name="(line97)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e
-<a name="(line98)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a
-<a name="(line99)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e
-<a name="(line100)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n
-<a name="(line101)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m
-<a name="(line102)"></a><font color=Blue>--markupdecl (MarkupPE p m)  = peref p</font>
-<a name="(line103)"></a>extsubset <font color=Cyan>(</font>ExtSubset t ds<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan>$$</font>
-<a name="(line104)"></a>                             vcat <font color=Cyan>(</font>map extsubsetdecl ds<font color=Cyan>)</font>
-<a name="(line105)"></a>extsubsetdecl <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font>      <font color=Red>=</font> markupdecl m
-<a name="(line106)"></a>extsubsetdecl <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c
-<a name="(line107)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e)   = peref p</font>
-<a name="(line108)"></a>
-<a name="(line109)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line110)"></a>                         fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"/&gt;"</font>
-<a name="(line111)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>
-<a name="(line112)"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>
-<a name="(line113)"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>
-<a name="(line114)"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>
-<a name="(line115)"></a>    <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line116)"></a>                         text <font color=Magenta>"&gt;"</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map content cs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line117)"></a>                         text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
-<a name="(line118)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty
-<a name="(line119)"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c
-<a name="(line120)"></a>
-<a name="(line121)"></a><a name="isText"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True
-<a name="(line122)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> True
-<a name="(line123)"></a>isText <font color=Green><u>_</u></font>               <font color=Red>=</font> False
-<a name="(line124)"></a>
-<a name="(line125)"></a><a name="carryelem"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c
-<a name="(line126)"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
-<a name="(line127)"></a>                           text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>
-<a name="(line128)"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>
-<a name="(line129)"></a>carryelem e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c
-<a name="(line130)"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>
-<a name="(line131)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font>  <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
-<a name="(line132)"></a>                          <font color=Green><u>in</u></font>
-<a name="(line133)"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
-<a name="(line134)"></a>                            text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>
-<a name="(line135)"></a>                            nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> <font color=Blue>--- $$</font>
-<a name="(line136)"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n
-<a name="(line137)"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
-<a name="(line138)"></a><a name="carrycontent"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> carryelem e c
-<a name="(line139)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>
-<a name="(line140)"></a>carrycontent <font color=Cyan>(</font>CString True  s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>
-<a name="(line141)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c    <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>
-<a name="(line142)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>
-<a name="(line143)"></a>
-<a name="(line144)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>c<font color=Red>-&gt;</font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> c <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>
-<a name="(line145)"></a>carryscan f []     c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>
-<a name="(line146)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c
-<a name="(line147)"></a>                           <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0
-<a name="(line148)"></a>                       <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>
-<a name="(line149)"></a>
-<a name="(line150)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>
-<a name="(line151)"></a><font color=Blue>--  | isText (head cs) =</font>
-<a name="(line152)"></a><font color=Blue>--        ( start &lt;&gt;</font>
-<a name="(line153)"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
-<a name="(line154)"></a><font color=Blue>--        , text "&gt;")</font>
-<a name="(line155)"></a><font color=Blue>--  | otherwise =</font>
-<a name="(line156)"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>
-<a name="(line157)"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
-<a name="(line158)"></a><font color=Blue>--        , text "&gt;")</font>
-<a name="(line159)"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>
-<a name="(line160)"></a><font color=Blue>--</font>
-<a name="(line161)"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>
-<a name="(line162)"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>
-<a name="(line163)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>
-<a name="(line164)"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>
-<a name="(line165)"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>
-<a name="(line166)"></a>
-<a name="(line167)"></a>
-<a name="(line168)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>             <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;&gt;</font> attvalue v
-<a name="(line169)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e
-<a name="(line170)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s
-<a name="(line171)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> cdsect s
-<a name="(line172)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r
-<a name="(line173)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m
-<a name="(line174)"></a>
-<a name="(line175)"></a><a name="elementdecl"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ELEMENT"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line176)"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
-<a name="(line177)"></a><a name="contentspec"></a>contentspec EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>
-<a name="(line178)"></a>contentspec ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>
-<a name="(line179)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m
-<a name="(line180)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c
-<a name="(line181)"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>
-<a name="(line182)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font>       <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> modifier m
-<a name="(line183)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line184)"></a>                           modifier m
-<a name="(line185)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font>          <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line186)"></a>                           modifier m
-<a name="(line187)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>
-<a name="(line188)"></a>modifier None          <font color=Red>=</font> empty
-<a name="(line189)"></a>modifier Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>
-<a name="(line190)"></a>modifier Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>
-<a name="(line191)"></a>modifier Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>
-<a name="(line192)"></a><a name="mixed"></a>mixed  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>
-<a name="(line193)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line194)"></a>                         hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line195)"></a>                         text <font color=Magenta>")*"</font>
-<a name="(line196)"></a>
-<a name="(line197)"></a><a name="attlistdecl"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ATTLIST"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line198)"></a>                                 fsep <font color=Cyan>(</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
-<a name="(line199)"></a><a name="attdef"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>          <font color=Red>=</font> text n <font color=Cyan>&lt;+&gt;</font> atttype t <font color=Cyan>&lt;+&gt;</font> defaultdecl d
-<a name="(line200)"></a><a name="atttype"></a>atttype  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>
-<a name="(line201)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t
-<a name="(line202)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t
-<a name="(line203)"></a><a name="tokenizedtype"></a>tokenizedtype ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>
-<a name="(line204)"></a>tokenizedtype IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>
-<a name="(line205)"></a>tokenizedtype IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>
-<a name="(line206)"></a>tokenizedtype ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>
-<a name="(line207)"></a>tokenizedtype ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>
-<a name="(line208)"></a>tokenizedtype NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>
-<a name="(line209)"></a>tokenizedtype NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>
-<a name="(line210)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n
-<a name="(line211)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e
-<a name="(line212)"></a><a name="notationtype"></a>notationtype ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line213)"></a>                                 parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line214)"></a><a name="enumeration"></a>enumeration ns                 <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line215)"></a><a name="defaultdecl"></a>defaultdecl  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>
-<a name="(line216)"></a>defaultdecl  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>
-<a name="(line217)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font>    <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan>&lt;+&gt;</font> attvalue a
-<a name="(line218)"></a><a name="conditionalsect"></a>conditionalsect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Red>=</font> text <font color=Magenta>"&lt;![INCLUDE ["</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line219)"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>
-<a name="(line220)"></a>conditionalsect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![IGNORE ["</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line221)"></a>                                 fsep <font color=Cyan>(</font>map ignoresectcontents i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>
-<a name="(line222)"></a><a name="ignore"></a>ignore <font color=Cyan>(</font>Ignore<font color=Cyan>)</font>                <font color=Red>=</font> empty
-<a name="(line223)"></a><a name="ignoresectcontents"></a>ignoresectcontents <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>
-<a name="(line224)"></a>                               <font color=Red>=</font> ignore i <font color=Cyan>&lt;+&gt;</font> vcat <font color=Cyan>(</font>map internal is<font color=Cyan>)</font>
-<a name="(line225)"></a>                          <font color=Green><u>where</u></font> internal <font color=Cyan>(</font>ics<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![["</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line226)"></a>                                                   ignoresectcontents ics <font color=Cyan>&lt;+&gt;</font>
-<a name="(line227)"></a>                                                   text <font color=Magenta>"]]&gt;"</font> <font color=Cyan>&lt;+&gt;</font> ignore i
-<a name="(line228)"></a><a name="reference"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er
-<a name="(line229)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr
-<a name="(line230)"></a><a name="entityref"></a>entityref n                    <font color=Red>=</font> text <font color=Magenta>"&amp;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>
-<a name="(line231)"></a><a name="charref"></a>charref c                      <font color=Red>=</font> text <font color=Magenta>"&amp;#"</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>
-<a name="(line232)"></a><a name="entitydecl"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d
-<a name="(line233)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d
-<a name="(line234)"></a><a name="gedecl"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> entitydef ed <font color=Cyan>&lt;&gt;</font>
-<a name="(line235)"></a>                                 text <font color=Magenta>"&gt;"</font>
-<a name="(line236)"></a><a name="pedecl"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY %"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> pedef pd <font color=Cyan>&lt;&gt;</font>
-<a name="(line237)"></a>                                 text <font color=Magenta>"&gt;"</font>
-<a name="(line238)"></a><a name="entitydef"></a>entitydef <font color=Cyan>(</font>DefEntityValue ev<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ev
-<a name="(line239)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan>&lt;+&gt;</font> maybe ndatadecl nd
-<a name="(line240)"></a><a name="pedef"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ev
-<a name="(line241)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid
-<a name="(line242)"></a><a name="externalid"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font>         <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan>&lt;+&gt;</font> systemliteral sl
-<a name="(line243)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font>       <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral i <font color=Cyan>&lt;+&gt;</font>
-<a name="(line244)"></a>                                 systemliteral sl
-<a name="(line245)"></a><a name="ndatadecl"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan>&lt;+&gt;</font> text n
-<a name="(line246)"></a><a name="textdecl"></a>textdecl <font color=Cyan>(</font>TextDecl vi ed<font color=Cyan>)</font>      <font color=Red>=</font> text <font color=Magenta>"&lt;?xml"</font> <font color=Cyan>&lt;+&gt;</font> maybe text vi <font color=Cyan>&lt;+&gt;</font>
-<a name="(line247)"></a>                                 encodingdecl ed <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"?&gt;"</font>
-<a name="(line248)"></a><a name="extparsedent"></a>extparsedent <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font><font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font> content c
-<a name="(line249)"></a><a name="extpe"></a>extpe <font color=Cyan>(</font>ExtPE t esd<font color=Cyan>)</font>            <font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font>
-<a name="(line250)"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl esd<font color=Cyan>)</font>
-<a name="(line251)"></a><a name="notationdecl"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>    <font color=Red>=</font> text <font color=Magenta>"&lt;!NOTATION"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
-<a name="(line252)"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>
-<a name="(line253)"></a>                                 text <font color=Magenta>"&gt;"</font>
-<a name="(line254)"></a><a name="publicid"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>          <font color=Red>=</font> text <font color=Magenta>"PUBLICID"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral p
-<a name="(line255)"></a><a name="encodingdecl"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
-<a name="(line256)"></a><a name="nmtoken"></a>nmtoken s                      <font color=Red>=</font> text s
-<a name="(line257)"></a><a name="attvalue"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font>        <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line258)"></a>                                 hcat <font color=Cyan>(</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
-<a name="(line259)"></a>                                 text <font color=Magenta>"\""</font>
-<a name="(line260)"></a><a name="entityvalue"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>
-<a name="(line261)"></a>  <font color=Red>|</font> containsDoubleQuote evs    <font color=Red>=</font> text <font color=Magenta>"'"</font>  <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
-<a name="(line262)"></a>  <font color=Red>|</font> otherwise                  <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
-<a name="(line263)"></a><a name="ev"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s
-<a name="(line264)"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>
-<a name="(line265)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r
-<a name="(line266)"></a><a name="pubidliteral"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>
-<a name="(line267)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
-<a name="(line268)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
-<a name="(line269)"></a><a name="systemliteral"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>
-<a name="(line270)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
-<a name="(line271)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
-<a name="(line272)"></a><a name="chardata"></a>chardata s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s
-<a name="(line273)"></a><a name="cdsect"></a>cdsect c                       <font color=Red>=</font> text <font color=Magenta>"&lt;![CDATA["</font> <font color=Cyan>&lt;&gt;</font> chardata c <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"]]&gt;"</font>
-<a name="(line274)"></a>
-<a name="(line275)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>
-<a name="(line276)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs
-<a name="(line277)"></a>    <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s
-<a name="(line278)"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False
-<a name="(line279)"></a>
+<a name="(line58)"></a>
+<a name="(line59)"></a><a name="either"></a>either <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-&gt;</font> t1<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>t2 <font color=Red>-&gt;</font> t1<font color=Cyan>)</font> <font color=Red>-&gt;</font> Either t t2 <font color=Red>-&gt;</font> t1
+<a name="(line60)"></a>either f <font color=Green><u>_</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> f x
+<a name="(line61)"></a>either <font color=Green><u>_</u></font> g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x
+<a name="(line62)"></a>
+<a name="(line63)"></a><a name="maybe"></a>maybe <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> Maybe t <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line64)"></a>maybe <font color=Green><u>_</u></font> Nothing  <font color=Red>=</font> empty
+<a name="(line65)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x
+<a name="(line66)"></a>
+<a name="(line67)"></a><font color=Blue>--peref p   = text "%" &lt;&gt; text p &lt;&gt; text ";"</font>
+<a name="(line68)"></a>
+<a name="(line69)"></a><font color=Blue>----</font>
+<a name="(line70)"></a>
+<a name="(line71)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Doc
+<a name="(line72)"></a><a name="prolog"></a>prolog   <font color=Red>::</font> Prolog <font color=Red>-&gt;</font> Doc
+<a name="(line73)"></a><a name="xmldecl"></a>xmldecl  <font color=Red>::</font> XMLDecl <font color=Red>-&gt;</font> Doc
+<a name="(line74)"></a><a name="misc"></a>misc     <font color=Red>::</font> Misc <font color=Red>-&gt;</font> Doc
+<a name="(line75)"></a><a name="sddecl"></a>sddecl   <font color=Red>::</font> Bool <font color=Red>-&gt;</font> Doc
+<a name="(line76)"></a>
+<a name="(line77)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Doc
+<a name="(line78)"></a><a name="markupdecl"></a>markupdecl  <font color=Red>::</font> MarkupDecl <font color=Red>-&gt;</font> Doc
+<a name="(line79)"></a><a name="cp"></a><font color=Blue>-- extsubset   :: ExtSubset -&gt; Doc</font>
+<a name="(line80)"></a><font color=Blue>-- extsubsetdecl :: ExtSubsetDecl -&gt; Doc</font>
+<a name="(line81)"></a>cp          <font color=Red>::</font> CP <font color=Red>-&gt;</font> Doc
+<a name="(line82)"></a>
+<a name="(line83)"></a><a name="element"></a>element   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> Doc
+<a name="(line84)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> Doc                     <font color=Cyan>--etc</font>
+<a name="(line85)"></a><a name="content"></a>content   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> Doc
+<a name="(line86)"></a>
+<a name="(line87)"></a><font color=Blue>----</font>
+<a name="(line88)"></a>
+<a name="(line89)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>map misc m<font color=Cyan>)</font>
+<a name="(line90)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>
+<a name="(line91)"></a>                             vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="(line92)"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>
+<a name="(line93)"></a>                             vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>
+<a name="(line94)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font>   <font color=Red>=</font> text <font color=Magenta>"&lt;?xml version='"</font> <font color=Cyan>&lt;&gt;</font> text v <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line95)"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>
+<a name="(line96)"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>
+<a name="(line97)"></a>                             text <font color=Magenta>"?&gt;"</font>
+<a name="(line98)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!--"</font> <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"--&gt;"</font>
+<a name="(line99)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"&lt;?"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"?&gt;"</font>
+<a name="(line100)"></a>sddecl sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>
+<a name="(line101)"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>
+<a name="(line102)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font>
+<a name="(line103)"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="(line104)"></a>                             <font color=Green><u>else</u></font> hd <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>
+<a name="(line105)"></a>                                  vcat <font color=Cyan>(</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]&gt;"</font>
+<a name="(line106)"></a>                           <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"&lt;!DOCTYPE"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line107)"></a>                                      maybe externalid eid
+<a name="(line108)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e
+<a name="(line109)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a
+<a name="(line110)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e
+<a name="(line111)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n
+<a name="(line112)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m
+<a name="(line113)"></a><font color=Blue>--markupdecl (MarkupPE p m)  = peref p</font>
+<a name="(line114)"></a><font color=Blue>-- _ (ExtSubset t ds) = maybe textdecl t $$</font>
+<a name="(line115)"></a><font color=Blue>--                              vcat (map extsubsetdecl ds)</font>
+<a name="(line116)"></a><font color=Blue>-- _ (ExtMarkupDecl m)      = markupdecl m</font>
+<a name="(line117)"></a><font color=Blue>-- extsubsetdecl (ExtConditionalSect c) = conditionalsect c</font>
+<a name="(line118)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e)   = peref p</font>
+<a name="(line119)"></a>
+<a name="(line120)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line121)"></a>                         fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"/&gt;"</font>
+<a name="(line122)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>
+<a name="(line123)"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>
+<a name="(line124)"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>
+<a name="(line125)"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>
+<a name="(line126)"></a>    <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line127)"></a>                         text <font color=Magenta>"&gt;"</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map content cs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line128)"></a>                         text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="(line129)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty
+<a name="(line130)"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c
+<a name="(line131)"></a>
+<a name="(line132)"></a><a name="isText"></a>isText <font color=Red>::</font> Content t <font color=Red>-&gt;</font> Bool
+<a name="(line133)"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True
+<a name="(line134)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> True
+<a name="(line135)"></a>isText <font color=Green><u>_</u></font>               <font color=Red>=</font> False
+<a name="(line136)"></a>
+<a name="(line137)"></a><a name="carryelem"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c
+<a name="(line138)"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
+<a name="(line139)"></a>                           text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>
+<a name="(line140)"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>
+<a name="(line141)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c
+<a name="(line142)"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>
+<a name="(line143)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font>  <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="(line144)"></a>                          <font color=Green><u>in</u></font>
+<a name="(line145)"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
+<a name="(line146)"></a>                            text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="(line147)"></a>                            nest <font color=Cyan>(</font><font color=Magenta>2</font> <font color=Red>::</font> Int<font color=Cyan>)</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> <font color=Blue>--- $$</font>
+<a name="(line148)"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n
+<a name="(line149)"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="(line150)"></a><a name="carrycontent"></a>carrycontent <font color=Red>::</font> Content t <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>,</font> <font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>)</font>
+<a name="(line151)"></a>carryelem <font color=Red>::</font> Element t <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>,</font> <font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>)</font>
+<a name="(line152)"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> carryelem e c
+<a name="(line153)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>
+<a name="(line154)"></a>carrycontent <font color=Cyan>(</font>CString True  s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>
+<a name="(line155)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c    <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>
+<a name="(line156)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>
+<a name="(line157)"></a>
+<a name="(line158)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>c<font color=Red>-&gt;</font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> c <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>
+<a name="(line159)"></a>carryscan <font color=Green><u>_</u></font> []     c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>
+<a name="(line160)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c
+<a name="(line161)"></a>                           <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0
+<a name="(line162)"></a>                       <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>
+<a name="(line163)"></a>
+<a name="(line164)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>
+<a name="(line165)"></a><font color=Blue>--  | isText (head cs) =</font>
+<a name="(line166)"></a><font color=Blue>--        ( start &lt;&gt;</font>
+<a name="(line167)"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
+<a name="(line168)"></a><font color=Blue>--        , text "&gt;")</font>
+<a name="(line169)"></a><font color=Blue>--  | otherwise =</font>
+<a name="(line170)"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>
+<a name="(line171)"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
+<a name="(line172)"></a><font color=Blue>--        , text "&gt;")</font>
+<a name="(line173)"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>
+<a name="(line174)"></a><font color=Blue>--</font>
+<a name="(line175)"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>
+<a name="(line176)"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>
+<a name="(line177)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>
+<a name="(line178)"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>
+<a name="(line179)"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>
+<a name="(line180)"></a>
+<a name="(line181)"></a>
+<a name="(line182)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>             <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;&gt;</font> attvalue v
+<a name="(line183)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e
+<a name="(line184)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s
+<a name="(line185)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> cdsect s
+<a name="(line186)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r
+<a name="(line187)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m
+<a name="(line188)"></a>
+<a name="(line189)"></a><a name="elementdecl"></a>elementdecl <font color=Red>::</font> ElementDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line190)"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ELEMENT"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line191)"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="(line192)"></a><a name="contentspec"></a>contentspec <font color=Red>::</font> ContentSpec <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line193)"></a>contentspec EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>
+<a name="(line194)"></a>contentspec ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>
+<a name="(line195)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m
+<a name="(line196)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c
+<a name="(line197)"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>
+<a name="(line198)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font>       <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> modifier m
+<a name="(line199)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line200)"></a>                           modifier m
+<a name="(line201)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font>          <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line202)"></a>                           modifier m
+<a name="(line203)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>
+<a name="(line204)"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line205)"></a>modifier None          <font color=Red>=</font> empty
+<a name="(line206)"></a>modifier Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>
+<a name="(line207)"></a>modifier Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>
+<a name="(line208)"></a>modifier Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>
+<a name="(line209)"></a><a name="mixed"></a>mixed <font color=Red>::</font> Mixed <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line210)"></a>mixed  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>
+<a name="(line211)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line212)"></a>                         hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line213)"></a>                         text <font color=Magenta>")*"</font>
+<a name="(line214)"></a>
+<a name="(line215)"></a><a name="attlistdecl"></a>attlistdecl <font color=Red>::</font> AttListDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line216)"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ATTLIST"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line217)"></a>                                 fsep <font color=Cyan>(</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="(line218)"></a><a name="attdef"></a>attdef <font color=Red>::</font> AttDef <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line219)"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>          <font color=Red>=</font> text n <font color=Cyan>&lt;+&gt;</font> atttype t <font color=Cyan>&lt;+&gt;</font> defaultdecl d
+<a name="(line220)"></a><a name="atttype"></a>atttype <font color=Red>::</font> AttType <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line221)"></a>atttype  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>
+<a name="(line222)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t
+<a name="(line223)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t
+<a name="(line224)"></a><a name="tokenizedtype"></a>tokenizedtype <font color=Red>::</font> TokenizedType <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line225)"></a>tokenizedtype ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>
+<a name="(line226)"></a>tokenizedtype IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>
+<a name="(line227)"></a>tokenizedtype IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>
+<a name="(line228)"></a>tokenizedtype ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>
+<a name="(line229)"></a>tokenizedtype ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>
+<a name="(line230)"></a>tokenizedtype NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>
+<a name="(line231)"></a>tokenizedtype NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>
+<a name="(line232)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Red>::</font> EnumeratedType <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line233)"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n
+<a name="(line234)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e
+<a name="(line235)"></a><a name="notationtype"></a>notationtype <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line236)"></a>notationtype ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="(line237)"></a>                                 parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line238)"></a><a name="enumeration"></a>enumeration <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line239)"></a>enumeration ns                 <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line240)"></a><a name="defaultdecl"></a>defaultdecl <font color=Red>::</font> DefaultDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line241)"></a>defaultdecl  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>
+<a name="(line242)"></a>defaultdecl  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>
+<a name="(line243)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font>    <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan>&lt;+&gt;</font> attvalue a
+<a name="(line244)"></a><a name="reference"></a><font color=Blue>-- _ (IncludeSect i)= text "&lt;![INCLUDE [" &lt;+&gt;</font>
+<a name="(line245)"></a><font color=Blue>--                                  vcat (map extsubsetdecl i) &lt;+&gt; text "]]&gt;"</font>
+<a name="(line246)"></a><font color=Blue>-- conditionalsect (IgnoreSect i) = text "&lt;![IGNORE [" &lt;+&gt;</font>
+<a name="(line247)"></a><font color=Blue>--                                  fsep (map ignoresectcontents i) &lt;+&gt; text "]]&gt;"</font>
+<a name="(line248)"></a><font color=Blue>-- _ (Ignore)                = empty</font>
+<a name="(line249)"></a><font color=Blue>-- _ (IgnoreSectContents i is)</font>
+<a name="(line250)"></a><font color=Blue>--                                = ignore i &lt;+&gt; vcat (map internal is)</font>
+<a name="(line251)"></a><font color=Blue>--                           where internal (ics,i) = text "&lt;![[" &lt;+&gt;</font>
+<a name="(line252)"></a><font color=Blue>--                                                    ignoresectcontents ics &lt;+&gt;</font>
+<a name="(line253)"></a><font color=Blue>--                                                    text "]]&gt;" &lt;+&gt; ignore i</font>
+<a name="(line254)"></a>reference <font color=Red>::</font> Reference <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line255)"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er
+<a name="(line256)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr
+<a name="(line257)"></a><a name="entityref"></a>entityref <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line258)"></a>entityref n                    <font color=Red>=</font> text <font color=Magenta>"&amp;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>
+<a name="(line259)"></a><a name="charref"></a>charref <font color=Red>::</font> <font color=Cyan>(</font>Show a<font color=Cyan>)</font> <font color=Red>=&gt;</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line260)"></a>charref c                      <font color=Red>=</font> text <font color=Magenta>"&amp;#"</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>
+<a name="(line261)"></a><a name="entitydecl"></a>entitydecl <font color=Red>::</font> EntityDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line262)"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d
+<a name="(line263)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d
+<a name="(line264)"></a><a name="gedecl"></a>gedecl <font color=Red>::</font> GEDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line265)"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> entitydef ed <font color=Cyan>&lt;&gt;</font>
+<a name="(line266)"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="(line267)"></a><a name="pedecl"></a>pedecl <font color=Red>::</font> PEDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line268)"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY %"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> pedef pd <font color=Cyan>&lt;&gt;</font>
+<a name="(line269)"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="(line270)"></a><a name="entitydef"></a>entitydef <font color=Red>::</font> EntityDef <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line271)"></a>entitydef <font color=Cyan>(</font>DefEntityValue ew<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ew
+<a name="(line272)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan>&lt;+&gt;</font> maybe ndatadecl nd
+<a name="(line273)"></a><a name="pedef"></a>pedef <font color=Red>::</font> PEDef <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line274)"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ew<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ew
+<a name="(line275)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid
+<a name="(line276)"></a><a name="externalid"></a>externalid <font color=Red>::</font> ExternalID <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line277)"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font>         <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan>&lt;+&gt;</font> systemliteral sl
+<a name="(line278)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font>       <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral i <font color=Cyan>&lt;+&gt;</font>
+<a name="(line279)"></a>                                 systemliteral sl
+<a name="(line280)"></a><a name="ndatadecl"></a>ndatadecl <font color=Red>::</font> NDataDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line281)"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan>&lt;+&gt;</font> text n
+<a name="(line282)"></a><a name="notationdecl"></a><font color=Blue>-- _ (TextDecl vi ed)      = text "&lt;?xml" &lt;+&gt; maybe text vi &lt;+&gt;</font>
+<a name="(line283)"></a><font color=Blue>--                                  encodingdecl ed &lt;&gt; text "?&gt;"</font>
+<a name="(line284)"></a><font color=Blue>-- _ (ExtParsedEnt t c)= maybe textdecl t &lt;+&gt; content c</font>
+<a name="(line285)"></a><font color=Blue>-- _ (ExtPE t esd)            = maybe textdecl t &lt;+&gt;</font>
+<a name="(line286)"></a><font color=Blue>--                                  vcat (map extsubsetdecl esd)</font>
+<a name="(line287)"></a>notationdecl <font color=Red>::</font> NotationDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line288)"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>    <font color=Red>=</font> text <font color=Magenta>"&lt;!NOTATION"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>
+<a name="(line289)"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>
+<a name="(line290)"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="(line291)"></a><a name="publicid"></a>publicid <font color=Red>::</font> PublicID <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line292)"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>          <font color=Red>=</font> text <font color=Magenta>"PUBLICID"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral p
+<a name="(line293)"></a><a name="encodingdecl"></a>encodingdecl <font color=Red>::</font> EncodingDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line294)"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
+<a name="(line295)"></a><a name="nmtoken"></a>nmtoken <font color=Red>::</font> t <font color=Red>-&gt;</font> t
+<a name="(line296)"></a>nmtoken s                      <font color=Red>=</font> text s
+<a name="(line297)"></a><a name="attvalue"></a>attvalue <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line298)"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font>        <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line299)"></a>                                 hcat <font color=Cyan>(</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>
+<a name="(line300)"></a>                                 text <font color=Magenta>"\""</font>
+<a name="(line301)"></a><a name="entityvalue"></a>entityvalue <font color=Red>::</font> EntityValue <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line302)"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>
+<a name="(line303)"></a>  <font color=Red>|</font> containsDoubleQuote evs    <font color=Red>=</font> text <font color=Magenta>"'"</font>  <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
+<a name="(line304)"></a>  <font color=Red>|</font> otherwise                  <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
+<a name="(line305)"></a><a name="ev"></a>ev <font color=Red>::</font> EV <font color=Red>-&gt;</font> String
+<a name="(line306)"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s
+<a name="(line307)"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>
+<a name="(line308)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r
+<a name="(line309)"></a><a name="pubidliteral"></a>pubidliteral <font color=Red>::</font> PubidLiteral <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line310)"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>
+<a name="(line311)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
+<a name="(line312)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
+<a name="(line313)"></a><a name="systemliteral"></a>systemliteral <font color=Red>::</font> SystemLiteral <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line314)"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>
+<a name="(line315)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>
+<a name="(line316)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
+<a name="(line317)"></a><a name="chardata"></a>chardata <font color=Red>::</font> t <font color=Red>-&gt;</font> t
+<a name="(line318)"></a>chardata s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s
+<a name="(line319)"></a><a name="cdsect"></a>cdsect <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="(line320)"></a>cdsect c                       <font color=Red>=</font> text <font color=Magenta>"&lt;![CDATA["</font> <font color=Cyan>&lt;&gt;</font> chardata c <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"]]&gt;"</font>
+<a name="(line321)"></a>
+<a name="(line322)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>
+<a name="(line323)"></a>containsDoubleQuote <font color=Red>::</font> <font color=Red>[</font>EV<font color=Red>]</font> <font color=Red>-&gt;</font> Bool
+<a name="(line324)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs
+<a name="(line325)"></a>    <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s
+<a name="(line326)"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False
+<a name="(line327)"></a>
 </pre>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/TypeMapping.html b/docs/HaXml/src/Text/XML/HaXml/TypeMapping.html
--- a/docs/HaXml/src/Text/XML/HaXml/TypeMapping.html
+++ b/docs/HaXml/src/Text/XML/HaXml/TypeMapping.html
@@ -92,118 +92,133 @@
 <a name="(line90)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>,</font> HTypeable c<font color=Cyan>)</font> <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Green><u>where</u></font>
 <a name="(line91)"></a>    toHType p      <font color=Red>=</font> Tuple <font color=Red>[</font>toHType a<font color=Cyan>,</font> toHType b<font color=Cyan>,</font> toHType c<font color=Red>]</font>
 <a name="(line92)"></a>                   <font color=Green><u>where</u></font>  <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> p
-<a name="(line93)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>)</font> <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line94)"></a>    toHType m      <font color=Red>=</font> Maybe <font color=Cyan>(</font>toHType x<font color=Cyan>)</font>   <font color=Green><u>where</u></font>   <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> m
-<a name="(line95)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>)</font> <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>Either a b<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line96)"></a>    toHType m      <font color=Red>=</font> Defined <font color=Magenta>"Either"</font> <font color=Red>[</font>hx<font color=Cyan>,</font> hy<font color=Red>]</font>
-<a name="(line97)"></a>                         <font color=Red>[</font> Constr <font color=Magenta>"Left"</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Blue>{-Nothing-}</font>
-<a name="(line98)"></a>                         <font color=Cyan>,</font> Constr <font color=Magenta>"Right"</font> <font color=Red>[</font>hy<font color=Red>]</font> <font color=Red>[</font>hy<font color=Red>]</font> <font color=Blue>{-Nothing-}</font><font color=Red>]</font>
-<a name="(line99)"></a>                   <font color=Green><u>where</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> m
-<a name="(line100)"></a>                         <font color=Cyan>(</font>Right y<font color=Cyan>)</font> <font color=Red>=</font> m
-<a name="(line101)"></a>                         hx <font color=Red>=</font> toHType x
-<a name="(line102)"></a>                         hy <font color=Red>=</font> toHType y
-<a name="(line103)"></a>
-<a name="(line104)"></a><font color=Green><u>instance</u></font> HTypeable a <font color=Red>=&gt;</font> HTypeable <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>where</u></font>
-<a name="(line105)"></a>    toHType xs     <font color=Red>=</font> <font color=Green><u>case</u></font> toHType x <font color=Green><u>of</u></font> <font color=Cyan>(</font>Prim <font color=Magenta>"Char"</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> String
-<a name="(line106)"></a>                                       <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> List <font color=Cyan>(</font>toHType x<font color=Cyan>)</font>
-<a name="(line107)"></a>                   <font color=Green><u>where</u></font>  <font color=Cyan>(</font>x<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xs
-<a name="(line108)"></a>
-<a name="(line109)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line110)"></a>
-<a name="(line111)"></a><a name="toDTD"></a><font color=Blue>-- | 'toDTD' converts a concrete representation of the Haskell type of</font>
-<a name="(line112)"></a><font color=Blue>--   a value (obtained by the method 'toHType') into a real DocTypeDecl.</font>
-<a name="(line113)"></a><font color=Blue>--   It ensures that PERefs are defined before they are used, and that no</font>
-<a name="(line114)"></a><font color=Blue>--   element or attribute-list is declared more than once.</font>
-<a name="(line115)"></a>toDTD <font color=Red>::</font> HType <font color=Red>-&gt;</font> DocTypeDecl
-<a name="(line116)"></a>toDTD ht <font color=Red>=</font>
-<a name="(line117)"></a>  DTD <font color=Cyan>(</font>toplevel ht<font color=Cyan>)</font> Nothing <font color=Cyan>(</font>macrosFirst <font color=Cyan>(</font>reverse <font color=Cyan>(</font>h2d True [] [] <font color=Red>[</font>ht<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line118)"></a>  <font color=Green><u>where</u></font>
-<a name="(line119)"></a>    macrosFirst <font color=Red>::</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font>
-<a name="(line120)"></a>    macrosFirst decls <font color=Red>=</font> concat <font color=Red>[</font>p<font color=Cyan>,</font> p'<font color=Red>]</font> <font color=Green><u>where</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font> p'<font color=Cyan>)</font> <font color=Red>=</font> partition f decls
-<a name="(line121)"></a>                                             f <font color=Cyan>(</font>Entity <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True
-<a name="(line122)"></a>                                             f <font color=Green><u>_</u></font> <font color=Red>=</font> False
-<a name="(line123)"></a>    toplevel ht<font color=Red>@</font><font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> showHType ht <font color=Magenta>"-XML"</font>
-<a name="(line124)"></a>    toplevel ht<font color=Red>@</font><font color=Green><u>_</u></font>               <font color=Red>=</font> showHType ht <font color=Magenta>""</font>
-<a name="(line125)"></a>    c0 <font color=Red>=</font> False
-<a name="(line126)"></a>    h2d <font color=Red>::</font> Bool <font color=Red>-&gt;</font> <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Constr<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font>
-<a name="(line127)"></a>    <font color=Blue>-- toplevel?   history    history   remainingwork     result</font>
-<a name="(line128)"></a>    h2d c history chist []       <font color=Red>=</font> []
-<a name="(line129)"></a>    h2d c history chist <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>hts<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line130)"></a>      <font color=Green><u>if</u></font> ht <font color=Cyan>`elem`</font> history <font color=Green><u>then</u></font> h2d c0 history chist hts
-<a name="(line131)"></a>      <font color=Green><u>else</u></font>
-<a name="(line132)"></a>        <font color=Green><u>case</u></font> ht <font color=Green><u>of</u></font>
-<a name="(line133)"></a>          Maybe ht0  <font color=Red>-&gt;</font> declelem ht<font color=Red><b>:</b></font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist <font color=Cyan>(</font>ht0<font color=Red><b>:</b></font>hts<font color=Cyan>)</font>
-<a name="(line134)"></a>          List ht0   <font color=Red>-&gt;</font> declelem ht<font color=Red><b>:</b></font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist <font color=Cyan>(</font>ht0<font color=Red><b>:</b></font>hts<font color=Cyan>)</font>
-<a name="(line135)"></a>          Tuple hts0 <font color=Red>-&gt;</font> <font color=Cyan>(</font>c <font color=Cyan>?</font> <font color=Cyan>(</font>declelem ht<font color=Red><b>:</b></font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line136)"></a>                                     <font color=Cyan>(</font>h2d c0 history chist <font color=Cyan>(</font>hts0<font color=Cyan>++</font>hts<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line137)"></a>          Prim s t   <font color=Red>-&gt;</font> declprim ht <font color=Cyan>++</font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist hts
-<a name="(line138)"></a>          String     <font color=Red>-&gt;</font> declstring<font color=Red><b>:</b></font>    h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist hts
-<a name="(line139)"></a>          Defined s <font color=Green><u>_</u></font> cs <font color=Red>-&gt;</font>
-<a name="(line140)"></a>               <font color=Green><u>let</u></font> hts0 <font color=Red>=</font> concatMap grab cs <font color=Green><u>in</u></font>
-<a name="(line141)"></a>               <font color=Cyan>(</font>c <font color=Cyan>?</font> <font color=Cyan>(</font>decltopelem ht<font color=Red><b>:</b></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>declmacro ht chist<font color=Cyan>)</font>
-<a name="(line142)"></a>               <font color=Cyan>++</font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> <font color=Cyan>(</font>cs<font color=Cyan>++</font>chist<font color=Cyan>)</font> <font color=Cyan>(</font>hts0<font color=Cyan>++</font>hts<font color=Cyan>)</font>
-<a name="(line143)"></a>    declelem ht <font color=Red>=</font>
-<a name="(line144)"></a>      Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>outerHtExpr ht<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line145)"></a>    decltopelem ht <font color=Red>=</font>    <font color=Blue>-- hack to avoid peref at toplevel</font>
-<a name="(line146)"></a>      Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>innerHtExpr ht None<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line147)"></a>    declmacro ht<font color=Red>@</font><font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> chist <font color=Red>=</font>
-<a name="(line148)"></a>      Entity <font color=Cyan>(</font>EntityPEDecl <font color=Cyan>(</font>PEDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font>
-<a name="(line149)"></a>      concatMap <font color=Cyan>(</font>declConstr chist<font color=Cyan>)</font> cs
-<a name="(line150)"></a>      <font color=Green><u>where</u></font> ev <font color=Red>=</font> EntityValue <font color=Red>[</font>EVString <font color=Cyan>(</font>render <font color=Cyan>(</font>PP<font color=Cyan>.</font>cp <font color=Cyan>(</font>outerHtExpr ht<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line151)"></a>    declConstr chist c<font color=Red>@</font><font color=Cyan>(</font>Constr s fv hts<font color=Cyan>)</font>
-<a name="(line152)"></a>      <font color=Red>|</font> c <font color=Cyan>`notElem`</font> chist <font color=Red>=</font>
-<a name="(line153)"></a>          <font color=Red>[</font>Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>flatConstr c <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>constrHtExpr c<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line154)"></a>      <font color=Red>|</font> otherwise <font color=Red>=</font> [] 
-<a name="(line155)"></a>    declprim <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line156)"></a>      <font color=Red>[</font> Element <font color=Cyan>(</font>ElementDecl t EMPTY<font color=Cyan>)</font>
-<a name="(line157)"></a>      <font color=Cyan>,</font> AttList <font color=Cyan>(</font>AttListDecl t <font color=Red>[</font>AttDef <font color=Magenta>"value"</font> StringType REQUIRED<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line158)"></a>    declstring <font color=Red>=</font>
-<a name="(line159)"></a>      Element <font color=Cyan>(</font>ElementDecl <font color=Magenta>"string"</font> <font color=Cyan>(</font>Mixed PCDATA<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line160)"></a>    grab <font color=Cyan>(</font>Constr <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> hts<font color=Cyan>)</font> <font color=Red>=</font> hts
-<a name="(line161)"></a>
-<a name="(line162)"></a><a name="?"></a><font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>::</font> Bool <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>a<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>a<font color=Cyan>)</font>
-<a name="(line163)"></a><a name="b"></a>b <font color=Cyan>?</font> f <font color=Red>|</font> b     <font color=Red>=</font> f
-<a name="(line164)"></a>      <font color=Red>|</font> not b <font color=Red>=</font> id
-<a name="(line165)"></a>
-<a name="(line166)"></a><a name="showHType"></a><font color=Blue>-- Flatten an HType to a String suitable for an XML tagname.</font>
-<a name="(line167)"></a>showHType <font color=Red>::</font> HType <font color=Red>-&gt;</font> ShowS
-<a name="(line168)"></a>showHType <font color=Cyan>(</font>Maybe ht<font color=Cyan>)</font>  <font color=Red>=</font> showString <font color=Magenta>"maybe-"</font> <font color=Cyan>.</font> showHType ht
-<a name="(line169)"></a>showHType <font color=Cyan>(</font>List ht<font color=Cyan>)</font>   <font color=Red>=</font> showString <font color=Magenta>"list-"</font> <font color=Cyan>.</font> showHType ht
-<a name="(line170)"></a>showHType <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"tuple"</font> <font color=Cyan>.</font> shows <font color=Cyan>(</font>length hts<font color=Cyan>)</font>
-<a name="(line171)"></a>                        <font color=Cyan>.</font> showChar <font color=Magenta>'-'</font>
-<a name="(line172)"></a>                        <font color=Cyan>.</font> foldr1 <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font>
-<a name="(line173)"></a>                                                  <font color=Cyan>(</font>map showHType hts<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line174)"></a>showHType <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font>  <font color=Red>=</font> showString t
-<a name="(line175)"></a>showHType String      <font color=Red>=</font> showString <font color=Magenta>"string"</font>
-<a name="(line176)"></a>showHType <font color=Cyan>(</font>Defined s fv <font color=Green><u>_</u></font><font color=Cyan>)</font>
-<a name="(line177)"></a>                      <font color=Red>=</font> showString s <font color=Cyan>.</font> <font color=Cyan>(</font><font color=Cyan>(</font>length fv <font color=Cyan>&gt;</font> <font color=Magenta>0</font><font color=Cyan>)</font> <font color=Cyan>?</font> <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line178)"></a>                        <font color=Cyan>.</font> foldr <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> id <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font>
-<a name="(line179)"></a>                                                    <font color=Cyan>(</font>map showHType fv<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line93)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>,</font> HTypeable c<font color=Cyan>,</font> HTypeable d<font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="(line94)"></a>         HTypeable <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line95)"></a>    toHType p      <font color=Red>=</font> Tuple <font color=Red>[</font>toHType a<font color=Cyan>,</font> toHType b<font color=Cyan>,</font> toHType c<font color=Cyan>,</font> toHType d<font color=Red>]</font>
+<a name="(line96)"></a>                   <font color=Green><u>where</u></font>  <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>)</font> <font color=Red>=</font> p
+<a name="(line97)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>,</font> HTypeable c<font color=Cyan>,</font> HTypeable d<font color=Cyan>,</font> HTypeable e<font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="(line98)"></a>         HTypeable <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line99)"></a>    toHType p      <font color=Red>=</font> Tuple <font color=Red>[</font> toHType a<font color=Cyan>,</font> toHType b<font color=Cyan>,</font> toHType c<font color=Cyan>,</font> toHType d
+<a name="(line100)"></a>                           <font color=Cyan>,</font> toHType e <font color=Red>]</font>
+<a name="(line101)"></a>                   <font color=Green><u>where</u></font>  <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>)</font> <font color=Red>=</font> p
+<a name="(line102)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font> HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>,</font> HTypeable c<font color=Cyan>,</font> HTypeable d<font color=Cyan>,</font> HTypeable e
+<a name="(line103)"></a>         <font color=Cyan>,</font> HTypeable f<font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="(line104)"></a>         HTypeable <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>,</font>f<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line105)"></a>    toHType p      <font color=Red>=</font> Tuple <font color=Red>[</font> toHType a<font color=Cyan>,</font> toHType b<font color=Cyan>,</font> toHType c<font color=Cyan>,</font> toHType d
+<a name="(line106)"></a>                           <font color=Cyan>,</font> toHType e<font color=Cyan>,</font> toHType f <font color=Red>]</font>
+<a name="(line107)"></a>                   <font color=Green><u>where</u></font>  <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>,</font>f<font color=Cyan>)</font> <font color=Red>=</font> p
+<a name="(line108)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>)</font> <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line109)"></a>    toHType m      <font color=Red>=</font> Maybe <font color=Cyan>(</font>toHType x<font color=Cyan>)</font>   <font color=Green><u>where</u></font>   <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> m
+<a name="(line110)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>)</font> <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>Either a b<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line111)"></a>    toHType m      <font color=Red>=</font> Defined <font color=Magenta>"Either"</font> <font color=Red>[</font>hx<font color=Cyan>,</font> hy<font color=Red>]</font>
+<a name="(line112)"></a>                         <font color=Red>[</font> Constr <font color=Magenta>"Left"</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Blue>{-Nothing-}</font>
+<a name="(line113)"></a>                         <font color=Cyan>,</font> Constr <font color=Magenta>"Right"</font> <font color=Red>[</font>hy<font color=Red>]</font> <font color=Red>[</font>hy<font color=Red>]</font> <font color=Blue>{-Nothing-}</font><font color=Red>]</font>
+<a name="(line114)"></a>                   <font color=Green><u>where</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> m
+<a name="(line115)"></a>                         <font color=Cyan>(</font>Right y<font color=Cyan>)</font> <font color=Red>=</font> m
+<a name="(line116)"></a>                         hx <font color=Red>=</font> toHType x
+<a name="(line117)"></a>                         hy <font color=Red>=</font> toHType y
+<a name="(line118)"></a>
+<a name="(line119)"></a><font color=Green><u>instance</u></font> HTypeable a <font color=Red>=&gt;</font> HTypeable <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>where</u></font>
+<a name="(line120)"></a>    toHType xs     <font color=Red>=</font> <font color=Green><u>case</u></font> toHType x <font color=Green><u>of</u></font> <font color=Cyan>(</font>Prim <font color=Magenta>"Char"</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> String
+<a name="(line121)"></a>                                       <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> List <font color=Cyan>(</font>toHType x<font color=Cyan>)</font>
+<a name="(line122)"></a>                   <font color=Green><u>where</u></font>  <font color=Cyan>(</font>x<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xs
+<a name="(line123)"></a>
+<a name="(line124)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line125)"></a>
+<a name="(line126)"></a><a name="toDTD"></a><font color=Blue>-- | 'toDTD' converts a concrete representation of the Haskell type of</font>
+<a name="(line127)"></a><font color=Blue>--   a value (obtained by the method 'toHType') into a real DocTypeDecl.</font>
+<a name="(line128)"></a><font color=Blue>--   It ensures that PERefs are defined before they are used, and that no</font>
+<a name="(line129)"></a><font color=Blue>--   element or attribute-list is declared more than once.</font>
+<a name="(line130)"></a>toDTD <font color=Red>::</font> HType <font color=Red>-&gt;</font> DocTypeDecl
+<a name="(line131)"></a>toDTD ht <font color=Red>=</font>
+<a name="(line132)"></a>  DTD <font color=Cyan>(</font>toplevel ht<font color=Cyan>)</font> Nothing <font color=Cyan>(</font>macrosFirst <font color=Cyan>(</font>reverse <font color=Cyan>(</font>h2d True [] [] <font color=Red>[</font>ht<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line133)"></a>  <font color=Green><u>where</u></font>
+<a name="(line134)"></a>    macrosFirst <font color=Red>::</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font>
+<a name="(line135)"></a>    macrosFirst decls <font color=Red>=</font> concat <font color=Red>[</font>p<font color=Cyan>,</font> p'<font color=Red>]</font> <font color=Green><u>where</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font> p'<font color=Cyan>)</font> <font color=Red>=</font> partition f decls
+<a name="(line136)"></a>                                             f <font color=Cyan>(</font>Entity <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True
+<a name="(line137)"></a>                                             f <font color=Green><u>_</u></font> <font color=Red>=</font> False
+<a name="(line138)"></a>    toplevel ht<font color=Red>@</font><font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> showHType ht <font color=Magenta>"-XML"</font>
+<a name="(line139)"></a>    toplevel ht<font color=Red>@</font><font color=Green><u>_</u></font>               <font color=Red>=</font> showHType ht <font color=Magenta>""</font>
+<a name="(line140)"></a>    c0 <font color=Red>=</font> False
+<a name="(line141)"></a>    h2d <font color=Red>::</font> Bool <font color=Red>-&gt;</font> <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Constr<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font>
+<a name="(line142)"></a>    <font color=Blue>-- toplevel?   history    history   remainingwork     result</font>
+<a name="(line143)"></a>    h2d c history chist []       <font color=Red>=</font> []
+<a name="(line144)"></a>    h2d c history chist <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>hts<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line145)"></a>      <font color=Green><u>if</u></font> ht <font color=Cyan>`elem`</font> history <font color=Green><u>then</u></font> h2d c0 history chist hts
+<a name="(line146)"></a>      <font color=Green><u>else</u></font>
+<a name="(line147)"></a>        <font color=Green><u>case</u></font> ht <font color=Green><u>of</u></font>
+<a name="(line148)"></a>          Maybe ht0  <font color=Red>-&gt;</font> declelem ht<font color=Red><b>:</b></font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist <font color=Cyan>(</font>ht0<font color=Red><b>:</b></font>hts<font color=Cyan>)</font>
+<a name="(line149)"></a>          List ht0   <font color=Red>-&gt;</font> declelem ht<font color=Red><b>:</b></font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist <font color=Cyan>(</font>ht0<font color=Red><b>:</b></font>hts<font color=Cyan>)</font>
+<a name="(line150)"></a>          Tuple hts0 <font color=Red>-&gt;</font> <font color=Cyan>(</font>c <font color=Cyan>?</font> <font color=Cyan>(</font>declelem ht<font color=Red><b>:</b></font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line151)"></a>                                     <font color=Cyan>(</font>h2d c0 history chist <font color=Cyan>(</font>hts0<font color=Cyan>++</font>hts<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line152)"></a>          Prim s t   <font color=Red>-&gt;</font> declprim ht <font color=Cyan>++</font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist hts
+<a name="(line153)"></a>          String     <font color=Red>-&gt;</font> declstring<font color=Red><b>:</b></font>    h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist hts
+<a name="(line154)"></a>          Defined s <font color=Green><u>_</u></font> cs <font color=Red>-&gt;</font>
+<a name="(line155)"></a>               <font color=Green><u>let</u></font> hts0 <font color=Red>=</font> concatMap grab cs <font color=Green><u>in</u></font>
+<a name="(line156)"></a>               <font color=Cyan>(</font>c <font color=Cyan>?</font> <font color=Cyan>(</font>decltopelem ht<font color=Red><b>:</b></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>declmacro ht chist<font color=Cyan>)</font>
+<a name="(line157)"></a>               <font color=Cyan>++</font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> <font color=Cyan>(</font>cs<font color=Cyan>++</font>chist<font color=Cyan>)</font> <font color=Cyan>(</font>hts0<font color=Cyan>++</font>hts<font color=Cyan>)</font>
+<a name="(line158)"></a>    declelem ht <font color=Red>=</font>
+<a name="(line159)"></a>      Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>outerHtExpr ht<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line160)"></a>    decltopelem ht <font color=Red>=</font>    <font color=Blue>-- hack to avoid peref at toplevel</font>
+<a name="(line161)"></a>      Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>innerHtExpr ht None<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line162)"></a>    declmacro ht<font color=Red>@</font><font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> chist <font color=Red>=</font>
+<a name="(line163)"></a>      Entity <font color=Cyan>(</font>EntityPEDecl <font color=Cyan>(</font>PEDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font>
+<a name="(line164)"></a>      concatMap <font color=Cyan>(</font>declConstr chist<font color=Cyan>)</font> cs
+<a name="(line165)"></a>      <font color=Green><u>where</u></font> ev <font color=Red>=</font> EntityValue <font color=Red>[</font>EVString <font color=Cyan>(</font>render <font color=Cyan>(</font>PP<font color=Cyan>.</font>cp <font color=Cyan>(</font>outerHtExpr ht<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>
+<a name="(line166)"></a>    declConstr chist c<font color=Red>@</font><font color=Cyan>(</font>Constr s fv hts<font color=Cyan>)</font>
+<a name="(line167)"></a>      <font color=Red>|</font> c <font color=Cyan>`notElem`</font> chist <font color=Red>=</font>
+<a name="(line168)"></a>          <font color=Red>[</font>Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>flatConstr c <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>constrHtExpr c<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>
+<a name="(line169)"></a>      <font color=Red>|</font> otherwise <font color=Red>=</font> [] 
+<a name="(line170)"></a>    declprim <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line171)"></a>      <font color=Red>[</font> Element <font color=Cyan>(</font>ElementDecl t EMPTY<font color=Cyan>)</font>
+<a name="(line172)"></a>      <font color=Cyan>,</font> AttList <font color=Cyan>(</font>AttListDecl t <font color=Red>[</font>AttDef <font color=Magenta>"value"</font> StringType REQUIRED<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>
+<a name="(line173)"></a>    declstring <font color=Red>=</font>
+<a name="(line174)"></a>      Element <font color=Cyan>(</font>ElementDecl <font color=Magenta>"string"</font> <font color=Cyan>(</font>Mixed PCDATA<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line175)"></a>    grab <font color=Cyan>(</font>Constr <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> hts<font color=Cyan>)</font> <font color=Red>=</font> hts
+<a name="(line176)"></a>
+<a name="(line177)"></a><a name="?"></a><font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>::</font> Bool <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>a<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>a<font color=Cyan>)</font>
+<a name="(line178)"></a><a name="b"></a>b <font color=Cyan>?</font> f <font color=Red>|</font> b     <font color=Red>=</font> f
+<a name="(line179)"></a>      <font color=Red>|</font> not b <font color=Red>=</font> id
 <a name="(line180)"></a>
-<a name="(line181)"></a><a name="flatConstr"></a>flatConstr <font color=Red>::</font> Constr <font color=Red>-&gt;</font> ShowS
-<a name="(line182)"></a>flatConstr <font color=Cyan>(</font>Constr s fv <font color=Green><u>_</u></font><font color=Cyan>)</font>
-<a name="(line183)"></a>        <font color=Red>=</font> showString s <font color=Cyan>.</font> <font color=Cyan>(</font><font color=Cyan>(</font>length fv <font color=Cyan>&gt;</font> <font color=Magenta>0</font><font color=Cyan>)</font> <font color=Cyan>?</font> <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line184)"></a>          <font color=Cyan>.</font> foldr <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> id <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font> <font color=Cyan>(</font>map showHType fv<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line185)"></a>
-<a name="(line186)"></a><a name="outerHtExpr"></a>outerHtExpr <font color=Red>::</font> HType <font color=Red>-&gt;</font> CP
-<a name="(line187)"></a>outerHtExpr <font color=Cyan>(</font>Maybe ht<font color=Cyan>)</font>      <font color=Red>=</font> innerHtExpr ht Query
-<a name="(line188)"></a>outerHtExpr <font color=Cyan>(</font>List ht<font color=Cyan>)</font>       <font color=Red>=</font> innerHtExpr ht Star
-<a name="(line189)"></a>outerHtExpr <font color=Cyan>(</font>Defined s fv cs<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line190)"></a>    Choice <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font>TagName <font color=Cyan>(</font>flatConstr c <font color=Magenta>""</font><font color=Cyan>)</font> None<font color=Cyan>)</font> cs<font color=Cyan>)</font> None
-<a name="(line191)"></a>outerHtExpr ht              <font color=Red>=</font> innerHtExpr ht None
-<a name="(line192)"></a>
-<a name="(line193)"></a><a name="innerHtExpr"></a>innerHtExpr <font color=Red>::</font> HType <font color=Red>-&gt;</font> Modifier <font color=Red>-&gt;</font> CP
-<a name="(line194)"></a>innerHtExpr <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font>  m <font color=Red>=</font> TagName t m
-<a name="(line195)"></a>innerHtExpr <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> m <font color=Red>=</font> Seq <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font> innerHtExpr c None<font color=Cyan>)</font> hts<font color=Cyan>)</font> m
-<a name="(line196)"></a>innerHtExpr ht<font color=Red>@</font><font color=Cyan>(</font>Defined s hts cs<font color=Cyan>)</font> m <font color=Red>=</font> <font color=Blue>-- CPPE (showHType ht "") (outerHtExpr ht)</font>
-<a name="(line197)"></a>                                      TagName <font color=Cyan>(</font><font color=Magenta>'%'</font><font color=Red><b>:</b></font> showHType ht <font color=Magenta>";"</font><font color=Cyan>)</font> m
-<a name="(line198)"></a>                                                        <font color=Blue>--  ***HACK!!!***</font>
-<a name="(line199)"></a>innerHtExpr ht m <font color=Red>=</font> TagName <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> m
+<a name="(line181)"></a><a name="showHType"></a><font color=Blue>-- Flatten an HType to a String suitable for an XML tagname.</font>
+<a name="(line182)"></a>showHType <font color=Red>::</font> HType <font color=Red>-&gt;</font> ShowS
+<a name="(line183)"></a>showHType <font color=Cyan>(</font>Maybe ht<font color=Cyan>)</font>  <font color=Red>=</font> showString <font color=Magenta>"maybe-"</font> <font color=Cyan>.</font> showHType ht
+<a name="(line184)"></a>showHType <font color=Cyan>(</font>List ht<font color=Cyan>)</font>   <font color=Red>=</font> showString <font color=Magenta>"list-"</font> <font color=Cyan>.</font> showHType ht
+<a name="(line185)"></a>showHType <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"tuple"</font> <font color=Cyan>.</font> shows <font color=Cyan>(</font>length hts<font color=Cyan>)</font>
+<a name="(line186)"></a>                        <font color=Cyan>.</font> showChar <font color=Magenta>'-'</font>
+<a name="(line187)"></a>                        <font color=Cyan>.</font> foldr1 <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font>
+<a name="(line188)"></a>                                                  <font color=Cyan>(</font>map showHType hts<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line189)"></a>showHType <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font>  <font color=Red>=</font> showString t
+<a name="(line190)"></a>showHType String      <font color=Red>=</font> showString <font color=Magenta>"string"</font>
+<a name="(line191)"></a>showHType <font color=Cyan>(</font>Defined s fv <font color=Green><u>_</u></font><font color=Cyan>)</font>
+<a name="(line192)"></a>                      <font color=Red>=</font> showString s <font color=Cyan>.</font> <font color=Cyan>(</font><font color=Cyan>(</font>length fv <font color=Cyan>&gt;</font> <font color=Magenta>0</font><font color=Cyan>)</font> <font color=Cyan>?</font> <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line193)"></a>                        <font color=Cyan>.</font> foldr <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> id <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font>
+<a name="(line194)"></a>                                                    <font color=Cyan>(</font>map showHType fv<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line195)"></a>
+<a name="(line196)"></a><a name="flatConstr"></a>flatConstr <font color=Red>::</font> Constr <font color=Red>-&gt;</font> ShowS
+<a name="(line197)"></a>flatConstr <font color=Cyan>(</font>Constr s fv <font color=Green><u>_</u></font><font color=Cyan>)</font>
+<a name="(line198)"></a>        <font color=Red>=</font> showString s <font color=Cyan>.</font> <font color=Cyan>(</font><font color=Cyan>(</font>length fv <font color=Cyan>&gt;</font> <font color=Magenta>0</font><font color=Cyan>)</font> <font color=Cyan>?</font> <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line199)"></a>          <font color=Cyan>.</font> foldr <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> id <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font> <font color=Cyan>(</font>map showHType fv<font color=Cyan>)</font><font color=Cyan>)</font>
 <a name="(line200)"></a>
-<a name="(line201)"></a><a name="constrHtExpr"></a>constrHtExpr <font color=Red>::</font> Constr <font color=Red>-&gt;</font> CP
-<a name="(line202)"></a>constrHtExpr <font color=Cyan>(</font>Constr s fv []<font color=Cyan>)</font>  <font color=Red>=</font> TagName <font color=Magenta>"EMPTY"</font> None   <font color=Blue>--  ***HACK!!!***</font>
-<a name="(line203)"></a>constrHtExpr <font color=Cyan>(</font>Constr s fv hts<font color=Cyan>)</font> <font color=Red>=</font> innerHtExpr <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> None
-<a name="(line204)"></a>
-<a name="(line205)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line201)"></a><a name="outerHtExpr"></a>outerHtExpr <font color=Red>::</font> HType <font color=Red>-&gt;</font> CP
+<a name="(line202)"></a>outerHtExpr <font color=Cyan>(</font>Maybe ht<font color=Cyan>)</font>      <font color=Red>=</font> innerHtExpr ht Query
+<a name="(line203)"></a>outerHtExpr <font color=Cyan>(</font>List ht<font color=Cyan>)</font>       <font color=Red>=</font> innerHtExpr ht Star
+<a name="(line204)"></a>outerHtExpr <font color=Cyan>(</font>Defined s fv cs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line205)"></a>    Choice <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font>TagName <font color=Cyan>(</font>flatConstr c <font color=Magenta>""</font><font color=Cyan>)</font> None<font color=Cyan>)</font> cs<font color=Cyan>)</font> None
+<a name="(line206)"></a>outerHtExpr ht              <font color=Red>=</font> innerHtExpr ht None
+<a name="(line207)"></a>
+<a name="(line208)"></a><a name="innerHtExpr"></a>innerHtExpr <font color=Red>::</font> HType <font color=Red>-&gt;</font> Modifier <font color=Red>-&gt;</font> CP
+<a name="(line209)"></a>innerHtExpr <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font>  m <font color=Red>=</font> TagName t m
+<a name="(line210)"></a>innerHtExpr <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> m <font color=Red>=</font> Seq <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font> innerHtExpr c None<font color=Cyan>)</font> hts<font color=Cyan>)</font> m
+<a name="(line211)"></a>innerHtExpr ht<font color=Red>@</font><font color=Cyan>(</font>Defined s hts cs<font color=Cyan>)</font> m <font color=Red>=</font> <font color=Blue>-- CPPE (showHType ht "") (outerHtExpr ht)</font>
+<a name="(line212)"></a>                                      TagName <font color=Cyan>(</font><font color=Magenta>'%'</font><font color=Red><b>:</b></font> showHType ht <font color=Magenta>";"</font><font color=Cyan>)</font> m
+<a name="(line213)"></a>                                                        <font color=Blue>--  ***HACK!!!***</font>
+<a name="(line214)"></a>innerHtExpr ht m <font color=Red>=</font> TagName <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> m
+<a name="(line215)"></a>
+<a name="(line216)"></a><a name="constrHtExpr"></a>constrHtExpr <font color=Red>::</font> Constr <font color=Red>-&gt;</font> CP
+<a name="(line217)"></a>constrHtExpr <font color=Cyan>(</font>Constr s fv []<font color=Cyan>)</font>  <font color=Red>=</font> TagName <font color=Magenta>"EMPTY"</font> None   <font color=Blue>--  ***HACK!!!***</font>
+<a name="(line218)"></a>constrHtExpr <font color=Cyan>(</font>Constr s fv hts<font color=Cyan>)</font> <font color=Red>=</font> innerHtExpr <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> None
+<a name="(line219)"></a>
+<a name="(line220)"></a><font color=Blue>------------------------------------------------------------------------</font>
 </pre>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Types.html b/docs/HaXml/src/Text/XML/HaXml/Types.html
--- a/docs/HaXml/src/Text/XML/HaXml/Types.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Types.html
@@ -137,15 +137,15 @@
 <a name="(line135)"></a><a name="XMLDecl"></a><font color=Green><u>data</u></font> XMLDecl    <font color=Red>=</font> XMLDecl VersionInfo <font color=Cyan>(</font>Maybe EncodingDecl<font color=Cyan>)</font> <font color=Cyan>(</font>Maybe SDDecl<font color=Cyan>)</font>
 <a name="(line136)"></a>                  <font color=Green><u>deriving</u></font> Eq
 <a name="(line137)"></a><a name="Misc"></a><font color=Green><u>data</u></font> Misc       <font color=Red>=</font> Comment Comment
-<a name="(line138)"></a>                <font color=Red>|</font> PI ProcessingInstruction 
+<a name="(line138)"></a>                <font color=Red>|</font> PI ProcessingInstruction
 <a name="(line139)"></a>                <font color=Green><u>deriving</u></font> Eq
-<a name="(line140)"></a>              
+<a name="(line140)"></a>
 <a name="(line141)"></a><a name="ProcessingInstruction"></a><font color=Green><u>type</u></font> ProcessingInstruction <font color=Red>=</font> <font color=Cyan>(</font>PITarget<font color=Cyan>,</font>String<font color=Cyan>)</font>
 <a name="(line142)"></a>
-<a name="(line143)"></a><a name="SDDecl"></a><font color=Green><u>type</u></font> SDDecl      <font color=Red>=</font> Bool 
-<a name="(line144)"></a><a name="VersionInfo"></a><font color=Green><u>type</u></font> VersionInfo <font color=Red>=</font> String 
-<a name="(line145)"></a><a name="Comment"></a><font color=Green><u>type</u></font> Comment     <font color=Red>=</font> String 
-<a name="(line146)"></a><a name="PITarget"></a><font color=Green><u>type</u></font> PITarget    <font color=Red>=</font> String 
+<a name="(line143)"></a><a name="SDDecl"></a><font color=Green><u>type</u></font> SDDecl      <font color=Red>=</font> Bool
+<a name="(line144)"></a><a name="VersionInfo"></a><font color=Green><u>type</u></font> VersionInfo <font color=Red>=</font> String
+<a name="(line145)"></a><a name="Comment"></a><font color=Green><u>type</u></font> Comment     <font color=Red>=</font> String
+<a name="(line146)"></a><a name="PITarget"></a><font color=Green><u>type</u></font> PITarget    <font color=Red>=</font> String
 <a name="(line147)"></a>
 <a name="(line148)"></a><a name="DocTypeDecl"></a><font color=Green><u>data</u></font> DocTypeDecl <font color=Red>=</font> DTD Name <font color=Cyan>(</font>Maybe ExternalID<font color=Cyan>)</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font>  <font color=Green><u>deriving</u></font> Eq
 <a name="(line149)"></a><a name="MarkupDecl"></a><font color=Green><u>data</u></font> MarkupDecl  <font color=Red>=</font> Element  ElementDecl
@@ -161,134 +161,136 @@
 <a name="(line159)"></a>                   <font color=Green><u>deriving</u></font> Eq
 <a name="(line160)"></a>
 <a name="(line161)"></a><a name="Element"></a><font color=Green><u>data</u></font> Element i <font color=Red>=</font> Elem Name <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq
-<a name="(line162)"></a>                                       	<font color=Blue>--  intermediate for parsing</font>
+<a name="(line162)"></a>                                        <font color=Blue>--  intermediate for parsing</font>
 <a name="(line163)"></a><a name="ElemTag"></a><font color=Green><u>data</u></font> ElemTag   <font color=Red>=</font> ElemTag Name <font color=Red>[</font>Attribute<font color=Red>]</font>
 <a name="(line164)"></a><a name="Attribute"></a><font color=Green><u>type</u></font> Attribute <font color=Red>=</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font> AttValue<font color=Cyan>)</font>
 <a name="(line165)"></a><a name="Content"></a><font color=Green><u>data</u></font> Content i <font color=Red>=</font> CElem <font color=Cyan>(</font>Element i<font color=Cyan>)</font> i
 <a name="(line166)"></a>               <font color=Red>|</font> CString Bool CharData i
-<a name="(line167)"></a>			<font color=Blue>-- ^ bool is whether whitespace is significant</font>
+<a name="(line167)"></a>                        <font color=Blue>-- ^ bool is whether whitespace is significant</font>
 <a name="(line168)"></a>               <font color=Red>|</font> CRef Reference i
 <a name="(line169)"></a>               <font color=Red>|</font> CMisc Misc i
 <a name="(line170)"></a>               <font color=Green><u>deriving</u></font> Eq
-<a name="(line171)"></a><a name="info"></a>info <font color=Cyan>(</font>CElem <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i
-<a name="(line172)"></a>info <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i
-<a name="(line173)"></a>info <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i
-<a name="(line174)"></a>info <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i
-<a name="(line175)"></a>
-<a name="(line176)"></a><font color=Green><u>instance</u></font> Functor Document <font color=Green><u>where</u></font>
-<a name="(line177)"></a>  fmap f <font color=Cyan>(</font>Document p st e ms<font color=Cyan>)</font> <font color=Red>=</font> Document p st <font color=Cyan>(</font>fmap f e<font color=Cyan>)</font> ms
-<a name="(line178)"></a><font color=Green><u>instance</u></font> Functor Element <font color=Green><u>where</u></font>
-<a name="(line179)"></a>  fmap f <font color=Cyan>(</font>Elem t <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font> Elem t <font color=Green><u>as</u></font> <font color=Cyan>(</font>map <font color=Cyan>(</font>fmap f<font color=Cyan>)</font> cs<font color=Cyan>)</font>
-<a name="(line180)"></a><font color=Green><u>instance</u></font> Functor Content <font color=Green><u>where</u></font>
-<a name="(line181)"></a>  fmap f <font color=Cyan>(</font>CElem e i<font color=Cyan>)</font>     <font color=Red>=</font> CElem <font color=Cyan>(</font>fmap f e<font color=Cyan>)</font> <font color=Cyan>(</font>f i<font color=Cyan>)</font>
-<a name="(line182)"></a>  fmap f <font color=Cyan>(</font>CString b s i<font color=Cyan>)</font> <font color=Red>=</font> CString b s <font color=Cyan>(</font>f i<font color=Cyan>)</font>
-<a name="(line183)"></a>  fmap f <font color=Cyan>(</font>CRef r i<font color=Cyan>)</font>      <font color=Red>=</font> CRef r <font color=Cyan>(</font>f i<font color=Cyan>)</font>
-<a name="(line184)"></a>  fmap f <font color=Cyan>(</font>CMisc m i<font color=Cyan>)</font>     <font color=Red>=</font> CMisc m <font color=Cyan>(</font>f i<font color=Cyan>)</font>
-<a name="(line185)"></a>
-<a name="(line186)"></a><a name="ElementDecl"></a><font color=Green><u>data</u></font> ElementDecl <font color=Red>=</font> ElementDecl Name ContentSpec <font color=Green><u>deriving</u></font> Eq
-<a name="(line187)"></a><a name="ContentSpec"></a><font color=Green><u>data</u></font> ContentSpec <font color=Red>=</font> EMPTY
-<a name="(line188)"></a>                 <font color=Red>|</font> ANY
-<a name="(line189)"></a>                 <font color=Red>|</font> Mixed Mixed
-<a name="(line190)"></a>                 <font color=Red>|</font> ContentSpec CP
-<a name="(line191)"></a>                 <font color=Green><u>deriving</u></font> Eq
-<a name="(line192)"></a><a name="CP"></a><font color=Blue>-- FIXME: What is TagName here? Seems to be in disagreement with XML spec.</font>
-<a name="(line193)"></a><a name="CP"></a><font color=Green><u>data</u></font> CP <font color=Red>=</font> TagName Name Modifier
-<a name="(line194)"></a>        <font color=Red>|</font> Choice <font color=Red>[</font>CP<font color=Red>]</font> Modifier
-<a name="(line195)"></a>        <font color=Red>|</font> Seq <font color=Red>[</font>CP<font color=Red>]</font> Modifier 
-<a name="(line196)"></a>        <font color=Green><u>deriving</u></font> Eq
-<a name="(line197)"></a><a name="Modifier"></a><font color=Green><u>data</u></font> Modifier <font color=Red>=</font> None  <font color=Blue>-- ^ Just One</font>
-<a name="(line198)"></a>              <font color=Red>|</font> Query <font color=Blue>-- ^ Zero Or One</font>
-<a name="(line199)"></a>              <font color=Red>|</font> Star  <font color=Blue>-- ^ Zero Or More</font>
-<a name="(line200)"></a>              <font color=Red>|</font> Plus  <font color=Blue>-- ^ One Or More </font>
-<a name="(line201)"></a>              <font color=Green><u>deriving</u></font> Eq
-<a name="(line202)"></a><a name="Mixed"></a><font color=Green><u>data</u></font> Mixed <font color=Red>=</font> PCDATA
-<a name="(line203)"></a>           <font color=Red>|</font> PCDATAplus <font color=Red>[</font>Name<font color=Red>]</font> 
-<a name="(line204)"></a>           <font color=Green><u>deriving</u></font> Eq
-<a name="(line205)"></a><a name="AttListDecl"></a><font color=Green><u>data</u></font> AttListDecl <font color=Red>=</font> AttListDecl Name <font color=Red>[</font>AttDef<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq
-<a name="(line206)"></a><a name="AttDef"></a><font color=Green><u>data</u></font> AttDef      <font color=Red>=</font> AttDef Name AttType DefaultDecl <font color=Green><u>deriving</u></font> Eq
-<a name="(line207)"></a><a name="AttType"></a><font color=Green><u>data</u></font> AttType     <font color=Red>=</font> StringType
-<a name="(line208)"></a>                 <font color=Red>|</font> TokenizedType TokenizedType
-<a name="(line209)"></a>                 <font color=Red>|</font> EnumeratedType EnumeratedType 
-<a name="(line210)"></a>                 <font color=Green><u>deriving</u></font> Eq
-<a name="(line211)"></a><a name="TokenizedType"></a><font color=Green><u>data</u></font> TokenizedType <font color=Red>=</font> ID
-<a name="(line212)"></a>                   <font color=Red>|</font> IDREF
-<a name="(line213)"></a>                   <font color=Red>|</font> IDREFS
-<a name="(line214)"></a>                   <font color=Red>|</font> ENTITY
-<a name="(line215)"></a>                   <font color=Red>|</font> ENTITIES
-<a name="(line216)"></a>                   <font color=Red>|</font> NMTOKEN
-<a name="(line217)"></a>                   <font color=Red>|</font> NMTOKENS 
-<a name="(line218)"></a>                   <font color=Green><u>deriving</u></font> Eq
-<a name="(line219)"></a><a name="EnumeratedType"></a><font color=Green><u>data</u></font> EnumeratedType <font color=Red>=</font> NotationType NotationType
-<a name="(line220)"></a>                    <font color=Red>|</font> Enumeration Enumeration 
-<a name="(line221)"></a>                    <font color=Green><u>deriving</u></font> Eq
-<a name="(line222)"></a><a name="NotationType"></a><font color=Green><u>type</u></font> NotationType   <font color=Red>=</font> <font color=Red>[</font>Name<font color=Red>]</font>	<font color=Blue>-- nonempty list</font>
-<a name="(line223)"></a><a name="Enumeration"></a><font color=Green><u>type</u></font> Enumeration    <font color=Red>=</font> <font color=Red>[</font>NmToken<font color=Red>]</font>	<font color=Blue>-- nonempty list</font>
-<a name="(line224)"></a><a name="DefaultDecl"></a><font color=Green><u>data</u></font> DefaultDecl    <font color=Red>=</font> REQUIRED
-<a name="(line225)"></a>                    <font color=Red>|</font> IMPLIED
-<a name="(line226)"></a>                    <font color=Red>|</font> DefaultTo AttValue <font color=Cyan>(</font>Maybe FIXED<font color=Cyan>)</font> 
-<a name="(line227)"></a>                    <font color=Green><u>deriving</u></font> Eq
-<a name="(line228)"></a><a name="FIXED"></a><font color=Green><u>data</u></font> FIXED          <font color=Red>=</font> FIXED <font color=Green><u>deriving</u></font> Eq
-<a name="(line229)"></a>
-<a name="(line230)"></a><a name="ConditionalSect"></a><font color=Green><u>data</u></font> ConditionalSect <font color=Red>=</font> IncludeSect IncludeSect
-<a name="(line231)"></a>                     <font color=Red>|</font> IgnoreSect IgnoreSect 
-<a name="(line232)"></a>                     <font color=Green><u>deriving</u></font> Eq
-<a name="(line233)"></a><a name="IncludeSect"></a><font color=Green><u>type</u></font> IncludeSect <font color=Red>=</font> <font color=Red>[</font>ExtSubsetDecl<font color=Red>]</font>
-<a name="(line234)"></a><a name="IgnoreSect"></a><font color=Green><u>type</u></font> IgnoreSect  <font color=Red>=</font> <font color=Red>[</font>IgnoreSectContents<font color=Red>]</font>
-<a name="(line235)"></a><a name="Ignore"></a><font color=Green><u>data</u></font> Ignore      <font color=Red>=</font> Ignore <font color=Green><u>deriving</u></font> Eq
-<a name="(line236)"></a><a name="IgnoreSectContents"></a><font color=Green><u>data</u></font> IgnoreSectContents <font color=Red>=</font> IgnoreSectContents Ignore <font color=Red>[</font><font color=Cyan>(</font>IgnoreSectContents<font color=Cyan>,</font>Ignore<font color=Cyan>)</font><font color=Red>]</font>  <font color=Green><u>deriving</u></font> Eq
-<a name="(line237)"></a>
-<a name="(line238)"></a><a name="Reference"></a><font color=Green><u>data</u></font> Reference    <font color=Red>=</font> RefEntity EntityRef
-<a name="(line239)"></a>                  <font color=Red>|</font> RefChar CharRef 
-<a name="(line240)"></a>                  <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line241)"></a><a name="EntityRef"></a><font color=Green><u>type</u></font> EntityRef    <font color=Red>=</font> Name 
-<a name="(line242)"></a><a name="CharRef"></a><font color=Green><u>type</u></font> CharRef      <font color=Red>=</font> Int
-<a name="(line243)"></a><a name="PEReference"></a><font color=Green><u>type</u></font> PEReference  <font color=Red>=</font> Name 
-<a name="(line244)"></a>
-<a name="(line245)"></a><a name="EntityDecl"></a><font color=Green><u>data</u></font> EntityDecl   <font color=Red>=</font> EntityGEDecl GEDecl
-<a name="(line246)"></a>                  <font color=Red>|</font> EntityPEDecl PEDecl 
-<a name="(line247)"></a>                  <font color=Green><u>deriving</u></font> Eq
-<a name="(line248)"></a><a name="GEDecl"></a><font color=Green><u>data</u></font> GEDecl       <font color=Red>=</font> GEDecl Name EntityDef <font color=Green><u>deriving</u></font> Eq
-<a name="(line249)"></a><a name="PEDecl"></a><font color=Green><u>data</u></font> PEDecl       <font color=Red>=</font> PEDecl Name PEDef <font color=Green><u>deriving</u></font> Eq
-<a name="(line250)"></a><a name="EntityDef"></a><font color=Green><u>data</u></font> EntityDef    <font color=Red>=</font> DefEntityValue EntityValue 
-<a name="(line251)"></a>                  <font color=Red>|</font> DefExternalID ExternalID <font color=Cyan>(</font>Maybe NDataDecl<font color=Cyan>)</font> 
-<a name="(line252)"></a>                  <font color=Green><u>deriving</u></font> Eq
-<a name="(line253)"></a><a name="PEDef"></a><font color=Green><u>data</u></font> PEDef        <font color=Red>=</font> PEDefEntityValue EntityValue
-<a name="(line254)"></a>                  <font color=Red>|</font> PEDefExternalID ExternalID <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line255)"></a><a name="ExternalID"></a><font color=Green><u>data</u></font> ExternalID   <font color=Red>=</font> SYSTEM SystemLiteral
-<a name="(line256)"></a>                  <font color=Red>|</font> PUBLIC PubidLiteral SystemLiteral <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line257)"></a><a name="NDataDecl"></a><font color=Green><u>newtype</u></font> NDataDecl <font color=Red>=</font> NDATA Name  <font color=Green><u>deriving</u></font> Eq
-<a name="(line258)"></a>
-<a name="(line259)"></a><a name="TextDecl"></a><font color=Green><u>data</u></font> TextDecl       <font color=Red>=</font> TextDecl <font color=Cyan>(</font>Maybe VersionInfo<font color=Cyan>)</font> EncodingDecl  <font color=Green><u>deriving</u></font> Eq
-<a name="(line260)"></a><a name="ExtParsedEnt"></a><font color=Green><u>data</u></font> ExtParsedEnt i <font color=Red>=</font> ExtParsedEnt <font color=Cyan>(</font>Maybe TextDecl<font color=Cyan>)</font> <font color=Cyan>(</font>Content i<font color=Cyan>)</font> <font color=Green><u>deriving</u></font> Eq
-<a name="(line261)"></a><a name="ExtPE"></a><font color=Green><u>data</u></font> ExtPE          <font color=Red>=</font> ExtPE <font color=Cyan>(</font>Maybe TextDecl<font color=Cyan>)</font> <font color=Red>[</font>ExtSubsetDecl<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq
-<a name="(line262)"></a>
-<a name="(line263)"></a><a name="NotationDecl"></a><font color=Green><u>data</u></font> NotationDecl    <font color=Red>=</font> NOTATION Name <font color=Cyan>(</font>Either ExternalID PublicID<font color=Cyan>)</font> <font color=Green><u>deriving</u></font> Eq
-<a name="(line264)"></a><a name="PublicID"></a><font color=Green><u>newtype</u></font> PublicID     <font color=Red>=</font> PUBLICID PubidLiteral <font color=Green><u>deriving</u></font> Eq
-<a name="(line265)"></a><a name="EncodingDecl"></a><font color=Green><u>newtype</u></font> EncodingDecl <font color=Red>=</font> EncodingDecl String <font color=Green><u>deriving</u></font> Eq
-<a name="(line266)"></a>
-<a name="(line267)"></a><a name="Name"></a><font color=Green><u>type</u></font> Name     <font color=Red>=</font> String		 <font color=Blue>-- non-empty string</font>
-<a name="(line268)"></a><a name="Names"></a><font color=Green><u>type</u></font> Names    <font color=Red>=</font> <font color=Red>[</font>Name<font color=Red>]</font>		 <font color=Blue>-- non-empty list</font>
-<a name="(line269)"></a><a name="NmToken"></a><font color=Green><u>type</u></font> NmToken  <font color=Red>=</font> String		 <font color=Blue>-- non-empty string</font>
-<a name="(line270)"></a><a name="NmTokens"></a><font color=Green><u>type</u></font> NmTokens <font color=Red>=</font> <font color=Red>[</font>NmToken<font color=Red>]</font>	 <font color=Blue>-- non-empty list</font>
-<a name="(line271)"></a>
-<a name="(line272)"></a><a name="AttValue"></a><font color=Green><u>data</u></font> AttValue    <font color=Red>=</font> AttValue <font color=Red>[</font>Either String Reference<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq
-<a name="(line273)"></a><font color=Green><u>instance</u></font> Show AttValue <font color=Green><u>where</u></font>
-<a name="(line274)"></a>  show <font color=Cyan>(</font>AttValue v<font color=Cyan>)</font> <font color=Red>=</font> concatMap decode v
-<a name="(line275)"></a>    <font color=Green><u>where</u></font>
-<a name="(line276)"></a>      decode <font color=Cyan>(</font>Left  v<font color=Cyan>)</font>               <font color=Red>=</font> v
-<a name="(line277)"></a>      decode <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity ent<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&amp;"</font><font color=Cyan>++</font>ent<font color=Cyan>++</font><font color=Magenta>";"</font>
-<a name="(line278)"></a>      decode <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefChar cref<font color=Cyan>)</font><font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"&amp;"</font><font color=Cyan>++</font>show cref<font color=Cyan>++</font><font color=Magenta>";"</font>
-<a name="(line279)"></a>
-<a name="(line280)"></a><a name="EntityValue"></a><font color=Green><u>data</u></font> EntityValue <font color=Red>=</font> EntityValue <font color=Red>[</font>EV<font color=Red>]</font> <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line281)"></a><a name="EV"></a><font color=Green><u>data</u></font> EV <font color=Red>=</font> EVString String
-<a name="(line282)"></a> <font color=Blue>--  -- | EVPERef PEReference</font>
-<a name="(line283)"></a>        <font color=Red>|</font> EVRef Reference  <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line284)"></a><a name="PubidLiteral"></a><font color=Green><u>newtype</u></font> PubidLiteral  <font color=Red>=</font> PubidLiteral String <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line285)"></a><a name="SystemLiteral"></a><font color=Green><u>newtype</u></font> SystemLiteral <font color=Red>=</font> SystemLiteral String <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line286)"></a><a name="CharData"></a><font color=Green><u>type</u></font> CharData         <font color=Red>=</font> String 
-<a name="(line287)"></a><a name="CDSect"></a><font color=Green><u>type</u></font> CDSect           <font color=Red>=</font> CharData
-<a name="(line288)"></a>
-<a name="(line289)"></a><font color=Green><u>instance</u></font> Eq ElemTag <font color=Green><u>where</u></font>
-<a name="(line290)"></a>    <font color=Cyan>(</font>ElemTag n <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>==</font> <font color=Cyan>(</font>ElemTag m <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> n<font color=Cyan>==</font>m
+<a name="(line171)"></a>
+<a name="(line172)"></a><a name="info"></a>info <font color=Red>::</font> Content t <font color=Red>-&gt;</font> t
+<a name="(line173)"></a>info <font color=Cyan>(</font>CElem <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i
+<a name="(line174)"></a>info <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i
+<a name="(line175)"></a>info <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i
+<a name="(line176)"></a>info <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i
+<a name="(line177)"></a>
+<a name="(line178)"></a><font color=Green><u>instance</u></font> Functor Document <font color=Green><u>where</u></font>
+<a name="(line179)"></a>  fmap f <font color=Cyan>(</font>Document p st e ms<font color=Cyan>)</font> <font color=Red>=</font> Document p st <font color=Cyan>(</font>fmap f e<font color=Cyan>)</font> ms
+<a name="(line180)"></a><font color=Green><u>instance</u></font> Functor Element <font color=Green><u>where</u></font>
+<a name="(line181)"></a>  fmap f <font color=Cyan>(</font>Elem t <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font> Elem t <font color=Green><u>as</u></font> <font color=Cyan>(</font>map <font color=Cyan>(</font>fmap f<font color=Cyan>)</font> cs<font color=Cyan>)</font>
+<a name="(line182)"></a><font color=Green><u>instance</u></font> Functor Content <font color=Green><u>where</u></font>
+<a name="(line183)"></a>  fmap f <font color=Cyan>(</font>CElem e i<font color=Cyan>)</font>     <font color=Red>=</font> CElem <font color=Cyan>(</font>fmap f e<font color=Cyan>)</font> <font color=Cyan>(</font>f i<font color=Cyan>)</font>
+<a name="(line184)"></a>  fmap f <font color=Cyan>(</font>CString b s i<font color=Cyan>)</font> <font color=Red>=</font> CString b s <font color=Cyan>(</font>f i<font color=Cyan>)</font>
+<a name="(line185)"></a>  fmap f <font color=Cyan>(</font>CRef r i<font color=Cyan>)</font>      <font color=Red>=</font> CRef r <font color=Cyan>(</font>f i<font color=Cyan>)</font>
+<a name="(line186)"></a>  fmap f <font color=Cyan>(</font>CMisc m i<font color=Cyan>)</font>     <font color=Red>=</font> CMisc m <font color=Cyan>(</font>f i<font color=Cyan>)</font>
+<a name="(line187)"></a>
+<a name="(line188)"></a><a name="ElementDecl"></a><font color=Green><u>data</u></font> ElementDecl <font color=Red>=</font> ElementDecl Name ContentSpec <font color=Green><u>deriving</u></font> Eq
+<a name="(line189)"></a><a name="ContentSpec"></a><font color=Green><u>data</u></font> ContentSpec <font color=Red>=</font> EMPTY
+<a name="(line190)"></a>                 <font color=Red>|</font> ANY
+<a name="(line191)"></a>                 <font color=Red>|</font> Mixed Mixed
+<a name="(line192)"></a>                 <font color=Red>|</font> ContentSpec CP
+<a name="(line193)"></a>                 <font color=Green><u>deriving</u></font> Eq
+<a name="(line194)"></a><a name="CP"></a><font color=Blue>-- FIXME: What is TagName here? Seems to be in disagreement with XML spec.</font>
+<a name="(line195)"></a><a name="CP"></a><font color=Green><u>data</u></font> CP <font color=Red>=</font> TagName Name Modifier
+<a name="(line196)"></a>        <font color=Red>|</font> Choice <font color=Red>[</font>CP<font color=Red>]</font> Modifier
+<a name="(line197)"></a>        <font color=Red>|</font> Seq <font color=Red>[</font>CP<font color=Red>]</font> Modifier
+<a name="(line198)"></a>        <font color=Green><u>deriving</u></font> Eq
+<a name="(line199)"></a><a name="Modifier"></a><font color=Green><u>data</u></font> Modifier <font color=Red>=</font> None  <font color=Blue>-- ^ Just One</font>
+<a name="(line200)"></a>              <font color=Red>|</font> Query <font color=Blue>-- ^ Zero Or One</font>
+<a name="(line201)"></a>              <font color=Red>|</font> Star  <font color=Blue>-- ^ Zero Or More</font>
+<a name="(line202)"></a>              <font color=Red>|</font> Plus  <font color=Blue>-- ^ One Or More</font>
+<a name="(line203)"></a>              <font color=Green><u>deriving</u></font> Eq
+<a name="(line204)"></a><a name="Mixed"></a><font color=Green><u>data</u></font> Mixed <font color=Red>=</font> PCDATA
+<a name="(line205)"></a>           <font color=Red>|</font> PCDATAplus <font color=Red>[</font>Name<font color=Red>]</font>
+<a name="(line206)"></a>           <font color=Green><u>deriving</u></font> Eq
+<a name="(line207)"></a><a name="AttListDecl"></a><font color=Green><u>data</u></font> AttListDecl <font color=Red>=</font> AttListDecl Name <font color=Red>[</font>AttDef<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq
+<a name="(line208)"></a><a name="AttDef"></a><font color=Green><u>data</u></font> AttDef      <font color=Red>=</font> AttDef Name AttType DefaultDecl <font color=Green><u>deriving</u></font> Eq
+<a name="(line209)"></a><a name="AttType"></a><font color=Green><u>data</u></font> AttType     <font color=Red>=</font> StringType
+<a name="(line210)"></a>                 <font color=Red>|</font> TokenizedType TokenizedType
+<a name="(line211)"></a>                 <font color=Red>|</font> EnumeratedType EnumeratedType
+<a name="(line212)"></a>                 <font color=Green><u>deriving</u></font> Eq
+<a name="(line213)"></a><a name="TokenizedType"></a><font color=Green><u>data</u></font> TokenizedType <font color=Red>=</font> ID
+<a name="(line214)"></a>                   <font color=Red>|</font> IDREF
+<a name="(line215)"></a>                   <font color=Red>|</font> IDREFS
+<a name="(line216)"></a>                   <font color=Red>|</font> ENTITY
+<a name="(line217)"></a>                   <font color=Red>|</font> ENTITIES
+<a name="(line218)"></a>                   <font color=Red>|</font> NMTOKEN
+<a name="(line219)"></a>                   <font color=Red>|</font> NMTOKENS
+<a name="(line220)"></a>                   <font color=Green><u>deriving</u></font> Eq
+<a name="(line221)"></a><a name="EnumeratedType"></a><font color=Green><u>data</u></font> EnumeratedType <font color=Red>=</font> NotationType NotationType
+<a name="(line222)"></a>                    <font color=Red>|</font> Enumeration Enumeration
+<a name="(line223)"></a>                    <font color=Green><u>deriving</u></font> Eq
+<a name="(line224)"></a><a name="NotationType"></a><font color=Green><u>type</u></font> NotationType   <font color=Red>=</font> <font color=Red>[</font>Name<font color=Red>]</font>    <font color=Blue>-- nonempty list</font>
+<a name="(line225)"></a><a name="Enumeration"></a><font color=Green><u>type</u></font> Enumeration    <font color=Red>=</font> <font color=Red>[</font>NmToken<font color=Red>]</font> <font color=Blue>-- nonempty list</font>
+<a name="(line226)"></a><a name="DefaultDecl"></a><font color=Green><u>data</u></font> DefaultDecl    <font color=Red>=</font> REQUIRED
+<a name="(line227)"></a>                    <font color=Red>|</font> IMPLIED
+<a name="(line228)"></a>                    <font color=Red>|</font> DefaultTo AttValue <font color=Cyan>(</font>Maybe FIXED<font color=Cyan>)</font>
+<a name="(line229)"></a>                    <font color=Green><u>deriving</u></font> Eq
+<a name="(line230)"></a><a name="FIXED"></a><font color=Green><u>data</u></font> FIXED          <font color=Red>=</font> FIXED <font color=Green><u>deriving</u></font> Eq
+<a name="(line231)"></a>
+<a name="(line232)"></a><a name="ConditionalSect"></a><font color=Green><u>data</u></font> ConditionalSect <font color=Red>=</font> IncludeSect IncludeSect
+<a name="(line233)"></a>                     <font color=Red>|</font> IgnoreSect IgnoreSect
+<a name="(line234)"></a>                     <font color=Green><u>deriving</u></font> Eq
+<a name="(line235)"></a><a name="IncludeSect"></a><font color=Green><u>type</u></font> IncludeSect <font color=Red>=</font> <font color=Red>[</font>ExtSubsetDecl<font color=Red>]</font>
+<a name="(line236)"></a><a name="IgnoreSect"></a><font color=Green><u>type</u></font> IgnoreSect  <font color=Red>=</font> <font color=Red>[</font>IgnoreSectContents<font color=Red>]</font>
+<a name="(line237)"></a><a name="Ignore"></a><font color=Green><u>data</u></font> Ignore      <font color=Red>=</font> Ignore <font color=Green><u>deriving</u></font> Eq
+<a name="(line238)"></a><a name="IgnoreSectContents"></a><font color=Green><u>data</u></font> IgnoreSectContents <font color=Red>=</font> IgnoreSectContents Ignore <font color=Red>[</font><font color=Cyan>(</font>IgnoreSectContents<font color=Cyan>,</font>Ignore<font color=Cyan>)</font><font color=Red>]</font>  <font color=Green><u>deriving</u></font> Eq
+<a name="(line239)"></a>
+<a name="(line240)"></a><a name="Reference"></a><font color=Green><u>data</u></font> Reference    <font color=Red>=</font> RefEntity EntityRef
+<a name="(line241)"></a>                  <font color=Red>|</font> RefChar CharRef
+<a name="(line242)"></a>                  <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="(line243)"></a><a name="EntityRef"></a><font color=Green><u>type</u></font> EntityRef    <font color=Red>=</font> Name
+<a name="(line244)"></a><a name="CharRef"></a><font color=Green><u>type</u></font> CharRef      <font color=Red>=</font> Int
+<a name="(line245)"></a><a name="PEReference"></a><font color=Green><u>type</u></font> PEReference  <font color=Red>=</font> Name
+<a name="(line246)"></a>
+<a name="(line247)"></a><a name="EntityDecl"></a><font color=Green><u>data</u></font> EntityDecl   <font color=Red>=</font> EntityGEDecl GEDecl
+<a name="(line248)"></a>                  <font color=Red>|</font> EntityPEDecl PEDecl
+<a name="(line249)"></a>                  <font color=Green><u>deriving</u></font> Eq
+<a name="(line250)"></a><a name="GEDecl"></a><font color=Green><u>data</u></font> GEDecl       <font color=Red>=</font> GEDecl Name EntityDef <font color=Green><u>deriving</u></font> Eq
+<a name="(line251)"></a><a name="PEDecl"></a><font color=Green><u>data</u></font> PEDecl       <font color=Red>=</font> PEDecl Name PEDef <font color=Green><u>deriving</u></font> Eq
+<a name="(line252)"></a><a name="EntityDef"></a><font color=Green><u>data</u></font> EntityDef    <font color=Red>=</font> DefEntityValue EntityValue
+<a name="(line253)"></a>                  <font color=Red>|</font> DefExternalID ExternalID <font color=Cyan>(</font>Maybe NDataDecl<font color=Cyan>)</font>
+<a name="(line254)"></a>                  <font color=Green><u>deriving</u></font> Eq
+<a name="(line255)"></a><a name="PEDef"></a><font color=Green><u>data</u></font> PEDef        <font color=Red>=</font> PEDefEntityValue EntityValue
+<a name="(line256)"></a>                  <font color=Red>|</font> PEDefExternalID ExternalID <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="(line257)"></a><a name="ExternalID"></a><font color=Green><u>data</u></font> ExternalID   <font color=Red>=</font> SYSTEM SystemLiteral
+<a name="(line258)"></a>                  <font color=Red>|</font> PUBLIC PubidLiteral SystemLiteral <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="(line259)"></a><a name="NDataDecl"></a><font color=Green><u>newtype</u></font> NDataDecl <font color=Red>=</font> NDATA Name  <font color=Green><u>deriving</u></font> Eq
+<a name="(line260)"></a>
+<a name="(line261)"></a><a name="TextDecl"></a><font color=Green><u>data</u></font> TextDecl       <font color=Red>=</font> TextDecl <font color=Cyan>(</font>Maybe VersionInfo<font color=Cyan>)</font> EncodingDecl  <font color=Green><u>deriving</u></font> Eq
+<a name="(line262)"></a><a name="ExtParsedEnt"></a><font color=Green><u>data</u></font> ExtParsedEnt i <font color=Red>=</font> ExtParsedEnt <font color=Cyan>(</font>Maybe TextDecl<font color=Cyan>)</font> <font color=Cyan>(</font>Content i<font color=Cyan>)</font> <font color=Green><u>deriving</u></font> Eq
+<a name="(line263)"></a><a name="ExtPE"></a><font color=Green><u>data</u></font> ExtPE          <font color=Red>=</font> ExtPE <font color=Cyan>(</font>Maybe TextDecl<font color=Cyan>)</font> <font color=Red>[</font>ExtSubsetDecl<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq
+<a name="(line264)"></a>
+<a name="(line265)"></a><a name="NotationDecl"></a><font color=Green><u>data</u></font> NotationDecl    <font color=Red>=</font> NOTATION Name <font color=Cyan>(</font>Either ExternalID PublicID<font color=Cyan>)</font> <font color=Green><u>deriving</u></font> Eq
+<a name="(line266)"></a><a name="PublicID"></a><font color=Green><u>newtype</u></font> PublicID     <font color=Red>=</font> PUBLICID PubidLiteral <font color=Green><u>deriving</u></font> Eq
+<a name="(line267)"></a><a name="EncodingDecl"></a><font color=Green><u>newtype</u></font> EncodingDecl <font color=Red>=</font> EncodingDecl String <font color=Green><u>deriving</u></font> Eq
+<a name="(line268)"></a>
+<a name="(line269)"></a><a name="Name"></a><font color=Green><u>type</u></font> Name     <font color=Red>=</font> String           <font color=Blue>-- non-empty string</font>
+<a name="(line270)"></a><a name="Names"></a><font color=Green><u>type</u></font> Names    <font color=Red>=</font> <font color=Red>[</font>Name<font color=Red>]</font>           <font color=Blue>-- non-empty list</font>
+<a name="(line271)"></a><a name="NmToken"></a><font color=Green><u>type</u></font> NmToken  <font color=Red>=</font> String           <font color=Blue>-- non-empty string</font>
+<a name="(line272)"></a><a name="NmTokens"></a><font color=Green><u>type</u></font> NmTokens <font color=Red>=</font> <font color=Red>[</font>NmToken<font color=Red>]</font>        <font color=Blue>-- non-empty list</font>
+<a name="(line273)"></a>
+<a name="(line274)"></a><a name="AttValue"></a><font color=Green><u>data</u></font> AttValue    <font color=Red>=</font> AttValue <font color=Red>[</font>Either String Reference<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq
+<a name="(line275)"></a><font color=Green><u>instance</u></font> Show AttValue <font color=Green><u>where</u></font>
+<a name="(line276)"></a>  show <font color=Cyan>(</font>AttValue v<font color=Cyan>)</font> <font color=Red>=</font> concatMap decode v
+<a name="(line277)"></a>    <font color=Green><u>where</u></font>
+<a name="(line278)"></a>      decode <font color=Cyan>(</font>Left  w<font color=Cyan>)</font>               <font color=Red>=</font> w
+<a name="(line279)"></a>      decode <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity ent<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&amp;"</font><font color=Cyan>++</font>ent<font color=Cyan>++</font><font color=Magenta>";"</font>
+<a name="(line280)"></a>      decode <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefChar cref<font color=Cyan>)</font><font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"&amp;"</font><font color=Cyan>++</font>show cref<font color=Cyan>++</font><font color=Magenta>";"</font>
+<a name="(line281)"></a>
+<a name="(line282)"></a><a name="EntityValue"></a><font color=Green><u>data</u></font> EntityValue <font color=Red>=</font> EntityValue <font color=Red>[</font>EV<font color=Red>]</font> <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="(line283)"></a><a name="EV"></a><font color=Green><u>data</u></font> EV <font color=Red>=</font> EVString String
+<a name="(line284)"></a> <font color=Blue>--  -- | EVPERef PEReference</font>
+<a name="(line285)"></a>        <font color=Red>|</font> EVRef Reference  <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="(line286)"></a><a name="PubidLiteral"></a><font color=Green><u>newtype</u></font> PubidLiteral  <font color=Red>=</font> PubidLiteral String <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="(line287)"></a><a name="SystemLiteral"></a><font color=Green><u>newtype</u></font> SystemLiteral <font color=Red>=</font> SystemLiteral String <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="(line288)"></a><a name="CharData"></a><font color=Green><u>type</u></font> CharData         <font color=Red>=</font> String
+<a name="(line289)"></a><a name="CDSect"></a><font color=Green><u>type</u></font> CDSect           <font color=Red>=</font> CharData
+<a name="(line290)"></a>
+<a name="(line291)"></a><font color=Green><u>instance</u></font> Eq ElemTag <font color=Green><u>where</u></font>
+<a name="(line292)"></a>    <font color=Cyan>(</font>ElemTag n <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>==</font> <font color=Cyan>(</font>ElemTag m <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> n<font color=Cyan>==</font>m
 </pre>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Validate.html b/docs/HaXml/src/Text/XML/HaXml/Validate.html
--- a/docs/HaXml/src/Text/XML/HaXml/Validate.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Validate.html
@@ -222,49 +222,55 @@
 <a name="(line220)"></a>
 <a name="(line221)"></a>    choice elem ns cps <font color=Red>=</font>  <font color=Blue>-- return only those parses that don't give any errors</font>
 <a name="(line222)"></a>        <font color=Red>[</font> rem <font color=Red>|</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>rem<font color=Cyan>)</font> <font color=Red>&lt;-</font> map <font color=Cyan>(</font><font color=Red>\</font>cp<font color=Red>-&gt;</font> checkCP elem <font color=Cyan>(</font>definite cp<font color=Cyan>)</font> ns<font color=Cyan>)</font> cps <font color=Red>]</font>
-<a name="(line223)"></a>        <font color=Green><u>where</u></font> definite <font color=Cyan>(</font>TagName n Query<font color=Cyan>)</font>  <font color=Red>=</font> TagName n None
-<a name="(line224)"></a>              definite <font color=Cyan>(</font>Choice cps Query<font color=Cyan>)</font> <font color=Red>=</font> Choice cps None
-<a name="(line225)"></a>              definite <font color=Cyan>(</font>Seq cps Query<font color=Cyan>)</font>    <font color=Red>=</font> Seq cps None
-<a name="(line226)"></a>              definite <font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font>   <font color=Red>=</font> TagName n Plus
-<a name="(line227)"></a>              definite <font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font>  <font color=Red>=</font> Choice cps Plus
-<a name="(line228)"></a>              definite <font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font>     <font color=Red>=</font> Seq cps Plus
-<a name="(line229)"></a>              definite x                  <font color=Red>=</font> x
-<a name="(line230)"></a>    sequence elem ns cps <font color=Red>=</font>  <font color=Blue>-- accumulate errors down the sequence</font>
-<a name="(line231)"></a>        foldl <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>es<font color=Cyan>,</font>ns<font color=Cyan>)</font> cp<font color=Red>-&gt;</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>es'<font color=Cyan>,</font>ns'<font color=Cyan>)</font> <font color=Red>=</font> checkCP elem cp ns
-<a name="(line232)"></a>                             <font color=Green><u>in</u></font> <font color=Cyan>(</font>es<font color=Cyan>++</font>es'<font color=Cyan>,</font> ns'<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line233)"></a>              <font color=Cyan>(</font>[]<font color=Cyan>,</font>ns<font color=Cyan>)</font> cps
-<a name="(line234)"></a>
-<a name="(line235)"></a>    checkIDs elem <font color=Red>=</font>
-<a name="(line236)"></a>        <font color=Green><u>let</u></font> celem <font color=Red>=</font> CElem elem undefined
-<a name="(line237)"></a>            showAttr a <font color=Red>=</font> iffind a literal none
-<a name="(line238)"></a>            idElems <font color=Red>=</font> concatMap <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>name<font color=Cyan>,</font>at<font color=Cyan>)</font><font color=Red>-&gt;</font> multi <font color=Cyan>(</font>showAttr at <font color=Cyan>`o`</font> tag name<font color=Cyan>)</font>
-<a name="(line239)"></a>                                                    celem<font color=Cyan>)</font>
-<a name="(line240)"></a>                                <font color=Cyan>(</font>ids dtd<font color=Cyan>)</font>
-<a name="(line241)"></a>            badIds  <font color=Red>=</font> duplicates <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Red>-&gt;</font>s<font color=Cyan>)</font> idElems<font color=Cyan>)</font>
-<a name="(line242)"></a>        <font color=Green><u>in</u></font> not <font color=Cyan>(</font>null badIds<font color=Cyan>)</font> <font color=Cyan>`gives`</font>
-<a name="(line243)"></a>               <font color=Cyan>(</font><font color=Magenta>"These attribute values of type ID are not unique: "</font>
-<a name="(line244)"></a>                <font color=Cyan>++</font>concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> badIds<font color=Cyan>)</font><font color=Cyan>++</font><font color=Magenta>"."</font><font color=Cyan>)</font>
-<a name="(line245)"></a>
-<a name="(line246)"></a>
-<a name="(line247)"></a><a name="cpError"></a>cpError <font color=Red>::</font> Name <font color=Red>-&gt;</font> CP <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font>
-<a name="(line248)"></a>cpError elem cp <font color=Red>=</font>
-<a name="(line249)"></a>    <font color=Red>[</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt; should contain "</font><font color=Cyan>++</font>display cp<font color=Cyan>++</font><font color=Magenta>" but does not."</font><font color=Red>]</font>
-<a name="(line250)"></a>
+<a name="(line223)"></a>        <font color=Cyan>++</font> <font color=Red>[</font> ns <font color=Red>|</font> all possEmpty cps <font color=Red>]</font>
+<a name="(line224)"></a>        <font color=Green><u>where</u></font> definite <font color=Cyan>(</font>TagName n Query<font color=Cyan>)</font>  <font color=Red>=</font> TagName n None
+<a name="(line225)"></a>              definite <font color=Cyan>(</font>Choice cps Query<font color=Cyan>)</font> <font color=Red>=</font> Choice cps None
+<a name="(line226)"></a>              definite <font color=Cyan>(</font>Seq cps Query<font color=Cyan>)</font>    <font color=Red>=</font> Seq cps None
+<a name="(line227)"></a>              definite <font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font>   <font color=Red>=</font> TagName n Plus
+<a name="(line228)"></a>              definite <font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font>  <font color=Red>=</font> Choice cps Plus
+<a name="(line229)"></a>              definite <font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font>     <font color=Red>=</font> Seq cps Plus
+<a name="(line230)"></a>              definite x                  <font color=Red>=</font> x
+<a name="(line231)"></a>              possEmpty <font color=Cyan>(</font>TagName <font color=Green><u>_</u></font> mod<font color=Cyan>)</font>   <font color=Red>=</font> mod <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> <font color=Red>[</font>Query<font color=Cyan>,</font>Star<font color=Red>]</font>
+<a name="(line232)"></a>              possEmpty <font color=Cyan>(</font>Choice cps None<font color=Cyan>)</font> <font color=Red>=</font> all possEmpty cps
+<a name="(line233)"></a>              possEmpty <font color=Cyan>(</font>Choice <font color=Green><u>_</u></font> mod<font color=Cyan>)</font>    <font color=Red>=</font> mod <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> <font color=Red>[</font>Query<font color=Cyan>,</font>Star<font color=Red>]</font>
+<a name="(line234)"></a>              possEmpty <font color=Cyan>(</font>Seq cps None<font color=Cyan>)</font>    <font color=Red>=</font> all possEmpty cps
+<a name="(line235)"></a>              possEmpty <font color=Cyan>(</font>Seq <font color=Green><u>_</u></font> mod<font color=Cyan>)</font>       <font color=Red>=</font> mod <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> <font color=Red>[</font>Query<font color=Cyan>,</font>Star<font color=Red>]</font>
+<a name="(line236)"></a>    sequence elem ns cps <font color=Red>=</font>  <font color=Blue>-- accumulate errors down the sequence</font>
+<a name="(line237)"></a>        foldl <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>es<font color=Cyan>,</font>ns<font color=Cyan>)</font> cp<font color=Red>-&gt;</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>es'<font color=Cyan>,</font>ns'<font color=Cyan>)</font> <font color=Red>=</font> checkCP elem cp ns
+<a name="(line238)"></a>                             <font color=Green><u>in</u></font> <font color=Cyan>(</font>es<font color=Cyan>++</font>es'<font color=Cyan>,</font> ns'<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line239)"></a>              <font color=Cyan>(</font>[]<font color=Cyan>,</font>ns<font color=Cyan>)</font> cps
+<a name="(line240)"></a>
+<a name="(line241)"></a>    checkIDs elem <font color=Red>=</font>
+<a name="(line242)"></a>        <font color=Green><u>let</u></font> celem <font color=Red>=</font> CElem elem undefined
+<a name="(line243)"></a>            showAttr a <font color=Red>=</font> iffind a literal none
+<a name="(line244)"></a>            idElems <font color=Red>=</font> concatMap <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>name<font color=Cyan>,</font>at<font color=Cyan>)</font><font color=Red>-&gt;</font> multi <font color=Cyan>(</font>showAttr at <font color=Cyan>`o`</font> tag name<font color=Cyan>)</font>
+<a name="(line245)"></a>                                                    celem<font color=Cyan>)</font>
+<a name="(line246)"></a>                                <font color=Cyan>(</font>ids dtd<font color=Cyan>)</font>
+<a name="(line247)"></a>            badIds  <font color=Red>=</font> duplicates <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Red>-&gt;</font>s<font color=Cyan>)</font> idElems<font color=Cyan>)</font>
+<a name="(line248)"></a>        <font color=Green><u>in</u></font> not <font color=Cyan>(</font>null badIds<font color=Cyan>)</font> <font color=Cyan>`gives`</font>
+<a name="(line249)"></a>               <font color=Cyan>(</font><font color=Magenta>"These attribute values of type ID are not unique: "</font>
+<a name="(line250)"></a>                <font color=Cyan>++</font>concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> badIds<font color=Cyan>)</font><font color=Cyan>++</font><font color=Magenta>"."</font><font color=Cyan>)</font>
 <a name="(line251)"></a>
-<a name="(line252)"></a><a name="display"></a>display <font color=Red>::</font> CP <font color=Red>-&gt;</font> String
-<a name="(line253)"></a>display <font color=Cyan>(</font>TagName name mod<font color=Cyan>)</font> <font color=Red>=</font> name <font color=Cyan>++</font> modifier mod
-<a name="(line254)"></a>display <font color=Cyan>(</font>Choice cps mod<font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"("</font> <font color=Cyan>++</font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>"|"</font> <font color=Cyan>(</font>map display cps<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line255)"></a>                             <font color=Cyan>++</font> <font color=Magenta>")"</font> <font color=Cyan>++</font> modifier mod
-<a name="(line256)"></a>display <font color=Cyan>(</font>Seq cps mod<font color=Cyan>)</font>      <font color=Red>=</font> <font color=Magenta>"("</font> <font color=Cyan>++</font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> <font color=Cyan>(</font>map display cps<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line257)"></a>                             <font color=Cyan>++</font> <font color=Magenta>")"</font> <font color=Cyan>++</font> modifier mod
-<a name="(line258)"></a>
-<a name="(line259)"></a><a name="modifier"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-&gt;</font> String
-<a name="(line260)"></a>modifier None  <font color=Red>=</font> <font color=Magenta>""</font>
-<a name="(line261)"></a>modifier Query <font color=Red>=</font> <font color=Magenta>"?"</font>
-<a name="(line262)"></a>modifier Star  <font color=Red>=</font> <font color=Magenta>"*"</font>
-<a name="(line263)"></a>modifier Plus  <font color=Red>=</font> <font color=Magenta>"+"</font>
+<a name="(line252)"></a>
+<a name="(line253)"></a><a name="cpError"></a>cpError <font color=Red>::</font> Name <font color=Red>-&gt;</font> CP <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font>
+<a name="(line254)"></a>cpError elem cp <font color=Red>=</font>
+<a name="(line255)"></a>    <font color=Red>[</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt; should contain "</font><font color=Cyan>++</font>display cp<font color=Cyan>++</font><font color=Magenta>" but does not."</font><font color=Red>]</font>
+<a name="(line256)"></a>
+<a name="(line257)"></a>
+<a name="(line258)"></a><a name="display"></a>display <font color=Red>::</font> CP <font color=Red>-&gt;</font> String
+<a name="(line259)"></a>display <font color=Cyan>(</font>TagName name mod<font color=Cyan>)</font> <font color=Red>=</font> name <font color=Cyan>++</font> modifier mod
+<a name="(line260)"></a>display <font color=Cyan>(</font>Choice cps mod<font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"("</font> <font color=Cyan>++</font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>"|"</font> <font color=Cyan>(</font>map display cps<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line261)"></a>                             <font color=Cyan>++</font> <font color=Magenta>")"</font> <font color=Cyan>++</font> modifier mod
+<a name="(line262)"></a>display <font color=Cyan>(</font>Seq cps mod<font color=Cyan>)</font>      <font color=Red>=</font> <font color=Magenta>"("</font> <font color=Cyan>++</font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> <font color=Cyan>(</font>map display cps<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line263)"></a>                             <font color=Cyan>++</font> <font color=Magenta>")"</font> <font color=Cyan>++</font> modifier mod
 <a name="(line264)"></a>
-<a name="(line265)"></a><a name="duplicates"></a>duplicates <font color=Red>::</font> Eq a <font color=Red>=&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font>
-<a name="(line266)"></a>duplicates xs <font color=Red>=</font> xs <font color=Cyan>\\</font> <font color=Cyan>(</font>nub xs<font color=Cyan>)</font>
+<a name="(line265)"></a><a name="modifier"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-&gt;</font> String
+<a name="(line266)"></a>modifier None  <font color=Red>=</font> <font color=Magenta>""</font>
+<a name="(line267)"></a>modifier Query <font color=Red>=</font> <font color=Magenta>"?"</font>
+<a name="(line268)"></a>modifier Star  <font color=Red>=</font> <font color=Magenta>"*"</font>
+<a name="(line269)"></a>modifier Plus  <font color=Red>=</font> <font color=Magenta>"+"</font>
+<a name="(line270)"></a>
+<a name="(line271)"></a><a name="duplicates"></a>duplicates <font color=Red>::</font> Eq a <font color=Red>=&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font>
+<a name="(line272)"></a>duplicates xs <font color=Red>=</font> xs <font color=Cyan>\\</font> <font color=Cyan>(</font>nub xs<font color=Cyan>)</font>
 </pre>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/XmlContent.html b/docs/HaXml/src/Text/XML/HaXml/XmlContent.html
--- a/docs/HaXml/src/Text/XML/HaXml/XmlContent.html
+++ b/docs/HaXml/src/Text/XML/HaXml/XmlContent.html
@@ -1,640 +1,683 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>{-# OPTIONS -fglasgow-exts #-}</font>
-<a name="(line2)"></a><font color=Blue>-- | The class 'XmlContent' is a kind of replacement for Read and Show:</font>
-<a name="(line3)"></a><font color=Blue>--   it provides conversions between a generic XML tree representation</font>
-<a name="(line4)"></a><font color=Blue>--   and your own more specialised typeful Haskell data trees.</font>
-<a name="(line5)"></a><font color=Blue>--</font>
-<a name="(line6)"></a><font color=Blue>--   If you are starting with a set of Haskell datatypes, use DrIFT to</font>
-<a name="(line7)"></a><font color=Blue>--   derive instances of this class for you:</font>
-<a name="(line8)"></a><font color=Blue>--       http:\/\/repetae.net\/john\/computer\/haskell\/DrIFT</font>
-<a name="(line9)"></a><font color=Blue>--   If you are starting with an XML DTD, use HaXml's tool DtdToHaskell</font>
-<a name="(line10)"></a><font color=Blue>--   to generate both the Haskell types and the corresponding instances.</font>
-<a name="(line11)"></a><font color=Blue>--</font>
-<a name="(line12)"></a><font color=Blue>--   This unified class interface replaces two previous (somewhat similar)</font>
-<a name="(line13)"></a><font color=Blue>--   classes: Haskell2Xml and Xml2Haskell.  There was no real reason to have</font>
-<a name="(line14)"></a><font color=Blue>--   separate classes depending on how you originally defined your datatypes.</font>
-<a name="(line15)"></a>
-<a name="(line16)"></a><font color=Blue>--   The methods 'toContents' and 'parseContents' convert a value to and from</font>
-<a name="(line17)"></a><font color=Blue>--   a generic internal representation of an XML document /without/ a DTD.</font>
-<a name="(line18)"></a><font color=Blue>--   The functions 'toXml' and 'fromXml' convert a value to and from a generic</font>
-<a name="(line19)"></a><font color=Blue>--   internal representation of an XML document /including/ a DTD.</font>
-<a name="(line20)"></a><font color=Blue>--   The functions 'readXml' and 'showXml' convert to and from Strings.</font>
-<a name="(line21)"></a><font color=Blue>--   The functions 'fReadXml' and 'fWriteXml' do the conversion to and from</font>
-<a name="(line22)"></a><font color=Blue>--   the given filenames.</font>
-<a name="(line23)"></a><font color=Blue>--   The functions 'hGetXml' and 'hPutXml' do the conversion to and from</font>
-<a name="(line24)"></a><font color=Blue>--   the given file handles.</font>
-<a name="(line25)"></a><font color=Blue>--   (See the type signatures.)</font>
-<a name="(line26)"></a><font color=Blue>--  </font>
-<a name="(line27)"></a>
-<a name="(line28)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent
-<a name="(line29)"></a>  <font color=Cyan>(</font> <font color=Blue>-- * Re-export the relevant set of generic XML document type definitions</font>
-<a name="(line30)"></a>    Document<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line31)"></a>  <font color=Cyan>,</font> Element<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line32)"></a>  <font color=Cyan>,</font> ElemTag<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line33)"></a>  <font color=Cyan>,</font> Content<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line34)"></a>  <font color=Cyan>,</font> Attribute<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line35)"></a>  <font color=Cyan>,</font> AttValue<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line36)"></a>  <font color=Cyan>,</font> Prolog<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line37)"></a>  <font color=Cyan>,</font> Reference<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line38)"></a>  <font color=Blue>-- * The enabling classes, that define parsing\/unparsing between Haskell</font>
-<a name="(line39)"></a>  <font color=Blue>--   datatypes and a generic XML representation.</font>
-<a name="(line40)"></a>  <font color=Cyan>,</font> XmlContent<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line41)"></a>  <font color=Cyan>,</font> XmlAttributes<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line42)"></a>  <font color=Cyan>,</font> XmlAttrType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line43)"></a>  <font color=Blue>-- ** Auxiliaries for writing parsers in the XmlContent class</font>
-<a name="(line44)"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly
-<a name="(line45)"></a>  <font color=Cyan>,</font> XMLParser
-<a name="(line46)"></a>  <font color=Cyan>,</font> content<font color=Cyan>,</font> posnElement<font color=Cyan>,</font> element<font color=Cyan>,</font> interior<font color=Cyan>,</font> inElement<font color=Cyan>,</font> text<font color=Cyan>,</font> attributes
-<a name="(line47)"></a>  <font color=Cyan>,</font> posnElementWith<font color=Cyan>,</font> elementWith<font color=Cyan>,</font> inElementWith
-<a name="(line48)"></a>  <font color=Cyan>,</font> choice<font color=Cyan>,</font> definite <font color=Blue>-- ???</font>
-<a name="(line49)"></a>  <font color=Blue>-- ** Auxiliaries for generating in the XmlContent class</font>
-<a name="(line50)"></a>  <font color=Cyan>,</font> mkElem<font color=Cyan>,</font> mkElemC<font color=Cyan>,</font> mkAttr
-<a name="(line51)"></a>  <font color=Cyan>,</font> toText<font color=Cyan>,</font> toCData
-<a name="(line52)"></a>  <font color=Blue>-- ** Auxiliaries for the attribute-related classes</font>
-<a name="(line53)"></a>  <font color=Cyan>,</font> maybeToAttr<font color=Cyan>,</font> defaultToAttr
-<a name="(line54)"></a>  <font color=Cyan>,</font> definiteA<font color=Cyan>,</font> defaultA<font color=Cyan>,</font> possibleA<font color=Cyan>,</font> fromAttrToStr<font color=Cyan>,</font> toAttrFrStr
-<a name="(line55)"></a>  <font color=Cyan>,</font> Defaultable<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line56)"></a>  <font color=Cyan>,</font> str2attr<font color=Cyan>,</font> attr2str<font color=Cyan>,</font> attval
-<a name="(line57)"></a>  <font color=Cyan>,</font> catMaybes	<font color=Blue>-- re-exported from Maybe</font>
-<a name="(line58)"></a>  <font color=Blue>-- * Whole-document conversion functions</font>
-<a name="(line59)"></a>  <font color=Cyan>,</font> toXml<font color=Cyan>,</font> fromXml
-<a name="(line60)"></a>  <font color=Cyan>,</font> readXml<font color=Cyan>,</font> showXml<font color=Cyan>,</font> fpsShowXml
-<a name="(line61)"></a>  <font color=Cyan>,</font> fReadXml<font color=Cyan>,</font> fWriteXml<font color=Cyan>,</font> fpsWriteXml
-<a name="(line62)"></a>  <font color=Cyan>,</font> hGetXml<font color=Cyan>,</font>  hPutXml<font color=Cyan>,</font> fpsHPutXml
-<a name="(line63)"></a>  <font color=Blue>-- * Explicit representation of Haskell datatype information</font>
-<a name="(line64)"></a>  <font color=Blue>--   (for conversion to a DTD)</font>
-<a name="(line65)"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping
-<a name="(line66)"></a>  <font color=Blue>-- * Types useful for some content models</font>
-<a name="(line67)"></a>  <font color=Cyan>,</font> List1<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line68)"></a>  <font color=Cyan>,</font> ANYContent<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line69)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line70)"></a>
-<a name="(line71)"></a><font color=Green><u>import</u></font> IO
-<a name="(line72)"></a><font color=Green><u>import</u></font> Maybe <font color=Cyan>(</font>catMaybes<font color=Cyan>)</font>
-<a name="(line73)"></a><font color=Green><u>import</u></font> Char  <font color=Cyan>(</font>chr<font color=Cyan>,</font> ord<font color=Cyan>,</font> isSpace<font color=Cyan>)</font>
-<a name="(line74)"></a><font color=Green><u>import</u></font> List  <font color=Cyan>(</font>intersperse<font color=Cyan>,</font> isPrefixOf<font color=Cyan>,</font> isSuffixOf<font color=Cyan>,</font> partition<font color=Cyan>)</font>
-<a name="(line75)"></a>
-<a name="(line76)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ <font color=Cyan>(</font>render<font color=Cyan>)</font>
-<a name="(line77)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty <font color=Green><u>as</u></font> PP
-<a name="(line78)"></a>
-<a name="(line79)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
-<a name="(line80)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping
-<a name="(line81)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn     <font color=Cyan>(</font>Posn<font color=Cyan>,</font> posInNewCxt<font color=Cyan>)</font>
-<a name="(line82)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty   <font color=Cyan>(</font>document<font color=Cyan>)</font>
-<a name="(line83)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse    <font color=Cyan>(</font>xmlParse<font color=Cyan>,</font> fst3<font color=Cyan>)</font>
-<a name="(line84)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim <font color=Cyan>(</font>Verbatim<font color=Cyan>(</font>verbatim<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line85)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ByteStringPP <font color=Green><u>as</u></font> FPS <font color=Cyan>(</font>document<font color=Cyan>)</font>
-<a name="(line86)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8 <font color=Green><u>as</u></font> FPS
-<a name="(line87)"></a>
-<a name="(line88)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly
-<a name="(line89)"></a>
-<a name="(line90)"></a><font color=Blue>--  #define DEBUG</font>
-<a name="(line91)"></a>
-<a name="(line92)"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>
-<a name="(line93)"></a><font color=Green><u>import</u></font> Debug<font color=Cyan>.</font>Trace<font color=Cyan>(</font>trace<font color=Cyan>)</font>
-<a name="(line94)"></a><a name="debug"></a>debug <font color=Red>::</font> a <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> a
-<a name="(line95)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> s <font color=Red>=</font> trace s v
-<a name="(line96)"></a><font color=Magenta><em>#else</em></font>
-<a name="(line97)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> s <font color=Red>=</font> v
-<a name="(line98)"></a><font color=Magenta><em>#endif</em></font>
-<a name="(line99)"></a>
-<a name="(line100)"></a>
-<a name="(line101)"></a><a name="attval"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line102)"></a><font color=Blue>-- | Read a single attribute called "value".</font>
-<a name="(line103)"></a>attval <font color=Red>::</font> <font color=Cyan>(</font>Read a<font color=Cyan>)</font> <font color=Red>=&gt;</font> Element i <font color=Red>-&gt;</font> a
-<a name="(line104)"></a>attval <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"value"</font><font color=Cyan>,</font>v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> <font color=Red>=</font> read <font color=Cyan>(</font>show v<font color=Cyan>)</font>
-<a name="(line105)"></a>
-<a name="(line106)"></a><a name="mkAttr"></a><font color=Blue>-- | Generate a single attribute.</font>
-<a name="(line107)"></a>mkAttr <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Attribute
-<a name="(line108)"></a>mkAttr n v <font color=Red>=</font> <font color=Cyan>(</font>n<font color=Cyan>,</font> AttValue <font color=Red>[</font>Left v<font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line109)"></a>
-<a name="(line110)"></a><a name="mkElem"></a><font color=Blue>-- | Generate an element with no attributes, named for its HType.</font>
-<a name="(line111)"></a>mkElem <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font> <font color=Red>-&gt;</font> Content ()
-<a name="(line112)"></a>mkElem x cs  <font color=Red>=</font> CElem <font color=Cyan>(</font>Elem <font color=Cyan>(</font>showHType <font color=Cyan>(</font>toHType x<font color=Cyan>)</font> <font color=Magenta>""</font><font color=Cyan>)</font> [] cs<font color=Cyan>)</font> ()
-<a name="(line113)"></a>
-<a name="(line114)"></a><a name="mkElemC"></a><font color=Blue>-- | Generate an element with no attributes, named directly.</font>
-<a name="(line115)"></a>mkElemC <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font> <font color=Red>-&gt;</font> Content ()
-<a name="(line116)"></a>mkElemC x cs <font color=Red>=</font> CElem <font color=Cyan>(</font>Elem x [] cs<font color=Cyan>)</font> ()
-<a name="(line117)"></a>
-<a name="(line118)"></a><a name="toText"></a><font color=Blue>-- | Turn a simple string into XML text. </font>
-<a name="(line119)"></a>toText <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>
-<a name="(line120)"></a>toText s <font color=Red>=</font> <font color=Red>[</font>CString False s ()<font color=Red>]</font>
-<a name="(line121)"></a>
-<a name="(line122)"></a><a name="toCData"></a><font color=Blue>-- | Turn a string into an XML CDATA section.</font>
-<a name="(line123)"></a><font color=Blue>--   (i.e. special characters like '&amp;' are preserved without interpretation.)</font>
-<a name="(line124)"></a>toCData <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>
-<a name="(line125)"></a>toCData s <font color=Red>=</font> <font color=Red>[</font>CString True s ()<font color=Red>]</font>
-<a name="(line126)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line127)"></a>
-<a name="(line128)"></a>	<font color=Blue>-- probably want to write DTD separately from value, and have</font>
-<a name="(line129)"></a>	<font color=Blue>-- easy ways to combine DTD + value into a document, or write</font>
-<a name="(line130)"></a>	<font color=Blue>-- them to separate files.</font>
-<a name="(line131)"></a>
-<a name="(line132)"></a><a name="fReadXml"></a><font color=Blue>-- | Read an XML document from a file and convert it to a fully-typed</font>
-<a name="(line133)"></a><font color=Blue>--   Haskell value.</font>
-<a name="(line134)"></a>fReadXml  <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> FilePath <font color=Red>-&gt;</font> IO a
-<a name="(line135)"></a>fReadXml fp <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line136)"></a>    f <font color=Red>&lt;-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdin
-<a name="(line137)"></a>           <font color=Green><u>else</u></font> openFile fp ReadMode <font color=Cyan>)</font>
-<a name="(line138)"></a>    x <font color=Red>&lt;-</font> hGetContents f 
-<a name="(line139)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse fp x
-<a name="(line140)"></a>        y' <font color=Red>=</font> CElem y <font color=Cyan>(</font>posInNewCxt fp Nothing<font color=Cyan>)</font>
-<a name="(line141)"></a>    either fail return <font color=Cyan>(</font>fst <font color=Cyan>(</font>runParser parseContents <font color=Red>[</font>y'<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line142)"></a>
-<a name="(line143)"></a><a name="fWriteXml"></a><font color=Blue>-- | Write a fully-typed Haskell value to the given file as an XML</font>
-<a name="(line144)"></a><font color=Blue>--   document.</font>
-<a name="(line145)"></a>fWriteXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> FilePath <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()
-<a name="(line146)"></a>fWriteXml fp x <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line147)"></a>    f <font color=Red>&lt;-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout
-<a name="(line148)"></a>           <font color=Green><u>else</u></font> openFile fp WriteMode <font color=Cyan>)</font>
-<a name="(line149)"></a>    hPutXml f False x
-<a name="(line150)"></a>    hClose f
-<a name="(line151)"></a>
-<a name="(line152)"></a><a name="fpsWriteXml"></a><font color=Blue>-- | Write any Haskell value to the given file as an XML document,</font>
-<a name="(line153)"></a><font color=Blue>--   using the FastPackedString interface (output will not be prettified).</font>
-<a name="(line154)"></a>fpsWriteXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> FilePath <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()
-<a name="(line155)"></a>fpsWriteXml fp x <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line156)"></a>    f <font color=Red>&lt;-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout
-<a name="(line157)"></a>           <font color=Green><u>else</u></font> openFile fp WriteMode <font color=Cyan>)</font>
-<a name="(line158)"></a>    fpsHPutXml f False x
-<a name="(line159)"></a>    hClose f
-<a name="(line160)"></a>
-<a name="(line161)"></a><a name="readXml"></a><font color=Blue>-- | Read a fully-typed XML document from a string.</font>
-<a name="(line162)"></a>readXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> String <font color=Red>-&gt;</font> Either String a
-<a name="(line163)"></a>readXml s <font color=Red>=</font>
-<a name="(line164)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse <font color=Magenta>"string input"</font> s <font color=Green><u>in</u></font>
-<a name="(line165)"></a>    fst <font color=Cyan>(</font>runParser parseContents
-<a name="(line166)"></a>                   <font color=Red>[</font>CElem y <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"string input"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line167)"></a>
-<a name="(line168)"></a><a name="showXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (without DTD).</font>
-<a name="(line169)"></a>showXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> String
-<a name="(line170)"></a>showXml dtd x <font color=Red>=</font>
-<a name="(line171)"></a>    <font color=Green><u>case</u></font> toContents x <font color=Green><u>of</u></font>
-<a name="(line172)"></a>      <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>render <font color=Cyan>.</font> document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x
-<a name="(line173)"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Magenta>""</font>
-<a name="(line174)"></a>
-<a name="(line175)"></a><a name="fpsShowXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a ByteString (without DTD).</font>
-<a name="(line176)"></a>fpsShowXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> FPS<font color=Cyan>.</font>ByteString
-<a name="(line177)"></a>fpsShowXml dtd x <font color=Red>=</font>
-<a name="(line178)"></a>    <font color=Green><u>case</u></font> toContents x <font color=Green><u>of</u></font>
-<a name="(line179)"></a>      <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>FPS<font color=Cyan>.</font>document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x
-<a name="(line180)"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> FPS<font color=Cyan>.</font>empty
-<a name="(line181)"></a>
-<a name="(line182)"></a>
-<a name="(line183)"></a><a name="toXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (with or without DTD).</font>
-<a name="(line184)"></a>toXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Document ()
-<a name="(line185)"></a>toXml dtd value <font color=Red>=</font>
-<a name="(line186)"></a>    <font color=Green><u>let</u></font> ht <font color=Red>=</font> toHType value <font color=Green><u>in</u></font>
-<a name="(line187)"></a>    Document <font color=Cyan>(</font>Prolog <font color=Cyan>(</font>Just <font color=Cyan>(</font>XMLDecl <font color=Magenta>"1.0"</font> Nothing Nothing<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line188)"></a>                     [] <font color=Cyan>(</font><font color=Green><u>if</u></font> dtd <font color=Green><u>then</u></font> Just <font color=Cyan>(</font>toDTD ht<font color=Cyan>)</font> <font color=Green><u>else</u></font> Nothing<font color=Cyan>)</font> []<font color=Cyan>)</font>
-<a name="(line189)"></a>             emptyST
-<a name="(line190)"></a>             <font color=Cyan>(</font> <font color=Green><u>case</u></font> <font color=Cyan>(</font>ht<font color=Cyan>,</font> toContents value<font color=Cyan>)</font> <font color=Green><u>of</u></font>
-<a name="(line191)"></a>                 <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font>       <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> [] cs
-<a name="(line192)"></a>                 <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> [] cs
-<a name="(line193)"></a>                 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Red>[</font>CElem e ()<font color=Red>]</font><font color=Cyan>)</font>   <font color=Red>-&gt;</font> e <font color=Cyan>)</font>
-<a name="(line194)"></a>             []
-<a name="(line195)"></a>
-<a name="(line196)"></a><a name="fromXml"></a><font color=Blue>-- | Read a Haskell value from an XML document, ignoring the DTD and</font>
-<a name="(line197)"></a><font color=Blue>--   using the Haskell result type to determine how to parse it.</font>
-<a name="(line198)"></a>fromXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Document Posn <font color=Red>-&gt;</font> Either String a
-<a name="(line199)"></a>fromXml <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font>
-<a name="(line200)"></a>  <font color=Red>|</font> <font color=Magenta>"tuple"</font> <font color=Cyan>`isPrefixOf`</font> n <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents cs<font color=Cyan>)</font>
-<a name="(line201)"></a>  <font color=Red>|</font> <font color=Magenta>"-XML"</font>  <font color=Cyan>`isSuffixOf`</font> n <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents cs<font color=Cyan>)</font>
-<a name="(line202)"></a>  <font color=Red>|</font> otherwise <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents
-<a name="(line203)"></a>                               <font color=Red>[</font>CElem e <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"document"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line204)"></a>
-<a name="(line205)"></a>
-<a name="(line206)"></a><a name="hGetXml"></a><font color=Blue>-- | Read a fully-typed XML document from a file handle.</font>
-<a name="(line207)"></a>hGetXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Handle <font color=Red>-&gt;</font> IO a
-<a name="(line208)"></a>hGetXml h <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line209)"></a>    x <font color=Red>&lt;-</font> hGetContents h 
-<a name="(line210)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse <font color=Magenta>"file handle"</font> x
-<a name="(line211)"></a>    either fail return
-<a name="(line212)"></a>           <font color=Cyan>(</font>fst <font color=Cyan>(</font>runParser parseContents
-<a name="(line213)"></a>                           <font color=Red>[</font>CElem y <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"file handle"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line214)"></a>
-<a name="(line215)"></a><a name="hPutXml"></a><font color=Blue>-- | Write a fully-typed XML document to a file handle.</font>
-<a name="(line216)"></a>hPutXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Handle <font color=Red>-&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()
-<a name="(line217)"></a>hPutXml h dtd x <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line218)"></a>    <font color=Cyan>(</font>hPutStrLn h <font color=Cyan>.</font> render <font color=Cyan>.</font> document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x
-<a name="(line219)"></a>
-<a name="(line220)"></a><a name="fpsHPutXml"></a><font color=Blue>-- | Write a fully-typed XML document to a file handle, using the</font>
-<a name="(line221)"></a><font color=Blue>--   FastPackedString interface (output will not be prettified).</font>
-<a name="(line222)"></a>fpsHPutXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Handle <font color=Red>-&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()
-<a name="(line223)"></a>fpsHPutXml h dtd x <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line224)"></a>    <font color=Cyan>(</font>FPS<font color=Cyan>.</font>hPut h <font color=Cyan>.</font> FPS<font color=Cyan>.</font>document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x
-<a name="(line225)"></a>
-<a name="(line226)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line227)"></a>
-<a name="(line228)"></a><a name="XMLParser"></a><font color=Blue>-- | We need a parsing monad for reading generic XML Content into specific</font>
-<a name="(line229)"></a><a name="XMLParser"></a><font color=Blue>--   datatypes.  This is a specialisation of the Text.ParserCombinators.Poly</font>
-<a name="(line230)"></a><a name="XMLParser"></a><font color=Blue>--   ones, where the input token type is fixed as XML Content.</font>
-<a name="(line231)"></a><a name="XMLParser"></a><font color=Green><u>type</u></font> XMLParser a <font color=Red>=</font> Parser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font> a
-<a name="(line232)"></a>
-<a name="(line233)"></a>
-<a name="(line234)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line235)"></a><font color=Blue>-- Some useful parsing combinators</font>
-<a name="(line236)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line237)"></a>
-<a name="(line238)"></a><a name="content"></a><font color=Blue>-- | The most primitive combinator for XMLParser - get one content item.</font>
-<a name="(line239)"></a>content <font color=Red>::</font> String <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font>
-<a name="(line240)"></a>content word <font color=Red>=</font> next <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Magenta>" when expecting "</font><font color=Cyan>++</font>word<font color=Cyan>)</font>
-<a name="(line241)"></a>
-<a name="(line242)"></a><a name="posnElementWith"></a><font color=Blue>-- | Get the next content element, checking that it has one of the required</font>
-<a name="(line243)"></a><font color=Blue>--   tags, using the given matching function. </font>
-<a name="(line244)"></a><font color=Blue>--   (Skips over comments and whitespace, rejects text and refs.</font>
-<a name="(line245)"></a><font color=Blue>--    Also returns position of element.)</font>
-<a name="(line246)"></a>posnElementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font>
-<a name="(line247)"></a>                   <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Posn<font color=Cyan>,</font> Element Posn<font color=Cyan>)</font>
-<a name="(line248)"></a>posnElementWith match tags <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line249)"></a>    <font color=Cyan>{</font> c <font color=Red>&lt;-</font> content <font color=Cyan>(</font>formatted tags<font color=Cyan>)</font>
-<a name="(line250)"></a>    <font color=Cyan>;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>
-<a name="(line251)"></a>          CElem e<font color=Red>@</font><font color=Cyan>(</font>Elem t <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> pos
-<a name="(line252)"></a>              <font color=Red>|</font> any <font color=Cyan>(</font>match t<font color=Cyan>)</font> tags <font color=Red>-&gt;</font> return <font color=Cyan>(</font>pos<font color=Cyan>,</font> e<font color=Cyan>)</font>
-<a name="(line253)"></a>              <font color=Red>|</font> otherwise          <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Found a &lt;"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>"&gt;, but expected "</font>
-<a name="(line254)"></a>                                           <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>
-<a name="(line255)"></a>          CString b s pos
-<a name="(line256)"></a>              <font color=Red>|</font> not b <font color=Cyan>&amp;&amp;</font> all isSpace s <font color=Red>-&gt;</font> posnElementWith match tags
-<a name="(line257)"></a>							<font color=Blue>-- ignore blank space</font>
-<a name="(line258)"></a>              <font color=Red>|</font> otherwise <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Found text content, but expected "</font>
-<a name="(line259)"></a>                                  <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\ntext is: "</font><font color=Cyan>++</font>s
-<a name="(line260)"></a>                                  <font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>
-<a name="(line261)"></a>          CRef r pos <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Found reference, but expected "</font>
-<a name="(line262)"></a>                             <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\nreference is: "</font><font color=Cyan>++</font>verbatim r
-<a name="(line263)"></a>                             <font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>
-<a name="(line264)"></a>          CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> posnElementWith match tags  <font color=Blue>-- skip comments, PIs, etc.</font>
-<a name="(line265)"></a>    <font color=Cyan>}</font>
-<a name="(line266)"></a>  <font color=Green><u>where</u></font>
-<a name="(line267)"></a>    formatted <font color=Red>[</font>t<font color=Red>]</font>  <font color=Red>=</font> <font color=Magenta>"a &lt;"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>"&gt;"</font>
-<a name="(line268)"></a>    formatted tags <font color=Red>=</font> <font color=Magenta>"one of"</font><font color=Cyan>++</font> concatMap <font color=Cyan>(</font><font color=Red>\</font>t<font color=Red>-&gt;</font><font color=Magenta>" &lt;"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>"&gt;"</font><font color=Cyan>)</font> tags
-<a name="(line269)"></a>
-<a name="(line270)"></a><a name="posnElement"></a><font color=Blue>-- | A specialisation of @posnElementWith (==)@.</font>
-<a name="(line271)"></a>posnElement <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Posn<font color=Cyan>,</font> Element Posn<font color=Cyan>)</font>
-<a name="(line272)"></a>posnElement <font color=Red>=</font> posnElementWith <font color=Cyan>(</font><font color=Cyan>==</font><font color=Cyan>)</font>
-<a name="(line273)"></a>
-<a name="(line274)"></a><a name="element"></a><font color=Blue>-- | Get the next content element, checking that it has one of the required</font>
-<a name="(line275)"></a><font color=Blue>--   tags.  (Skips over comments and whitespace, rejects text and refs.)</font>
-<a name="(line276)"></a>element <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>
-<a name="(line277)"></a>element tags <font color=Red>=</font> fmap snd <font color=Cyan>(</font>posnElement tags<font color=Cyan>)</font>
-<a name="(line278)"></a>				<font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Element: "</font><font color=Cyan>++</font>unwords tags<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font>
-<a name="(line279)"></a>
-<a name="(line280)"></a><a name="elementWith"></a><font color=Blue>-- | Like element, only permits a more flexible match against the tagname.</font>
-<a name="(line281)"></a>elementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>
-<a name="(line282)"></a>elementWith match tags <font color=Red>=</font> fmap snd <font color=Cyan>(</font>posnElementWith match tags<font color=Cyan>)</font>
-<a name="(line283)"></a>				<font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Element: "</font><font color=Cyan>++</font>unwords tags<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font>
-<a name="(line284)"></a>
-<a name="(line285)"></a><a name="interior"></a><font color=Blue>-- | Run an XMLParser on the contents of the given element (i.e. not on the</font>
-<a name="(line286)"></a><font color=Blue>--   current monadic content sequence), checking that the contents are</font>
-<a name="(line287)"></a><font color=Blue>--   exhausted, before returning the calculated value within the current</font>
-<a name="(line288)"></a><font color=Blue>--   parser context.</font>
-<a name="(line289)"></a>interior <font color=Red>::</font> Element Posn <font color=Red>-&gt;</font> XMLParser a <font color=Red>-&gt;</font> XMLParser a
-<a name="(line290)"></a>interior <font color=Cyan>(</font>Elem e <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> p <font color=Red>=</font>
-<a name="(line291)"></a>    <font color=Green><u>case</u></font> runParser p cs <font color=Green><u>of</u></font>
-<a name="(line292)"></a>        <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> fail msg
-<a name="(line293)"></a>        <font color=Cyan>(</font>Right x<font color=Cyan>,</font> []<font color=Cyan>)</font> <font color=Red>-&gt;</font> return x
-<a name="(line294)"></a>        <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs<font color=Red>@</font><font color=Cyan>(</font>c<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line295)"></a>            <font color=Red>|</font> all onlyMisc cs <font color=Red>-&gt;</font> return x
-<a name="(line296)"></a>            <font color=Red>|</font> otherwise       <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Too many elements inside &lt;"</font><font color=Cyan>++</font>e<font color=Cyan>++</font><font color=Magenta>"&gt; at\n"</font>
-<a name="(line297)"></a>                                      <font color=Cyan>++</font>show <font color=Cyan>(</font>info c<font color=Cyan>)</font><font color=Cyan>++</font><font color=Magenta>"\n"</font>
-<a name="(line298)"></a>                                      <font color=Cyan>++</font><font color=Magenta>"Found excess: "</font><font color=Cyan>++</font>verbatim c<font color=Cyan>)</font>
-<a name="(line299)"></a>  <font color=Green><u>where</u></font> onlyMisc <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True
-<a name="(line300)"></a>        onlyMisc <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>|</font> all isSpace s <font color=Red>=</font> True
-<a name="(line301)"></a>        onlyMisc <font color=Green><u>_</u></font> <font color=Red>=</font> False
-<a name="(line302)"></a>
-<a name="(line303)"></a><a name="inElement"></a><font color=Blue>-- | A combination of element + interior.</font>
-<a name="(line304)"></a>inElement <font color=Red>::</font> String <font color=Red>-&gt;</font> XMLParser a <font color=Red>-&gt;</font> XMLParser a
-<a name="(line305)"></a>inElement tag p <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font>tag<font color=Red>]</font><font color=Cyan>;</font> commit <font color=Cyan>(</font>interior e p<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line306)"></a>
-<a name="(line307)"></a><a name="inElementWith"></a><font color=Blue>-- | A combination of elementWith + interior.</font>
-<a name="(line308)"></a>inElementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> XMLParser a <font color=Red>-&gt;</font> XMLParser a
-<a name="(line309)"></a>inElementWith match tag p <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> elementWith match <font color=Red>[</font>tag<font color=Red>]</font>
-<a name="(line310)"></a>                               <font color=Cyan>;</font> commit <font color=Cyan>(</font>interior e p<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line311)"></a>
-<a name="(line312)"></a><a name="attributes"></a><font color=Blue>-- | Do some parsing of the attributes of the given element</font>
-<a name="(line313)"></a>attributes <font color=Red>::</font> XmlAttributes a <font color=Red>=&gt;</font> Element Posn <font color=Red>-&gt;</font> XMLParser a
-<a name="(line314)"></a>attributes <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Green><u>as</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> return <font color=Cyan>(</font>fromAttrs <font color=Green><u>as</u></font><font color=Cyan>)</font>
-<a name="(line315)"></a>
-<a name="(line316)"></a><a name="text"></a><font color=Blue>-- | 'text' is a counterpart to 'element', parsing text content if it</font>
-<a name="(line317)"></a><font color=Blue>--   exists.  Adjacent text and references are coalesced.</font>
-<a name="(line318)"></a>text <font color=Red>::</font> XMLParser String
-<a name="(line319)"></a>text <font color=Red>=</font> text' []
-<a name="(line320)"></a>  <font color=Green><u>where</u></font> text' acc <font color=Red>=</font>
-<a name="(line321)"></a>          <font color=Green><u>do</u></font> <font color=Cyan>{</font> c <font color=Red>&lt;-</font> content <font color=Magenta>"plain text"</font>
-<a name="(line322)"></a>             <font color=Cyan>;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>
-<a name="(line323)"></a>                 CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font>        <font color=Red>-&gt;</font> text' <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font>
-<a name="(line324)"></a>                 CRef <font color=Cyan>(</font>RefChar s<font color=Cyan>)</font> <font color=Green><u>_</u></font>   <font color=Red>-&gt;</font> text' <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"&amp;#"</font><font color=Cyan>++</font>show s<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font> <font color=Red><b>:</b></font>acc<font color=Cyan>)</font>
-<a name="(line325)"></a>                 CRef <font color=Cyan>(</font>RefEntity s<font color=Cyan>)</font> <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> text' <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>'&amp;'</font><font color=Red><b>:</b></font>s<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font><font color=Red><b>:</b></font>acc<font color=Cyan>)</font>
-<a name="(line326)"></a>                 CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font>            <font color=Red>-&gt;</font> text' acc
-<a name="(line327)"></a>                 CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font>         <font color=Red>-&gt;</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> reparse <font color=Red>[</font>c<font color=Red>]</font> <font color=Blue>-- put it back!</font>
-<a name="(line328)"></a>                                         <font color=Cyan>;</font> <font color=Green><u>if</u></font> null acc <font color=Green><u>then</u></font> fail <font color=Magenta>"empty string"</font>
-<a name="(line329)"></a>                                           <font color=Green><u>else</u></font> return <font color=Cyan>(</font>concat <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line330)"></a>                                         <font color=Cyan>}</font>
-<a name="(line331)"></a>             <font color=Cyan>}</font>
-<a name="(line332)"></a>          <font color=Cyan>`onFail`</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> null acc <font color=Green><u>then</u></font> fail <font color=Magenta>"empty string"</font>
-<a name="(line333)"></a>                     <font color=Green><u>else</u></font> return <font color=Cyan>(</font>concat <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>)</font>
-<a name="(line334)"></a>
-<a name="(line335)"></a>
-<a name="(line336)"></a><a name="choice"></a><font color=Blue>-- | 'choice f p' means if parseContents succeeds, apply f to the result,</font>
-<a name="(line337)"></a><font color=Blue>--   otherwise use the continuation parser.</font>
-<a name="(line338)"></a>choice <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> <font color=Cyan>(</font>a <font color=Red>-&gt;</font> b<font color=Cyan>)</font> <font color=Red>-&gt;</font> XMLParser b <font color=Red>-&gt;</font> XMLParser b
-<a name="(line339)"></a>choice cons <font color=Cyan>(</font>P other<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line340)"></a>    P <font color=Cyan>(</font><font color=Red>\</font>cs<font color=Red>-&gt;</font> <font color=Green><u>case</u></font> runParser parseContents cs <font color=Green><u>of</u></font>
-<a name="(line341)"></a>                 <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> other cs
-<a name="(line342)"></a>                 <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs'<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>cons x<font color=Cyan>)</font><font color=Cyan>,</font> cs'<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line343)"></a>
-<a name="(line344)"></a><font color=Blue>--choice cons other = fmap cons parseContents `onFail` other</font>
-<a name="(line345)"></a>
-<a name="(line346)"></a><a name="definite"></a><font color=Blue>-- | not sure this is needed now.   'definite p' previously ensured that</font>
-<a name="(line347)"></a><font color=Blue>--   an element was definitely present.  Now I think the monad might take</font>
-<a name="(line348)"></a><font color=Blue>--   care of that for us.</font>
-<a name="(line349)"></a>definite <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> XMLParser a <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> XMLParser a
-<a name="(line350)"></a>definite p inner tag <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>cs<font color=Red>-&gt;</font> <font color=Green><u>case</u></font> runParser p cs <font color=Green><u>of</u></font>
-<a name="(line351)"></a>                                   <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> cs'<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>msg'<font color=Cyan>)</font><font color=Cyan>,</font> cs'<font color=Cyan>)</font>
-<a name="(line352)"></a>                                   <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs'<font color=Cyan>)</font>  <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right x<font color=Cyan>,</font>   cs'<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line353)"></a>  <font color=Green><u>where</u></font> msg' <font color=Red>=</font> <font color=Magenta>"content error: expected "</font><font color=Cyan>++</font>inner<font color=Cyan>++</font><font color=Magenta>" inside &lt;"</font><font color=Cyan>++</font>tag
-<a name="(line354)"></a>               <font color=Cyan>++</font><font color=Magenta>"&gt; element\n"</font>
-<a name="(line355)"></a>
-<a name="(line356)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line357)"></a>
-<a name="(line358)"></a><a name="XmlContent"></a><font color=Blue>-- | The @XmlContent@ class promises that an XML Content element can be</font>
-<a name="(line359)"></a><a name="XmlContent"></a><font color=Blue>--   converted to and from a Haskell value.</font>
-<a name="(line360)"></a><a name="XmlContent"></a><font color=Green><u>class</u></font> HTypeable a <font color=Red>=&gt;</font> XmlContent a <font color=Green><u>where</u></font>
-<a name="(line361)"></a>    <font color=Blue>-- | Convert from XML to Haskell</font>
-<a name="(line362)"></a>    parseContents <font color=Red>::</font> XMLParser a
-<a name="(line363)"></a>    <font color=Blue>-- | Convert from Haskell to XML</font>
-<a name="(line364)"></a>    toContents    <font color=Red>::</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>
-<a name="(line365)"></a>
-<a name="(line366)"></a>    <font color=Blue>-- | Dummy functions (for most types): used /only/ in the Char instance</font>
-<a name="(line367)"></a>    <font color=Blue>--   for coercing lists of Char into String.</font>
-<a name="(line368)"></a>    xToChar       <font color=Red>::</font> a <font color=Red>-&gt;</font> Char
-<a name="(line369)"></a>    xFromChar     <font color=Red>::</font> Char <font color=Red>-&gt;</font> a
-<a name="(line370)"></a>    xToChar        <font color=Red>=</font> error <font color=Magenta>"HaXml.XmlContent.xToChar used in error"</font>
-<a name="(line371)"></a>    xFromChar      <font color=Red>=</font> error <font color=Magenta>"HaXml.XmlContent.xFromChar used in error"</font>
-<a name="(line372)"></a>
-<a name="(line373)"></a><a name="XmlAttributes"></a><font color=Blue>-- | The @XmlAttributes@ class promises that a list of XML tag attributes</font>
-<a name="(line374)"></a><a name="XmlAttributes"></a><font color=Blue>--   can be converted to and from a Haskell value.</font>
-<a name="(line375)"></a><a name="XmlAttributes"></a><font color=Green><u>class</u></font> XmlAttributes a <font color=Green><u>where</u></font>
-<a name="(line376)"></a>    fromAttrs <font color=Red>::</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> a
-<a name="(line377)"></a>    toAttrs   <font color=Red>::</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font>
-<a name="(line378)"></a><a name="XmlAttrType"></a><font color=Blue>-- | The @XmlAttrType@ class promises that an attribute taking an XML</font>
-<a name="(line379)"></a><a name="XmlAttrType"></a><font color=Blue>--   enumerated type can be converted to and from a Haskell value.</font>
-<a name="(line380)"></a><a name="XmlAttrType"></a><font color=Green><u>class</u></font> XmlAttrType a <font color=Green><u>where</u></font>
-<a name="(line381)"></a>    fromAttrToTyp <font color=Red>::</font> String <font color=Red>-&gt;</font> Attribute <font color=Red>-&gt;</font> Maybe a
-<a name="(line382)"></a>    toAttrFrTyp   <font color=Red>::</font> String <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Maybe Attribute
-<a name="(line383)"></a>
-<a name="(line384)"></a>
-<a name="(line385)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line386)"></a><font color=Blue>-- Instances for all the standard basic datatypes.</font>
-<a name="(line387)"></a><font color=Blue>-- These are for Haskell datatypes being derived to go to XML.</font>
-<a name="(line388)"></a><font color=Blue>-- DtdToHaskell does not use these instances.</font>
-<a name="(line389)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line390)"></a>
-<a name="(line391)"></a><font color=Green><u>instance</u></font> XmlContent Bool <font color=Green><u>where</u></font>
-<a name="(line392)"></a>    toContents b   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"bool"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show b<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>
-<a name="(line393)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"bool"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line394)"></a>    
-<a name="(line395)"></a><font color=Green><u>instance</u></font> XmlContent Int <font color=Green><u>where</u></font>
-<a name="(line396)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"int"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>
-<a name="(line397)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"int"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line398)"></a>
-<a name="(line399)"></a><font color=Green><u>instance</u></font> XmlContent Integer <font color=Green><u>where</u></font>
-<a name="(line400)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"integer"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>
-<a name="(line401)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"integer"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line402)"></a>    
-<a name="(line403)"></a><font color=Green><u>instance</u></font> XmlContent Float <font color=Green><u>where</u></font>
-<a name="(line404)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"float"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>
-<a name="(line405)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"float"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line406)"></a>
-<a name="(line407)"></a><font color=Green><u>instance</u></font> XmlContent Double <font color=Green><u>where</u></font>
-<a name="(line408)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"double"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>
-<a name="(line409)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"double"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line410)"></a>
-<a name="(line411)"></a><font color=Green><u>instance</u></font> XmlContent Char <font color=Green><u>where</u></font>
-<a name="(line412)"></a>    <font color=Blue>-- NOT in a string</font>
-<a name="(line413)"></a>    toContents c   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"char"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Red>[</font>c<font color=Red>]</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>
-<a name="(line414)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"value"</font><font color=Cyan>,</font><font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Red>[</font>c<font color=Red>]</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font>
-<a name="(line415)"></a>                             <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"char"</font><font color=Red>]</font>
-<a name="(line416)"></a>                       <font color=Cyan>;</font> return c
-<a name="(line417)"></a>                       <font color=Cyan>}</font>
-<a name="(line418)"></a>    <font color=Blue>-- Only defined for Char and no other types:</font>
-<a name="(line419)"></a>    xToChar   <font color=Red>=</font> id
-<a name="(line420)"></a>    xFromChar <font color=Red>=</font> id
-<a name="(line421)"></a>
-<a name="(line422)"></a><font color=Green><u>instance</u></font> XmlContent a <font color=Red>=&gt;</font> XmlContent <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>where</u></font>
-<a name="(line423)"></a>    toContents xs  <font color=Red>=</font> <font color=Green><u>case</u></font> toHType x <font color=Green><u>of</u></font>
-<a name="(line424)"></a>                       <font color=Cyan>(</font>Prim <font color=Magenta>"Char"</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font>
-<a name="(line425)"></a>                            <font color=Red>[</font>mkElem <font color=Magenta>"string"</font> <font color=Red>[</font>CString True <font color=Cyan>(</font>map xToChar xs<font color=Cyan>)</font> ()<font color=Red>]</font><font color=Red>]</font>
-<a name="(line426)"></a>                       <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Red>[</font>mkElem xs <font color=Cyan>(</font>concatMap toContents xs<font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line427)"></a>                   <font color=Green><u>where</u></font>   <font color=Cyan>(</font>x<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xs
-<a name="(line428)"></a>    parseContents <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>x <font color=Red>-&gt;</font>
-<a name="(line429)"></a>        <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>
-<a name="(line430)"></a>            <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>
-<a name="(line431)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>map xFromChar s<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>
-<a name="(line432)"></a>            <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"string"</font> [] <font color=Red>[</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Red>]</font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>
-<a name="(line433)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>map xFromChar s<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>
-<a name="(line434)"></a>            <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem e [] xs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>|</font> <font color=Magenta>"list"</font> <font color=Cyan>`isPrefixOf`</font> e
-<a name="(line435)"></a>                   <font color=Red>-&gt;</font> scanElements xs
-<a name="(line436)"></a>                   <font color=Green><u>where</u></font>
-<a name="(line437)"></a>                  <font color=Blue>-- scanElements :: [Content] -&gt; (Either String [a],[Content])</font>
-<a name="(line438)"></a>                     scanElements [] <font color=Red>=</font> <font color=Cyan>(</font>Right []<font color=Cyan>,</font> cs<font color=Cyan>)</font>
-<a name="(line439)"></a>                     scanElements es <font color=Red>=</font>
-<a name="(line440)"></a>                        <font color=Green><u>case</u></font> runParser parseContents es <font color=Green><u>of</u></font>
-<a name="(line441)"></a>                            <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> es'<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>msg<font color=Cyan>)</font><font color=Cyan>,</font> es'<font color=Cyan>)</font>
-<a name="(line442)"></a>                            <font color=Cyan>(</font>Right x<font color=Cyan>,</font> es'<font color=Cyan>)</font> <font color=Red>-&gt;</font>
-<a name="(line443)"></a>                                <font color=Green><u>case</u></font> scanElements es' <font color=Green><u>of</u></font>
-<a name="(line444)"></a>                                    <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> cs<font color=Cyan>)</font>
-<a name="(line445)"></a>                                    <font color=Cyan>(</font>Right xs<font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>
-<a name="(line446)"></a>            <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem e <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> cs<font color=Cyan>)</font>
-<a name="(line447)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False
-<a name="(line448)"></a>                            <font color=Cyan>,</font><font color=Magenta>"Expected a &lt;list-...&gt;, but found a &lt;"</font><font color=Cyan>++</font>e<font color=Cyan>++</font><font color=Magenta>"&gt; at\n"</font>
-<a name="(line449)"></a>                            <font color=Cyan>++</font> show pos<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>
-<a name="(line450)"></a>            <font color=Cyan>(</font>CRef r pos<font color=Red><b>:</b></font> cs<font color=Cyan>)</font>
-<a name="(line451)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False
-<a name="(line452)"></a>                            <font color=Cyan>,</font><font color=Magenta>"Expected a &lt;list-...&gt;, but found a ref "</font>
-<a name="(line453)"></a>                            <font color=Cyan>++</font>verbatim r<font color=Cyan>++</font><font color=Magenta>" at\n"</font><font color=Cyan>++</font> show pos<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>
-<a name="(line454)"></a>            <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>P p<font color=Cyan>)</font><font color=Red>-&gt;</font> p<font color=Cyan>)</font> parseContents<font color=Cyan>)</font> cs  <font color=Blue>-- skip comments etc.</font>
-<a name="(line455)"></a>            []     <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False
-<a name="(line456)"></a>                            <font color=Cyan>,</font><font color=Magenta>"Ran out of input XML whilst secondary parsing"</font><font color=Cyan>)</font>
-<a name="(line457)"></a>                      <font color=Cyan>,</font> []<font color=Cyan>)</font>
-<a name="(line458)"></a>        <font color=Cyan>)</font>
-<a name="(line459)"></a>
-<a name="(line460)"></a><font color=Green><u>instance</u></font> XmlContent () <font color=Green><u>where</u></font>
-<a name="(line461)"></a>    toContents ()  <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"unit"</font> [] []<font color=Cyan>)</font> ()<font color=Red>]</font>
-<a name="(line462)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> element <font color=Red>[</font><font color=Magenta>"unit"</font><font color=Red>]</font><font color=Cyan>;</font> return () <font color=Cyan>}</font>
-<a name="(line463)"></a>
-<a name="(line464)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line465)"></a>    toContents <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b
-<a name="(line466)"></a>    parseContents    <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line467)"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
-<a name="(line468)"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
-<a name="(line469)"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font>
-<a name="(line470)"></a>        <font color=Cyan>}</font>
-<a name="(line471)"></a>
-<a name="(line472)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line473)"></a>    toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z
-<a name="(line474)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line475)"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
-<a name="(line476)"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
-<a name="(line477)"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
-<a name="(line478)"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font>
-<a name="(line479)"></a>        <font color=Cyan>}</font>
-<a name="(line480)"></a>
-<a name="(line481)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line482)"></a>    toContents m   <font color=Red>=</font> <font color=Red>[</font>mkElem m <font color=Cyan>(</font>maybe [] toContents m<font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line483)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line484)"></a>        <font color=Cyan>{</font> e <font color=Red>&lt;-</font> elementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Red>[</font><font color=Magenta>"maybe"</font><font color=Red>]</font>
-<a name="(line485)"></a>        <font color=Cyan>;</font> <font color=Green><u>case</u></font> e <font color=Green><u>of</u></font> <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> [] []<font color=Cyan>)</font> <font color=Red>-&gt;</font> return Nothing
-<a name="(line486)"></a>                    <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> [] <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> fmap Just <font color=Cyan>(</font>interior e parseContents<font color=Cyan>)</font>
-<a name="(line487)"></a>        <font color=Cyan>}</font>
-<a name="(line488)"></a>
-<a name="(line489)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>Either a b<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line490)"></a>    toContents v<font color=Red>@</font><font color=Cyan>(</font>Left aa<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line491)"></a>        <font color=Red>[</font>mkElemC <font color=Cyan>(</font>showConstr <font color=Magenta>0</font> <font color=Cyan>(</font>toHType v<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>toContents aa<font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line492)"></a>    toContents v<font color=Red>@</font><font color=Cyan>(</font>Right ab<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line493)"></a>        <font color=Red>[</font>mkElemC <font color=Cyan>(</font>showConstr <font color=Magenta>1</font> <font color=Cyan>(</font>toHType v<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>toContents ab<font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line494)"></a>    parseContents <font color=Red>=</font>
-<a name="(line495)"></a>        <font color=Cyan>(</font>inElementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Magenta>"Left"</font>  <font color=Cyan>$</font> fmap Left  parseContents<font color=Cyan>)</font>
-<a name="(line496)"></a>          <font color=Cyan>`onFail`</font>
-<a name="(line497)"></a>        <font color=Cyan>(</font>inElementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Magenta>"Right"</font> <font color=Cyan>$</font> fmap Right parseContents<font color=Cyan>)</font>
-<a name="(line498)"></a>
-<a name="(line499)"></a><font color=Blue>--    do{ e@(Elem t [] _) &lt;- element ["Left","Right"]</font>
-<a name="(line500)"></a><font color=Blue>--      ; case t of</font>
-<a name="(line501)"></a><font color=Blue>--          _ | "Left"  `isPrefixOf` t -&gt; fmap Left  (interior e parseContents)</font>
-<a name="(line502)"></a><font color=Blue>--            | "Right" `isPrefixOf` t -&gt; fmap Right (interior e parseContents)</font>
-<a name="(line503)"></a><font color=Blue>--      }</font>
-<a name="(line504)"></a>
-<a name="(line505)"></a>
-<a name="(line506)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line507)"></a><font color=Blue>-- Useful auxiliaries for "fromAttributes" </font>
-<a name="(line508)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line509)"></a>
-<a name="(line510)"></a><a name="Defaultable"></a><font color=Blue>-- | If an attribute is defaultable, then it either takes the default</font>
-<a name="(line511)"></a><a name="Defaultable"></a><font color=Blue>--   value (which is omitted from the output), or a non-default value</font>
-<a name="(line512)"></a><a name="Defaultable"></a><font color=Blue>--   (which obviously must be printed).</font>
-<a name="(line513)"></a><a name="Defaultable"></a><font color=Green><u>data</u></font> Defaultable a  <font color=Red>=</font> Default a    <font color=Red>|</font> NonDefault a    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line514)"></a>
-<a name="(line515)"></a><a name="searchMaybe"></a>searchMaybe <font color=Red>::</font> <font color=Cyan>(</font>a <font color=Red>-&gt;</font> Maybe b<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> Maybe b
-<a name="(line516)"></a>searchMaybe f [] <font color=Red>=</font> Nothing
-<a name="(line517)"></a>searchMaybe f <font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line518)"></a>    <font color=Green><u>let</u></font> fx <font color=Red>=</font> f x <font color=Green><u>in</u></font>
-<a name="(line519)"></a>    <font color=Green><u>case</u></font> fx <font color=Green><u>of</u></font>
-<a name="(line520)"></a>      Nothing  <font color=Red>-&gt;</font> searchMaybe f xs
-<a name="(line521)"></a>      <font color=Cyan>(</font>Just <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> fx
-<a name="(line522)"></a>
-<a name="(line523)"></a><a name="maybeToAttr"></a>maybeToAttr <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>a<font color=Red>-&gt;</font>Maybe Attribute<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Maybe a
-<a name="(line524)"></a>               <font color=Red>-&gt;</font> Maybe Attribute
-<a name="(line525)"></a>maybeToAttr to n Nothing  <font color=Red>=</font> Nothing
-<a name="(line526)"></a>maybeToAttr to n <font color=Cyan>(</font>Just v<font color=Cyan>)</font> <font color=Red>=</font> to n v
-<a name="(line527)"></a>
-<a name="(line528)"></a><a name="defaultToAttr"></a>defaultToAttr <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>a<font color=Red>-&gt;</font>Maybe Attribute<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Defaultable a
-<a name="(line529)"></a>                 <font color=Red>-&gt;</font> Maybe Attribute
-<a name="(line530)"></a>defaultToAttr to n <font color=Cyan>(</font>Default v<font color=Cyan>)</font>  <font color=Red>=</font> Nothing
-<a name="(line531)"></a>defaultToAttr to n <font color=Cyan>(</font>NonDefault v<font color=Cyan>)</font> <font color=Red>=</font> to n v
-<a name="(line532)"></a>
-<a name="(line533)"></a><a name="definiteA"></a>definiteA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Attribute<font color=Red>-&gt;</font>Maybe a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> String
-<a name="(line534)"></a>             <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> a
-<a name="(line535)"></a>definiteA from tag at <font color=Green><u>as</u></font> <font color=Red>=</font>
-<a name="(line536)"></a>    <font color=Green><u>case</u></font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font> <font color=Green><u>of</u></font>
-<a name="(line537)"></a>      Nothing  <font color=Red>-&gt;</font> error <font color=Cyan>(</font><font color=Magenta>"missing attribute "</font><font color=Cyan>++</font>at<font color=Cyan>++</font><font color=Magenta>" in tag &lt;"</font><font color=Cyan>++</font>tag<font color=Cyan>++</font><font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
-<a name="(line538)"></a>      <font color=Cyan>(</font>Just a<font color=Cyan>)</font> <font color=Red>-&gt;</font> a
-<a name="(line539)"></a>
-<a name="(line540)"></a><a name="defaultA"></a>defaultA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Attribute<font color=Red>-&gt;</font>Maybe a<font color=Cyan>)</font> <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> String
-<a name="(line541)"></a>            <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> Defaultable a
-<a name="(line542)"></a>defaultA from def at <font color=Green><u>as</u></font> <font color=Red>=</font>
-<a name="(line543)"></a>    <font color=Green><u>case</u></font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font> <font color=Green><u>of</u></font>
-<a name="(line544)"></a>      Nothing  <font color=Red>-&gt;</font> Default def
-<a name="(line545)"></a>      <font color=Cyan>(</font>Just a<font color=Cyan>)</font> <font color=Red>-&gt;</font> NonDefault a
-<a name="(line546)"></a>
-<a name="(line547)"></a><a name="possibleA"></a>possibleA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Attribute<font color=Red>-&gt;</font>Maybe a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> Maybe a
-<a name="(line548)"></a>possibleA from at <font color=Green><u>as</u></font> <font color=Red>=</font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font>
-<a name="(line549)"></a>
-<a name="(line550)"></a><a name="fromAttrToStr"></a>fromAttrToStr <font color=Red>::</font> String <font color=Red>-&gt;</font> Attribute <font color=Red>-&gt;</font> Maybe String
-<a name="(line551)"></a>fromAttrToStr n <font color=Cyan>(</font>n0<font color=Cyan>,</font>v<font color=Cyan>)</font>
-<a name="(line552)"></a>        <font color=Red>|</font> n <font color=Cyan>==</font> n0   <font color=Red>=</font> Just <font color=Cyan>(</font>attr2str v<font color=Cyan>)</font>
-<a name="(line553)"></a>        <font color=Red>|</font> otherwise <font color=Red>=</font> Nothing
-<a name="(line554)"></a>
-<a name="(line555)"></a><a name="toAttrFrStr"></a>toAttrFrStr   <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Maybe Attribute
-<a name="(line556)"></a>toAttrFrStr n v <font color=Red>=</font> Just <font color=Cyan>(</font>n<font color=Cyan>,</font> str2attr v<font color=Cyan>)</font>
-<a name="(line557)"></a>
-<a name="(line558)"></a><a name="str2attr"></a>str2attr <font color=Red>::</font> String <font color=Red>-&gt;</font> AttValue
-<a name="(line559)"></a>str2attr s <font color=Red>=</font>
-<a name="(line560)"></a>    <font color=Green><u>let</u></font> f s <font color=Red>=</font>
-<a name="(line561)"></a>          <font color=Green><u>let</u></font> <font color=Cyan>(</font>l<font color=Cyan>,</font>r<font color=Cyan>)</font> <font color=Red>=</font> span <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font> not <font color=Cyan>(</font>elem c <font color=Magenta>"\"&amp;&lt;&gt;'"</font><font color=Cyan>)</font><font color=Cyan>)</font> s
-<a name="(line562)"></a>          <font color=Green><u>in</u></font> <font color=Green><u>if</u></font> null r <font color=Green><u>then</u></font> <font color=Red>[</font>Left l<font color=Red>]</font>
-<a name="(line563)"></a>             <font color=Green><u>else</u></font> Left l<font color=Red><b>:</b></font> Right <font color=Cyan>(</font>g <font color=Cyan>(</font>head r<font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font> f <font color=Cyan>(</font>tail r<font color=Cyan>)</font>
-<a name="(line564)"></a>        g <font color=Magenta>'"'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"quot"</font>
-<a name="(line565)"></a>        g <font color=Magenta>'&amp;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"amp"</font>
-<a name="(line566)"></a>        g <font color=Magenta>'&lt;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"lt"</font>
-<a name="(line567)"></a>        g <font color=Magenta>'&gt;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"gt"</font>
-<a name="(line568)"></a>        g <font color=Magenta>'\''</font> <font color=Red>=</font> RefEntity <font color=Magenta>"apos"</font>
-<a name="(line569)"></a>    <font color=Green><u>in</u></font> AttValue <font color=Cyan>(</font>f s<font color=Cyan>)</font>
-<a name="(line570)"></a>
-<a name="(line571)"></a><a name="attr2str"></a>attr2str <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> String          <font color=Blue>-- really needs symbol table</font>
-<a name="(line572)"></a>attr2str <font color=Cyan>(</font>AttValue xs<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line573)"></a>    <font color=Green><u>let</u></font> f <font color=Cyan>(</font>Left s<font color=Cyan>)</font> <font color=Red>=</font> s
-<a name="(line574)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefChar i<font color=Cyan>)</font><font color=Cyan>)</font>        <font color=Red>=</font> <font color=Red>[</font>chr i<font color=Red>]</font>
-<a name="(line575)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"quot"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"\""</font>
-<a name="(line576)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"amp"</font><font color=Cyan>)</font><font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"&amp;"</font>
-<a name="(line577)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"lt"</font><font color=Cyan>)</font><font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&lt;"</font>
-<a name="(line578)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"gt"</font><font color=Cyan>)</font><font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&gt;"</font>
-<a name="(line579)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"apos"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"'"</font>
-<a name="(line580)"></a>        f <font color=Cyan>(</font>Right <font color=Green><u>_</u></font><font color=Cyan>)</font>                  <font color=Red>=</font> <font color=Magenta>"*"</font>  <font color=Blue>-- Ooops, ST needed here.</font>
-<a name="(line581)"></a>    <font color=Green><u>in</u></font> concatMap f xs
-<a name="(line582)"></a>
-<a name="(line583)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line584)"></a><font color=Blue>--  New content-model types</font>
-<a name="(line585)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line586)"></a>
-<a name="(line587)"></a><font color=Blue>{-
-<a name="(line588)"></a>data OneOf2 a b
-<a name="(line589)"></a>data OneOf3 a b c
-<a name="(line590)"></a>data OneOf4 a b c d
-<a name="(line591)"></a>    ... etc are now defined (with instances) in module OneOfN.
-<a name="(line592)"></a>-}</font>
-<a name="(line593)"></a>
-<a name="(line594)"></a><a name="ANYContent"></a><font color=Blue>-- | A type corresponding to XML's ANY contentspec. </font>
-<a name="(line595)"></a><a name="ANYContent"></a><font color=Blue>--   It is either a list of unconverted xml 'Content' </font>
-<a name="(line596)"></a><a name="ANYContent"></a><font color=Blue>--   or some 'XmlContent'-able value.</font>
-<a name="(line597)"></a><a name="ANYContent"></a><font color=Blue>--</font>
-<a name="(line598)"></a><a name="ANYContent"></a><font color=Blue>-- Parsing functions (e.g. 'parseContents') will always produce 'UnConverted'.</font>
-<a name="(line599)"></a><a name="ANYContent"></a><font color=Blue>-- Note: The Show instance for 'UnConverted' uses 'verbatim'.</font>
-<a name="(line600)"></a><a name="ANYContent"></a><font color=Green><u>data</u></font> ANYContent <font color=Red>=</font> <font color=Green><u>forall</u></font> a <font color=Cyan>.</font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> Show a<font color=Cyan>)</font> <font color=Red>=&gt;</font> ANYContent a
-<a name="(line601)"></a>                <font color=Red>|</font> UnConverted <font color=Red>[</font>Content Posn<font color=Red>]</font>
-<a name="(line602)"></a>
-<a name="(line603)"></a><font color=Green><u>instance</u></font> Show ANYContent <font color=Green><u>where</u></font>
-<a name="(line604)"></a>    show <font color=Cyan>(</font>UnConverted c<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"UnConverted "</font> <font color=Cyan>++</font> <font color=Cyan>(</font>show <font color=Cyan>$</font> map verbatim c<font color=Cyan>)</font>
-<a name="(line605)"></a>    show <font color=Cyan>(</font>ANYContent a<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"ANYContent "</font> <font color=Cyan>++</font> <font color=Cyan>(</font>show a<font color=Cyan>)</font>
-<a name="(line606)"></a>
-<a name="(line607)"></a><font color=Green><u>instance</u></font> Eq ANYContent <font color=Green><u>where</u></font>
-<a name="(line608)"></a>    a <font color=Cyan>==</font> b <font color=Red>=</font> show a <font color=Cyan>==</font> show b
-<a name="(line609)"></a>
-<a name="(line610)"></a><a name="List1"></a><font color=Blue>-- | The List1 type represents lists with at least one element.</font>
-<a name="(line611)"></a><a name="List1"></a><font color=Blue>--   It is required for DTD content models that use + as a modifier.</font>
-<a name="(line612)"></a><a name="List1"></a><font color=Green><u>data</u></font> List1 a <font color=Red>=</font> NonEmpty <font color=Red>[</font>a<font color=Red>]</font>  <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font> Show<font color=Cyan>)</font>
-<a name="(line613)"></a>
-<a name="(line614)"></a>
-<a name="(line615)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line616)"></a><font color=Blue>--  Instances for new content-model types</font>
-<a name="(line617)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line618)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>)</font> <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>List1 a<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line619)"></a>    toHType m  <font color=Red>=</font> Defined <font color=Magenta>"List1"</font> <font color=Red>[</font>hx<font color=Red>]</font>
-<a name="(line620)"></a>                         <font color=Red>[</font>Constr <font color=Magenta>"NonEmpty"</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Red>[</font>List hx<font color=Red>]</font> <font color=Blue>{-Nothing-}</font><font color=Red>]</font>
-<a name="(line621)"></a>               <font color=Green><u>where</u></font> <font color=Cyan>(</font>NonEmpty x<font color=Cyan>)</font> <font color=Red>=</font> m
-<a name="(line622)"></a>                     hx <font color=Red>=</font> toHType x
-<a name="(line623)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>List1 a<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line624)"></a>    toContents <font color=Cyan>(</font>NonEmpty xs<font color=Cyan>)</font> <font color=Red>=</font> concatMap toContents xs
-<a name="(line625)"></a>    parseContents <font color=Red>=</font> fmap NonEmpty <font color=Cyan>$</font> many1 parseContents
-<a name="(line626)"></a>
-<a name="(line627)"></a><font color=Green><u>instance</u></font> HTypeable ANYContent <font color=Green><u>where</u></font>
-<a name="(line628)"></a>    toHType <font color=Green><u>_</u></font>      <font color=Red>=</font> Prim <font color=Magenta>"ANYContent"</font> <font color=Magenta>"ANY"</font>
-<a name="(line629)"></a><font color=Green><u>instance</u></font> XmlContent ANYContent <font color=Green><u>where</u></font>
-<a name="(line630)"></a>    toContents <font color=Cyan>(</font>ANYContent a<font color=Cyan>)</font>  <font color=Red>=</font> toContents a
-<a name="(line631)"></a>    toContents <font color=Cyan>(</font>UnConverted s<font color=Cyan>)</font> <font color=Red>=</font> map <font color=Cyan>(</font>fmap <font color=Cyan>(</font>const ()<font color=Cyan>)</font><font color=Cyan>)</font> s
-<a name="(line632)"></a>    parseContents <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>cs <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>UnConverted cs<font color=Cyan>)</font><font color=Cyan>,</font> []<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line633)"></a>
-<a name="(line634)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line635)"></a><font color=Blue>--  </font>
-<a name="(line636)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<pre><a name="(line1)"></a><font color=Blue>{-# LANGUAGE ExistentialQuantification #-}</font>
+<a name="(line2)"></a>
+<a name="(line3)"></a><font color=Blue>-- | The class 'XmlContent' is a kind of replacement for Read and Show:</font>
+<a name="(line4)"></a><font color=Blue>--   it provides conversions between a generic XML tree representation</font>
+<a name="(line5)"></a><font color=Blue>--   and your own more specialised typeful Haskell data trees.</font>
+<a name="(line6)"></a><font color=Blue>--</font>
+<a name="(line7)"></a><font color=Blue>--   If you are starting with a set of Haskell datatypes, use DrIFT to</font>
+<a name="(line8)"></a><font color=Blue>--   derive instances of this class for you:</font>
+<a name="(line9)"></a><font color=Blue>--       http:\/\/repetae.net\/john\/computer\/haskell\/DrIFT</font>
+<a name="(line10)"></a><font color=Blue>--   If you are starting with an XML DTD, use HaXml's tool DtdToHaskell</font>
+<a name="(line11)"></a><font color=Blue>--   to generate both the Haskell types and the corresponding instances.</font>
+<a name="(line12)"></a><font color=Blue>--</font>
+<a name="(line13)"></a><font color=Blue>--   This unified class interface replaces two previous (somewhat similar)</font>
+<a name="(line14)"></a><font color=Blue>--   classes: Haskell2Xml and Xml2Haskell.  There was no real reason to have</font>
+<a name="(line15)"></a><font color=Blue>--   separate classes depending on how you originally defined your datatypes.</font>
+<a name="(line16)"></a>
+<a name="(line17)"></a><font color=Blue>--   The methods 'toContents' and 'parseContents' convert a value to and from</font>
+<a name="(line18)"></a><font color=Blue>--   a generic internal representation of an XML document /without/ a DTD.</font>
+<a name="(line19)"></a><font color=Blue>--   The functions 'toXml' and 'fromXml' convert a value to and from a generic</font>
+<a name="(line20)"></a><font color=Blue>--   internal representation of an XML document /including/ a DTD.</font>
+<a name="(line21)"></a><font color=Blue>--   The functions 'readXml' and 'showXml' convert to and from Strings.</font>
+<a name="(line22)"></a><font color=Blue>--   The functions 'fReadXml' and 'fWriteXml' do the conversion to and from</font>
+<a name="(line23)"></a><font color=Blue>--   the given filenames.</font>
+<a name="(line24)"></a><font color=Blue>--   The functions 'hGetXml' and 'hPutXml' do the conversion to and from</font>
+<a name="(line25)"></a><font color=Blue>--   the given file handles.</font>
+<a name="(line26)"></a><font color=Blue>--   (See the type signatures.)</font>
+<a name="(line27)"></a><font color=Blue>--</font>
+<a name="(line28)"></a>
+<a name="(line29)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent
+<a name="(line30)"></a>  <font color=Cyan>(</font> <font color=Blue>-- * Re-export the relevant set of generic XML document type definitions</font>
+<a name="(line31)"></a>    Document<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="(line32)"></a>  <font color=Cyan>,</font> Element<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="(line33)"></a>  <font color=Cyan>,</font> ElemTag<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="(line34)"></a>  <font color=Cyan>,</font> Content<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="(line35)"></a>  <font color=Cyan>,</font> Attribute()
+<a name="(line36)"></a>  <font color=Cyan>,</font> AttValue<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="(line37)"></a>  <font color=Cyan>,</font> Prolog<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="(line38)"></a>  <font color=Cyan>,</font> Reference<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="(line39)"></a>  <font color=Blue>-- * The enabling classes, that define parsing\/unparsing between Haskell</font>
+<a name="(line40)"></a>  <font color=Blue>--   datatypes and a generic XML representation.</font>
+<a name="(line41)"></a>  <font color=Cyan>,</font> XmlContent<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="(line42)"></a>  <font color=Cyan>,</font> XmlAttributes<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="(line43)"></a>  <font color=Cyan>,</font> XmlAttrType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="(line44)"></a>  <font color=Blue>-- ** Auxiliaries for writing parsers in the XmlContent class</font>
+<a name="(line45)"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly
+<a name="(line46)"></a>  <font color=Cyan>,</font> XMLParser
+<a name="(line47)"></a>  <font color=Cyan>,</font> content<font color=Cyan>,</font> posnElement<font color=Cyan>,</font> element<font color=Cyan>,</font> interior<font color=Cyan>,</font> inElement<font color=Cyan>,</font> text<font color=Cyan>,</font> attributes
+<a name="(line48)"></a>  <font color=Cyan>,</font> posnElementWith<font color=Cyan>,</font> elementWith<font color=Cyan>,</font> inElementWith
+<a name="(line49)"></a>  <font color=Cyan>,</font> choice<font color=Cyan>,</font> definite <font color=Blue>-- ???</font>
+<a name="(line50)"></a>  <font color=Blue>-- ** Auxiliaries for generating in the XmlContent class</font>
+<a name="(line51)"></a>  <font color=Cyan>,</font> mkElem<font color=Cyan>,</font> mkElemC<font color=Cyan>,</font> mkAttr
+<a name="(line52)"></a>  <font color=Cyan>,</font> toText<font color=Cyan>,</font> toCData
+<a name="(line53)"></a>  <font color=Blue>-- ** Auxiliaries for the attribute-related classes</font>
+<a name="(line54)"></a>  <font color=Cyan>,</font> maybeToAttr<font color=Cyan>,</font> defaultToAttr
+<a name="(line55)"></a>  <font color=Cyan>,</font> definiteA<font color=Cyan>,</font> defaultA<font color=Cyan>,</font> possibleA<font color=Cyan>,</font> fromAttrToStr<font color=Cyan>,</font> toAttrFrStr
+<a name="(line56)"></a>  <font color=Cyan>,</font> Defaultable<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="(line57)"></a>  <font color=Cyan>,</font> str2attr<font color=Cyan>,</font> attr2str<font color=Cyan>,</font> attval
+<a name="(line58)"></a>  <font color=Cyan>,</font> catMaybes   <font color=Blue>-- re-exported from Maybe</font>
+<a name="(line59)"></a>  <font color=Blue>-- * Whole-document conversion functions</font>
+<a name="(line60)"></a>  <font color=Cyan>,</font> toXml<font color=Cyan>,</font> fromXml
+<a name="(line61)"></a>  <font color=Cyan>,</font> readXml<font color=Cyan>,</font> showXml<font color=Cyan>,</font> fpsShowXml
+<a name="(line62)"></a>  <font color=Cyan>,</font> fReadXml<font color=Cyan>,</font> fWriteXml<font color=Cyan>,</font> fpsWriteXml
+<a name="(line63)"></a>  <font color=Cyan>,</font> hGetXml<font color=Cyan>,</font>  hPutXml<font color=Cyan>,</font> fpsHPutXml
+<a name="(line64)"></a>  <font color=Blue>-- * Explicit representation of Haskell datatype information</font>
+<a name="(line65)"></a>  <font color=Blue>--   (for conversion to a DTD)</font>
+<a name="(line66)"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping
+<a name="(line67)"></a>  <font color=Blue>-- * Types useful for some content models</font>
+<a name="(line68)"></a>  <font color=Cyan>,</font> List1<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="(line69)"></a>  <font color=Cyan>,</font> ANYContent<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="(line70)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line71)"></a>
+<a name="(line72)"></a><font color=Green><u>import</u></font> IO
+<a name="(line73)"></a><font color=Green><u>import</u></font> Maybe <font color=Cyan>(</font>catMaybes<font color=Cyan>)</font>
+<a name="(line74)"></a><font color=Green><u>import</u></font> Char  <font color=Cyan>(</font>chr<font color=Cyan>,</font> isSpace<font color=Cyan>)</font>
+<a name="(line75)"></a><font color=Green><u>import</u></font> List  <font color=Cyan>(</font>isPrefixOf<font color=Cyan>,</font> isSuffixOf<font color=Cyan>)</font>
+<a name="(line76)"></a>
+<a name="(line77)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ <font color=Cyan>(</font>render<font color=Cyan>)</font>
+<a name="(line78)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty <font color=Green><u>as</u></font> PP
+<a name="(line79)"></a>
+<a name="(line80)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
+<a name="(line81)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping
+<a name="(line82)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn     <font color=Cyan>(</font>Posn<font color=Cyan>,</font> posInNewCxt<font color=Cyan>)</font>
+<a name="(line83)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty   <font color=Cyan>(</font>document<font color=Cyan>)</font>
+<a name="(line84)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse    <font color=Cyan>(</font>xmlParse<font color=Cyan>)</font>
+<a name="(line85)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim <font color=Cyan>(</font>Verbatim<font color=Cyan>(</font>verbatim<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line86)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ByteStringPP <font color=Green><u>as</u></font> FPS <font color=Cyan>(</font>document<font color=Cyan>)</font>
+<a name="(line87)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8 <font color=Green><u>as</u></font> FPS
+<a name="(line88)"></a>
+<a name="(line89)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly
+<a name="(line90)"></a>
+<a name="(line91)"></a><font color=Blue>--  #define DEBUG</font>
+<a name="(line92)"></a>
+<a name="(line93)"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>
+<a name="(line94)"></a><font color=Green><u>import</u></font> Debug<font color=Cyan>.</font>Trace<font color=Cyan>(</font>trace<font color=Cyan>)</font>
+<a name="(line95)"></a><a name="debug"></a>debug <font color=Red>::</font> a <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> a
+<a name="(line96)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> s <font color=Red>=</font> trace s v
+<a name="(line97)"></a><font color=Magenta><em>#else</em></font>
+<a name="(line98)"></a>debug <font color=Red>::</font> t <font color=Red>-&gt;</font> t1 <font color=Red>-&gt;</font> t
+<a name="(line99)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> <font color=Green><u>_</u></font> <font color=Red>=</font> v
+<a name="(line100)"></a><font color=Magenta><em>#endif</em></font>
+<a name="(line101)"></a>
+<a name="(line102)"></a>
+<a name="(line103)"></a><a name="attval"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line104)"></a><font color=Blue>-- | Read a single attribute called "value".</font>
+<a name="(line105)"></a>attval <font color=Red>::</font> <font color=Cyan>(</font>Read a<font color=Cyan>)</font> <font color=Red>=&gt;</font> Element i <font color=Red>-&gt;</font> a
+<a name="(line106)"></a>attval <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"value"</font><font color=Cyan>,</font>v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> <font color=Red>=</font> read <font color=Cyan>(</font>show v<font color=Cyan>)</font>
+<a name="(line107)"></a>
+<a name="(line108)"></a><a name="mkAttr"></a><font color=Blue>-- | Generate a single attribute.</font>
+<a name="(line109)"></a>mkAttr <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Attribute
+<a name="(line110)"></a>mkAttr n v <font color=Red>=</font> <font color=Cyan>(</font>n<font color=Cyan>,</font> AttValue <font color=Red>[</font>Left v<font color=Red>]</font><font color=Cyan>)</font>
+<a name="(line111)"></a>
+<a name="(line112)"></a><a name="mkElem"></a><font color=Blue>-- | Generate an element with no attributes, named for its HType.</font>
+<a name="(line113)"></a>mkElem <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font> <font color=Red>-&gt;</font> Content ()
+<a name="(line114)"></a>mkElem x cs  <font color=Red>=</font> CElem <font color=Cyan>(</font>Elem <font color=Cyan>(</font>showHType <font color=Cyan>(</font>toHType x<font color=Cyan>)</font> <font color=Magenta>""</font><font color=Cyan>)</font> [] cs<font color=Cyan>)</font> ()
+<a name="(line115)"></a>
+<a name="(line116)"></a><a name="mkElemC"></a><font color=Blue>-- | Generate an element with no attributes, named directly.</font>
+<a name="(line117)"></a>mkElemC <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font> <font color=Red>-&gt;</font> Content ()
+<a name="(line118)"></a>mkElemC x cs <font color=Red>=</font> CElem <font color=Cyan>(</font>Elem x [] cs<font color=Cyan>)</font> ()
+<a name="(line119)"></a>
+<a name="(line120)"></a><a name="toText"></a><font color=Blue>-- | Turn a simple string into XML text.</font>
+<a name="(line121)"></a>toText <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>
+<a name="(line122)"></a>toText s <font color=Red>=</font> <font color=Red>[</font>CString False s ()<font color=Red>]</font>
+<a name="(line123)"></a>
+<a name="(line124)"></a><a name="toCData"></a><font color=Blue>-- | Turn a string into an XML CDATA section.</font>
+<a name="(line125)"></a><font color=Blue>--   (i.e. special characters like '&amp;' are preserved without interpretation.)</font>
+<a name="(line126)"></a>toCData <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>
+<a name="(line127)"></a>toCData s <font color=Red>=</font> <font color=Red>[</font>CString True s ()<font color=Red>]</font>
+<a name="(line128)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line129)"></a>
+<a name="(line130)"></a>        <font color=Blue>-- probably want to write DTD separately from value, and have</font>
+<a name="(line131)"></a>        <font color=Blue>-- easy ways to combine DTD + value into a document, or write</font>
+<a name="(line132)"></a>        <font color=Blue>-- them to separate files.</font>
+<a name="(line133)"></a>
+<a name="(line134)"></a><a name="fReadXml"></a><font color=Blue>-- | Read an XML document from a file and convert it to a fully-typed</font>
+<a name="(line135)"></a><font color=Blue>--   Haskell value.</font>
+<a name="(line136)"></a>fReadXml  <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> FilePath <font color=Red>-&gt;</font> IO a
+<a name="(line137)"></a>fReadXml fp <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="(line138)"></a>    f <font color=Red>&lt;-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdin
+<a name="(line139)"></a>           <font color=Green><u>else</u></font> openFile fp ReadMode <font color=Cyan>)</font>
+<a name="(line140)"></a>    x <font color=Red>&lt;-</font> hGetContents f
+<a name="(line141)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse fp x
+<a name="(line142)"></a>        y' <font color=Red>=</font> CElem y <font color=Cyan>(</font>posInNewCxt fp Nothing<font color=Cyan>)</font>
+<a name="(line143)"></a>    either fail return <font color=Cyan>(</font>fst <font color=Cyan>(</font>runParser parseContents <font color=Red>[</font>y'<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line144)"></a>
+<a name="(line145)"></a><a name="fWriteXml"></a><font color=Blue>-- | Write a fully-typed Haskell value to the given file as an XML</font>
+<a name="(line146)"></a><font color=Blue>--   document.</font>
+<a name="(line147)"></a>fWriteXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> FilePath <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()
+<a name="(line148)"></a>fWriteXml fp x <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="(line149)"></a>    f <font color=Red>&lt;-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout
+<a name="(line150)"></a>           <font color=Green><u>else</u></font> openFile fp WriteMode <font color=Cyan>)</font>
+<a name="(line151)"></a>    hPutXml f False x
+<a name="(line152)"></a>    hClose f
+<a name="(line153)"></a>
+<a name="(line154)"></a><a name="fpsWriteXml"></a><font color=Blue>-- | Write any Haskell value to the given file as an XML document,</font>
+<a name="(line155)"></a><font color=Blue>--   using the FastPackedString interface (output will not be prettified).</font>
+<a name="(line156)"></a>fpsWriteXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> FilePath <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()
+<a name="(line157)"></a>fpsWriteXml fp x <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="(line158)"></a>    f <font color=Red>&lt;-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout
+<a name="(line159)"></a>           <font color=Green><u>else</u></font> openFile fp WriteMode <font color=Cyan>)</font>
+<a name="(line160)"></a>    fpsHPutXml f False x
+<a name="(line161)"></a>    hClose f
+<a name="(line162)"></a>
+<a name="(line163)"></a><a name="readXml"></a><font color=Blue>-- | Read a fully-typed XML document from a string.</font>
+<a name="(line164)"></a>readXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> String <font color=Red>-&gt;</font> Either String a
+<a name="(line165)"></a>readXml s <font color=Red>=</font>
+<a name="(line166)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse <font color=Magenta>"string input"</font> s <font color=Green><u>in</u></font>
+<a name="(line167)"></a>    fst <font color=Cyan>(</font>runParser parseContents
+<a name="(line168)"></a>                   <font color=Red>[</font>CElem y <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"string input"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="(line169)"></a>
+<a name="(line170)"></a><a name="showXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (without DTD).</font>
+<a name="(line171)"></a>showXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> String
+<a name="(line172)"></a>showXml dtd x <font color=Red>=</font>
+<a name="(line173)"></a>    <font color=Green><u>case</u></font> toContents x <font color=Green><u>of</u></font>
+<a name="(line174)"></a>      <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>render <font color=Cyan>.</font> document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x
+<a name="(line175)"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Magenta>""</font>
+<a name="(line176)"></a>
+<a name="(line177)"></a><a name="fpsShowXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a ByteString (without DTD).</font>
+<a name="(line178)"></a>fpsShowXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> FPS<font color=Cyan>.</font>ByteString
+<a name="(line179)"></a>fpsShowXml dtd x <font color=Red>=</font>
+<a name="(line180)"></a>    <font color=Green><u>case</u></font> toContents x <font color=Green><u>of</u></font>
+<a name="(line181)"></a>      <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>FPS<font color=Cyan>.</font>document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x
+<a name="(line182)"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> FPS<font color=Cyan>.</font>empty
+<a name="(line183)"></a>
+<a name="(line184)"></a>
+<a name="(line185)"></a><a name="toXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (with or without DTD).</font>
+<a name="(line186)"></a>toXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Document ()
+<a name="(line187)"></a>toXml dtd value <font color=Red>=</font>
+<a name="(line188)"></a>    <font color=Green><u>let</u></font> ht <font color=Red>=</font> toHType value <font color=Green><u>in</u></font>
+<a name="(line189)"></a>    Document <font color=Cyan>(</font>Prolog <font color=Cyan>(</font>Just <font color=Cyan>(</font>XMLDecl <font color=Magenta>"1.0"</font> Nothing Nothing<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line190)"></a>                     [] <font color=Cyan>(</font><font color=Green><u>if</u></font> dtd <font color=Green><u>then</u></font> Just <font color=Cyan>(</font>toDTD ht<font color=Cyan>)</font> <font color=Green><u>else</u></font> Nothing<font color=Cyan>)</font> []<font color=Cyan>)</font>
+<a name="(line191)"></a>             emptyST
+<a name="(line192)"></a>             <font color=Cyan>(</font> <font color=Green><u>case</u></font> <font color=Cyan>(</font>ht<font color=Cyan>,</font> toContents value<font color=Cyan>)</font> <font color=Green><u>of</u></font>
+<a name="(line193)"></a>                 <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font>       <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> [] cs
+<a name="(line194)"></a>                 <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> [] cs
+<a name="(line195)"></a>                 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Red>[</font>CElem e ()<font color=Red>]</font><font color=Cyan>)</font>   <font color=Red>-&gt;</font> e <font color=Cyan>)</font>
+<a name="(line196)"></a>             []
+<a name="(line197)"></a>
+<a name="(line198)"></a><a name="fromXml"></a><font color=Blue>-- | Read a Haskell value from an XML document, ignoring the DTD and</font>
+<a name="(line199)"></a><font color=Blue>--   using the Haskell result type to determine how to parse it.</font>
+<a name="(line200)"></a>fromXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Document Posn <font color=Red>-&gt;</font> Either String a
+<a name="(line201)"></a>fromXml <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font>
+<a name="(line202)"></a>  <font color=Red>|</font> <font color=Magenta>"tuple"</font> <font color=Cyan>`isPrefixOf`</font> n <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents cs<font color=Cyan>)</font>
+<a name="(line203)"></a>  <font color=Red>|</font> <font color=Magenta>"-XML"</font>  <font color=Cyan>`isSuffixOf`</font> n <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents cs<font color=Cyan>)</font>
+<a name="(line204)"></a>  <font color=Red>|</font> otherwise <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents
+<a name="(line205)"></a>                               <font color=Red>[</font>CElem e <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"document"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="(line206)"></a>
+<a name="(line207)"></a>
+<a name="(line208)"></a><a name="hGetXml"></a><font color=Blue>-- | Read a fully-typed XML document from a file handle.</font>
+<a name="(line209)"></a>hGetXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Handle <font color=Red>-&gt;</font> IO a
+<a name="(line210)"></a>hGetXml h <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="(line211)"></a>    x <font color=Red>&lt;-</font> hGetContents h
+<a name="(line212)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse <font color=Magenta>"file handle"</font> x
+<a name="(line213)"></a>    either fail return
+<a name="(line214)"></a>           <font color=Cyan>(</font>fst <font color=Cyan>(</font>runParser parseContents
+<a name="(line215)"></a>                           <font color=Red>[</font>CElem y <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"file handle"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line216)"></a>
+<a name="(line217)"></a><a name="hPutXml"></a><font color=Blue>-- | Write a fully-typed XML document to a file handle.</font>
+<a name="(line218)"></a>hPutXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Handle <font color=Red>-&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()
+<a name="(line219)"></a>hPutXml h dtd x <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="(line220)"></a>    <font color=Cyan>(</font>hPutStrLn h <font color=Cyan>.</font> render <font color=Cyan>.</font> document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x
+<a name="(line221)"></a>
+<a name="(line222)"></a><a name="fpsHPutXml"></a><font color=Blue>-- | Write a fully-typed XML document to a file handle, using the</font>
+<a name="(line223)"></a><font color=Blue>--   FastPackedString interface (output will not be prettified).</font>
+<a name="(line224)"></a>fpsHPutXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Handle <font color=Red>-&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()
+<a name="(line225)"></a>fpsHPutXml h dtd x <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="(line226)"></a>    <font color=Cyan>(</font>FPS<font color=Cyan>.</font>hPut h <font color=Cyan>.</font> FPS<font color=Cyan>.</font>document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x
+<a name="(line227)"></a>
+<a name="(line228)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line229)"></a>
+<a name="(line230)"></a><a name="XMLParser"></a><font color=Blue>-- | We need a parsing monad for reading generic XML Content into specific</font>
+<a name="(line231)"></a><a name="XMLParser"></a><font color=Blue>--   datatypes.  This is a specialisation of the Text.ParserCombinators.Poly</font>
+<a name="(line232)"></a><a name="XMLParser"></a><font color=Blue>--   ones, where the input token type is fixed as XML Content.</font>
+<a name="(line233)"></a><a name="XMLParser"></a><font color=Green><u>type</u></font> XMLParser a <font color=Red>=</font> Parser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font> a
+<a name="(line234)"></a>
+<a name="(line235)"></a>
+<a name="(line236)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line237)"></a><font color=Blue>-- Some useful parsing combinators</font>
+<a name="(line238)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line239)"></a>
+<a name="(line240)"></a><a name="content"></a><font color=Blue>-- | The most primitive combinator for XMLParser - get one content item.</font>
+<a name="(line241)"></a>content <font color=Red>::</font> String <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font>
+<a name="(line242)"></a>content word <font color=Red>=</font> next <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Magenta>" when expecting "</font><font color=Cyan>++</font>word<font color=Cyan>)</font>
+<a name="(line243)"></a>
+<a name="(line244)"></a><a name="posnElementWith"></a><font color=Blue>-- | Get the next content element, checking that it has one of the required</font>
+<a name="(line245)"></a><font color=Blue>--   tags, using the given matching function.</font>
+<a name="(line246)"></a><font color=Blue>--   (Skips over comments and whitespace, rejects text and refs.</font>
+<a name="(line247)"></a><font color=Blue>--    Also returns position of element.)</font>
+<a name="(line248)"></a>posnElementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font>
+<a name="(line249)"></a>                   <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Posn<font color=Cyan>,</font> Element Posn<font color=Cyan>)</font>
+<a name="(line250)"></a>posnElementWith match tags <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="(line251)"></a>    <font color=Cyan>{</font> c <font color=Red>&lt;-</font> content <font color=Cyan>(</font>formatted tags<font color=Cyan>)</font>
+<a name="(line252)"></a>    <font color=Cyan>;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>
+<a name="(line253)"></a>          CElem e<font color=Red>@</font><font color=Cyan>(</font>Elem t <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> pos
+<a name="(line254)"></a>              <font color=Red>|</font> any <font color=Cyan>(</font>match t<font color=Cyan>)</font> tags <font color=Red>-&gt;</font> return <font color=Cyan>(</font>pos<font color=Cyan>,</font> e<font color=Cyan>)</font>
+<a name="(line255)"></a>              <font color=Red>|</font> otherwise          <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Found a &lt;"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>"&gt;, but expected "</font>
+<a name="(line256)"></a>                                           <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>
+<a name="(line257)"></a>          CString b s pos
+<a name="(line258)"></a>              <font color=Red>|</font> not b <font color=Cyan>&amp;&amp;</font> all isSpace s <font color=Red>-&gt;</font> posnElementWith match tags
+<a name="(line259)"></a>                                                        <font color=Blue>-- ignore blank space</font>
+<a name="(line260)"></a>              <font color=Red>|</font> otherwise <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Found text content, but expected "</font>
+<a name="(line261)"></a>                                  <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\ntext is: "</font><font color=Cyan>++</font>s
+<a name="(line262)"></a>                                  <font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>
+<a name="(line263)"></a>          CRef r pos <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Found reference, but expected "</font>
+<a name="(line264)"></a>                             <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\nreference is: "</font><font color=Cyan>++</font>verbatim r
+<a name="(line265)"></a>                             <font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>
+<a name="(line266)"></a>          CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> posnElementWith match tags  <font color=Blue>-- skip comments, PIs, etc.</font>
+<a name="(line267)"></a>    <font color=Cyan>}</font>
+<a name="(line268)"></a>  <font color=Green><u>where</u></font>
+<a name="(line269)"></a>    formatted <font color=Red>[</font>t<font color=Red>]</font>  <font color=Red>=</font> <font color=Magenta>"a &lt;"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>"&gt;"</font>
+<a name="(line270)"></a>    formatted tgs <font color=Red>=</font> <font color=Magenta>"one of"</font><font color=Cyan>++</font> concatMap <font color=Cyan>(</font><font color=Red>\</font>t<font color=Red>-&gt;</font><font color=Magenta>" &lt;"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>"&gt;"</font><font color=Cyan>)</font> tgs
+<a name="(line271)"></a>
+<a name="(line272)"></a><a name="posnElement"></a><font color=Blue>-- | A specialisation of @posnElementWith (==)@.</font>
+<a name="(line273)"></a>posnElement <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Posn<font color=Cyan>,</font> Element Posn<font color=Cyan>)</font>
+<a name="(line274)"></a>posnElement <font color=Red>=</font> posnElementWith <font color=Cyan>(</font><font color=Cyan>==</font><font color=Cyan>)</font>
+<a name="(line275)"></a>
+<a name="(line276)"></a><a name="element"></a><font color=Blue>-- | Get the next content element, checking that it has one of the required</font>
+<a name="(line277)"></a><font color=Blue>--   tags.  (Skips over comments and whitespace, rejects text and refs.)</font>
+<a name="(line278)"></a>element <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>
+<a name="(line279)"></a>element tags <font color=Red>=</font> fmap snd <font color=Cyan>(</font>posnElement tags<font color=Cyan>)</font>
+<a name="(line280)"></a>                                <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Element: "</font><font color=Cyan>++</font>unwords tags<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font>
+<a name="(line281)"></a>
+<a name="(line282)"></a><a name="elementWith"></a><font color=Blue>-- | Like element, only permits a more flexible match against the tagname.</font>
+<a name="(line283)"></a>elementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>
+<a name="(line284)"></a>elementWith match tags <font color=Red>=</font> fmap snd <font color=Cyan>(</font>posnElementWith match tags<font color=Cyan>)</font>
+<a name="(line285)"></a>                                <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Element: "</font><font color=Cyan>++</font>unwords tags<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font>
+<a name="(line286)"></a>
+<a name="(line287)"></a><a name="interior"></a><font color=Blue>-- | Run an XMLParser on the contents of the given element (i.e. not on the</font>
+<a name="(line288)"></a><font color=Blue>--   current monadic content sequence), checking that the contents are</font>
+<a name="(line289)"></a><font color=Blue>--   exhausted, before returning the calculated value within the current</font>
+<a name="(line290)"></a><font color=Blue>--   parser context.</font>
+<a name="(line291)"></a>interior <font color=Red>::</font> Element Posn <font color=Red>-&gt;</font> XMLParser a <font color=Red>-&gt;</font> XMLParser a
+<a name="(line292)"></a>interior <font color=Cyan>(</font>Elem e <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> p <font color=Red>=</font>
+<a name="(line293)"></a>    <font color=Green><u>case</u></font> runParser p cs <font color=Green><u>of</u></font>
+<a name="(line294)"></a>        <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> fail msg
+<a name="(line295)"></a>        <font color=Cyan>(</font>Right x<font color=Cyan>,</font> []<font color=Cyan>)</font> <font color=Red>-&gt;</font> return x
+<a name="(line296)"></a>        <font color=Cyan>(</font>Right x<font color=Cyan>,</font> ds<font color=Red>@</font><font color=Cyan>(</font>d<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line297)"></a>            <font color=Red>|</font> all onlyMisc ds <font color=Red>-&gt;</font> return x
+<a name="(line298)"></a>            <font color=Red>|</font> otherwise       <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Too many elements inside &lt;"</font><font color=Cyan>++</font>e<font color=Cyan>++</font><font color=Magenta>"&gt; at\n"</font>
+<a name="(line299)"></a>                                      <font color=Cyan>++</font>show <font color=Cyan>(</font>info d<font color=Cyan>)</font><font color=Cyan>++</font><font color=Magenta>"\n"</font>
+<a name="(line300)"></a>                                      <font color=Cyan>++</font><font color=Magenta>"Found excess: "</font><font color=Cyan>++</font>verbatim d<font color=Cyan>)</font>
+<a name="(line301)"></a>  <font color=Green><u>where</u></font> onlyMisc <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True
+<a name="(line302)"></a>        onlyMisc <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>|</font> all isSpace s <font color=Red>=</font> True
+<a name="(line303)"></a>        onlyMisc <font color=Green><u>_</u></font> <font color=Red>=</font> False
+<a name="(line304)"></a>
+<a name="(line305)"></a><a name="inElement"></a><font color=Blue>-- | A combination of element + interior.</font>
+<a name="(line306)"></a>inElement <font color=Red>::</font> String <font color=Red>-&gt;</font> XMLParser a <font color=Red>-&gt;</font> XMLParser a
+<a name="(line307)"></a>inElement tag p <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font>tag<font color=Red>]</font><font color=Cyan>;</font> commit <font color=Cyan>(</font>interior e p<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="(line308)"></a>
+<a name="(line309)"></a><a name="inElementWith"></a><font color=Blue>-- | A combination of elementWith + interior.</font>
+<a name="(line310)"></a>inElementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> XMLParser a <font color=Red>-&gt;</font> XMLParser a
+<a name="(line311)"></a>inElementWith match tag p <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> elementWith match <font color=Red>[</font>tag<font color=Red>]</font>
+<a name="(line312)"></a>                               <font color=Cyan>;</font> commit <font color=Cyan>(</font>interior e p<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="(line313)"></a>
+<a name="(line314)"></a><a name="attributes"></a><font color=Blue>-- | Do some parsing of the attributes of the given element</font>
+<a name="(line315)"></a>attributes <font color=Red>::</font> XmlAttributes a <font color=Red>=&gt;</font> Element Posn <font color=Red>-&gt;</font> XMLParser a
+<a name="(line316)"></a>attributes <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Green><u>as</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> return <font color=Cyan>(</font>fromAttrs <font color=Green><u>as</u></font><font color=Cyan>)</font>
+<a name="(line317)"></a>
+<a name="(line318)"></a><a name="text"></a><font color=Blue>-- | 'text' is a counterpart to 'element', parsing text content if it</font>
+<a name="(line319)"></a><font color=Blue>--   exists.  Adjacent text and references are coalesced.</font>
+<a name="(line320)"></a>text <font color=Red>::</font> XMLParser String
+<a name="(line321)"></a>text <font color=Red>=</font> text' []
+<a name="(line322)"></a>  <font color=Green><u>where</u></font> text' acc <font color=Red>=</font>
+<a name="(line323)"></a>          <font color=Green><u>do</u></font> <font color=Cyan>{</font> c <font color=Red>&lt;-</font> content <font color=Magenta>"plain text"</font>
+<a name="(line324)"></a>             <font color=Cyan>;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>
+<a name="(line325)"></a>                 CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font>        <font color=Red>-&gt;</font> text' <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font>
+<a name="(line326)"></a>                 CRef <font color=Cyan>(</font>RefChar s<font color=Cyan>)</font> <font color=Green><u>_</u></font>   <font color=Red>-&gt;</font> text' <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"&amp;#"</font><font color=Cyan>++</font>show s<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font> <font color=Red><b>:</b></font>acc<font color=Cyan>)</font>
+<a name="(line327)"></a>                 CRef <font color=Cyan>(</font>RefEntity s<font color=Cyan>)</font> <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> text' <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>'&amp;'</font><font color=Red><b>:</b></font>s<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font><font color=Red><b>:</b></font>acc<font color=Cyan>)</font>
+<a name="(line328)"></a>                 CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font>            <font color=Red>-&gt;</font> text' acc
+<a name="(line329)"></a>                 CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font>         <font color=Red>-&gt;</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> reparse <font color=Red>[</font>c<font color=Red>]</font> <font color=Blue>-- put it back!</font>
+<a name="(line330)"></a>                                         <font color=Cyan>;</font> <font color=Green><u>if</u></font> null acc <font color=Green><u>then</u></font> fail <font color=Magenta>"empty string"</font>
+<a name="(line331)"></a>                                           <font color=Green><u>else</u></font> return <font color=Cyan>(</font>concat <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line332)"></a>                                         <font color=Cyan>}</font>
+<a name="(line333)"></a>             <font color=Cyan>}</font>
+<a name="(line334)"></a>          <font color=Cyan>`onFail`</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> null acc <font color=Green><u>then</u></font> fail <font color=Magenta>"empty string"</font>
+<a name="(line335)"></a>                     <font color=Green><u>else</u></font> return <font color=Cyan>(</font>concat <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>)</font>
+<a name="(line336)"></a>
+<a name="(line337)"></a>
+<a name="(line338)"></a><a name="choice"></a><font color=Blue>-- | 'choice f p' means if parseContents succeeds, apply f to the result,</font>
+<a name="(line339)"></a><font color=Blue>--   otherwise use the continuation parser.</font>
+<a name="(line340)"></a>choice <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> <font color=Cyan>(</font>a <font color=Red>-&gt;</font> b<font color=Cyan>)</font> <font color=Red>-&gt;</font> XMLParser b <font color=Red>-&gt;</font> XMLParser b
+<a name="(line341)"></a>choice cons <font color=Cyan>(</font>P other<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line342)"></a>    P <font color=Cyan>(</font><font color=Red>\</font>cs<font color=Red>-&gt;</font> <font color=Green><u>case</u></font> runParser parseContents cs <font color=Green><u>of</u></font>
+<a name="(line343)"></a>                 <font color=Cyan>(</font>Left <font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> other cs
+<a name="(line344)"></a>                 <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs'<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>cons x<font color=Cyan>)</font><font color=Cyan>,</font> cs'<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line345)"></a>
+<a name="(line346)"></a><font color=Blue>--choice cons other = fmap cons parseContents `onFail` other</font>
+<a name="(line347)"></a>
+<a name="(line348)"></a><a name="definite"></a><font color=Blue>-- | not sure this is needed now.   'definite p' previously ensured that</font>
+<a name="(line349)"></a><font color=Blue>--   an element was definitely present.  Now I think the monad might take</font>
+<a name="(line350)"></a><font color=Blue>--   care of that for us.</font>
+<a name="(line351)"></a>definite <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> XMLParser a <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> XMLParser a
+<a name="(line352)"></a>definite p inner tag <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>cs<font color=Red>-&gt;</font> <font color=Green><u>case</u></font> runParser p cs <font color=Green><u>of</u></font>
+<a name="(line353)"></a>                                   <font color=Cyan>(</font>Left <font color=Green><u>_</u></font><font color=Cyan>,</font> cs'<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>msg'<font color=Cyan>)</font><font color=Cyan>,</font> cs'<font color=Cyan>)</font>
+<a name="(line354)"></a>                                   <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs'<font color=Cyan>)</font>  <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right x<font color=Cyan>,</font>   cs'<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line355)"></a>  <font color=Green><u>where</u></font> msg' <font color=Red>=</font> <font color=Magenta>"content error: expected "</font><font color=Cyan>++</font>inner<font color=Cyan>++</font><font color=Magenta>" inside &lt;"</font><font color=Cyan>++</font>tag
+<a name="(line356)"></a>               <font color=Cyan>++</font><font color=Magenta>"&gt; element\n"</font>
+<a name="(line357)"></a>
+<a name="(line358)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line359)"></a>
+<a name="(line360)"></a><a name="XmlContent"></a><font color=Blue>-- | The @XmlContent@ class promises that an XML Content element can be</font>
+<a name="(line361)"></a><a name="XmlContent"></a><font color=Blue>--   converted to and from a Haskell value.</font>
+<a name="(line362)"></a><a name="XmlContent"></a><font color=Green><u>class</u></font> HTypeable a <font color=Red>=&gt;</font> XmlContent a <font color=Green><u>where</u></font>
+<a name="(line363)"></a>    <font color=Blue>-- | Convert from XML to Haskell</font>
+<a name="(line364)"></a>    parseContents <font color=Red>::</font> XMLParser a
+<a name="(line365)"></a>    <font color=Blue>-- | Convert from Haskell to XML</font>
+<a name="(line366)"></a>    toContents    <font color=Red>::</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>
+<a name="(line367)"></a>
+<a name="(line368)"></a>    <font color=Blue>-- | Dummy functions (for most types): used /only/ in the Char instance</font>
+<a name="(line369)"></a>    <font color=Blue>--   for coercing lists of Char into String.</font>
+<a name="(line370)"></a>    xToChar       <font color=Red>::</font> a <font color=Red>-&gt;</font> Char
+<a name="(line371)"></a>    xFromChar     <font color=Red>::</font> Char <font color=Red>-&gt;</font> a
+<a name="(line372)"></a>    xToChar        <font color=Red>=</font> error <font color=Magenta>"HaXml.XmlContent.xToChar used in error"</font>
+<a name="(line373)"></a>    xFromChar      <font color=Red>=</font> error <font color=Magenta>"HaXml.XmlContent.xFromChar used in error"</font>
+<a name="(line374)"></a>
+<a name="(line375)"></a><a name="XmlAttributes"></a><font color=Blue>-- | The @XmlAttributes@ class promises that a list of XML tag attributes</font>
+<a name="(line376)"></a><a name="XmlAttributes"></a><font color=Blue>--   can be converted to and from a Haskell value.</font>
+<a name="(line377)"></a><a name="XmlAttributes"></a><font color=Green><u>class</u></font> XmlAttributes a <font color=Green><u>where</u></font>
+<a name="(line378)"></a>    fromAttrs <font color=Red>::</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> a
+<a name="(line379)"></a>    toAttrs   <font color=Red>::</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font>
+<a name="(line380)"></a><a name="XmlAttrType"></a><font color=Blue>-- | The @XmlAttrType@ class promises that an attribute taking an XML</font>
+<a name="(line381)"></a><a name="XmlAttrType"></a><font color=Blue>--   enumerated type can be converted to and from a Haskell value.</font>
+<a name="(line382)"></a><a name="XmlAttrType"></a><font color=Green><u>class</u></font> XmlAttrType a <font color=Green><u>where</u></font>
+<a name="(line383)"></a>    fromAttrToTyp <font color=Red>::</font> String <font color=Red>-&gt;</font> Attribute <font color=Red>-&gt;</font> Maybe a
+<a name="(line384)"></a>    toAttrFrTyp   <font color=Red>::</font> String <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Maybe Attribute
+<a name="(line385)"></a>
+<a name="(line386)"></a>
+<a name="(line387)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line388)"></a><font color=Blue>-- Instances for all the standard basic datatypes.</font>
+<a name="(line389)"></a><font color=Blue>-- These are for Haskell datatypes being derived to go to XML.</font>
+<a name="(line390)"></a><font color=Blue>-- DtdToHaskell does not use these instances.</font>
+<a name="(line391)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line392)"></a>
+<a name="(line393)"></a><font color=Green><u>instance</u></font> XmlContent Bool <font color=Green><u>where</u></font>
+<a name="(line394)"></a>    toContents b   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"bool"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show b<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>
+<a name="(line395)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"bool"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="(line396)"></a>
+<a name="(line397)"></a><font color=Green><u>instance</u></font> XmlContent Int <font color=Green><u>where</u></font>
+<a name="(line398)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"int"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>
+<a name="(line399)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"int"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="(line400)"></a>
+<a name="(line401)"></a><font color=Green><u>instance</u></font> XmlContent Integer <font color=Green><u>where</u></font>
+<a name="(line402)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"integer"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>
+<a name="(line403)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"integer"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="(line404)"></a>
+<a name="(line405)"></a><font color=Green><u>instance</u></font> XmlContent Float <font color=Green><u>where</u></font>
+<a name="(line406)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"float"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>
+<a name="(line407)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"float"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="(line408)"></a>
+<a name="(line409)"></a><font color=Green><u>instance</u></font> XmlContent Double <font color=Green><u>where</u></font>
+<a name="(line410)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"double"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>
+<a name="(line411)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"double"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="(line412)"></a>
+<a name="(line413)"></a><font color=Green><u>instance</u></font> XmlContent Char <font color=Green><u>where</u></font>
+<a name="(line414)"></a>    <font color=Blue>-- NOT in a string</font>
+<a name="(line415)"></a>    toContents c   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"char"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Red>[</font>c<font color=Red>]</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>
+<a name="(line416)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"value"</font><font color=Cyan>,</font><font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Red>[</font>c<font color=Red>]</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font>
+<a name="(line417)"></a>                             <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"char"</font><font color=Red>]</font>
+<a name="(line418)"></a>                       <font color=Cyan>;</font> return c
+<a name="(line419)"></a>                       <font color=Cyan>}</font>
+<a name="(line420)"></a>    <font color=Blue>-- Only defined for Char and no other types:</font>
+<a name="(line421)"></a>    xToChar   <font color=Red>=</font> id
+<a name="(line422)"></a>    xFromChar <font color=Red>=</font> id
+<a name="(line423)"></a>
+<a name="(line424)"></a><font color=Green><u>instance</u></font> XmlContent a <font color=Red>=&gt;</font> XmlContent <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>where</u></font>
+<a name="(line425)"></a>    toContents xs  <font color=Red>=</font> <font color=Green><u>case</u></font> toHType x <font color=Green><u>of</u></font>
+<a name="(line426)"></a>                       <font color=Cyan>(</font>Prim <font color=Magenta>"Char"</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font>
+<a name="(line427)"></a>                            <font color=Red>[</font>mkElem <font color=Magenta>"string"</font> <font color=Red>[</font>CString True <font color=Cyan>(</font>map xToChar xs<font color=Cyan>)</font> ()<font color=Red>]</font><font color=Red>]</font>
+<a name="(line428)"></a>                       <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Red>[</font>mkElem xs <font color=Cyan>(</font>concatMap toContents xs<font color=Cyan>)</font><font color=Red>]</font>
+<a name="(line429)"></a>                   <font color=Green><u>where</u></font>   <font color=Cyan>(</font>x<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xs
+<a name="(line430)"></a>    parseContents <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>x <font color=Red>-&gt;</font>
+<a name="(line431)"></a>        <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>
+<a name="(line432)"></a>            <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>
+<a name="(line433)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>map xFromChar s<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>
+<a name="(line434)"></a>            <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"string"</font> [] <font color=Red>[</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Red>]</font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>
+<a name="(line435)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>map xFromChar s<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>
+<a name="(line436)"></a>            <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem e [] xs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>|</font> <font color=Magenta>"list"</font> <font color=Cyan>`isPrefixOf`</font> e
+<a name="(line437)"></a>                   <font color=Red>-&gt;</font> scanElements xs
+<a name="(line438)"></a>                   <font color=Green><u>where</u></font>
+<a name="(line439)"></a>                  <font color=Blue>-- scanElements :: [Content] -&gt; (Either String [a],[Content])</font>
+<a name="(line440)"></a>                     scanElements [] <font color=Red>=</font> <font color=Cyan>(</font>Right []<font color=Cyan>,</font> cs<font color=Cyan>)</font>
+<a name="(line441)"></a>                     scanElements es <font color=Red>=</font>
+<a name="(line442)"></a>                        <font color=Green><u>case</u></font> runParser parseContents es <font color=Green><u>of</u></font>
+<a name="(line443)"></a>                            <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> es'<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>msg<font color=Cyan>)</font><font color=Cyan>,</font> es'<font color=Cyan>)</font>
+<a name="(line444)"></a>                            <font color=Cyan>(</font>Right y<font color=Cyan>,</font> es'<font color=Cyan>)</font> <font color=Red>-&gt;</font>
+<a name="(line445)"></a>                                <font color=Green><u>case</u></font> scanElements es' <font color=Green><u>of</u></font>
+<a name="(line446)"></a>                                    <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> ds<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> ds<font color=Cyan>)</font>
+<a name="(line447)"></a>                                    <font color=Cyan>(</font>Right ys<font color=Cyan>,</font> ds<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>y<font color=Red><b>:</b></font>ys<font color=Cyan>)</font><font color=Cyan>,</font> ds<font color=Cyan>)</font>
+<a name="(line448)"></a>            <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem e <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> cs<font color=Cyan>)</font>
+<a name="(line449)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False
+<a name="(line450)"></a>                            <font color=Cyan>,</font><font color=Magenta>"Expected a &lt;list-...&gt;, but found a &lt;"</font><font color=Cyan>++</font>e<font color=Cyan>++</font><font color=Magenta>"&gt; at\n"</font>
+<a name="(line451)"></a>                            <font color=Cyan>++</font> show pos<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>
+<a name="(line452)"></a>            <font color=Cyan>(</font>CRef r pos<font color=Red><b>:</b></font> cs<font color=Cyan>)</font>
+<a name="(line453)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False
+<a name="(line454)"></a>                            <font color=Cyan>,</font><font color=Magenta>"Expected a &lt;list-...&gt;, but found a ref "</font>
+<a name="(line455)"></a>                            <font color=Cyan>++</font>verbatim r<font color=Cyan>++</font><font color=Magenta>" at\n"</font><font color=Cyan>++</font> show pos<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>
+<a name="(line456)"></a>            <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>P p<font color=Cyan>)</font><font color=Red>-&gt;</font> p<font color=Cyan>)</font> parseContents<font color=Cyan>)</font> cs  <font color=Blue>-- skip comments etc.</font>
+<a name="(line457)"></a>            []     <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False
+<a name="(line458)"></a>                            <font color=Cyan>,</font><font color=Magenta>"Ran out of input XML whilst secondary parsing"</font><font color=Cyan>)</font>
+<a name="(line459)"></a>                      <font color=Cyan>,</font> []<font color=Cyan>)</font>
+<a name="(line460)"></a>        <font color=Cyan>)</font>
+<a name="(line461)"></a>
+<a name="(line462)"></a><font color=Green><u>instance</u></font> XmlContent () <font color=Green><u>where</u></font>
+<a name="(line463)"></a>    toContents ()  <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"unit"</font> [] []<font color=Cyan>)</font> ()<font color=Red>]</font>
+<a name="(line464)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> element <font color=Red>[</font><font color=Magenta>"unit"</font><font color=Red>]</font><font color=Cyan>;</font> return () <font color=Cyan>}</font>
+<a name="(line465)"></a>
+<a name="(line466)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line467)"></a>    toContents <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b
+<a name="(line468)"></a>    parseContents    <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="(line469)"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="(line470)"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="(line471)"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font>
+<a name="(line472)"></a>        <font color=Cyan>}</font>
+<a name="(line473)"></a>
+<a name="(line474)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line475)"></a>    toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z
+<a name="(line476)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="(line477)"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="(line478)"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="(line479)"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="(line480)"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font>
+<a name="(line481)"></a>        <font color=Cyan>}</font>
+<a name="(line482)"></a>
+<a name="(line483)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>,</font> XmlContent d<font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="(line484)"></a>         XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line485)"></a>    toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z
+<a name="(line486)"></a>                           <font color=Cyan>++</font> toContents t
+<a name="(line487)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="(line488)"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="(line489)"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="(line490)"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="(line491)"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="(line492)"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>)</font>
+<a name="(line493)"></a>        <font color=Cyan>}</font>
+<a name="(line494)"></a>
+<a name="(line495)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font> XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>,</font> XmlContent d
+<a name="(line496)"></a>         <font color=Cyan>,</font> XmlContent e <font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="(line497)"></a>         XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line498)"></a>    toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>,</font>t<font color=Cyan>,</font>u<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z
+<a name="(line499)"></a>                             <font color=Cyan>++</font> toContents t <font color=Cyan>++</font> toContents u
+<a name="(line500)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="(line501)"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="(line502)"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="(line503)"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="(line504)"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="(line505)"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents
+<a name="(line506)"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>)</font>
+<a name="(line507)"></a>        <font color=Cyan>}</font>
+<a name="(line508)"></a>
+<a name="(line509)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font> XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>,</font> XmlContent d
+<a name="(line510)"></a>         <font color=Cyan>,</font> XmlContent e<font color=Cyan>,</font> XmlContent f <font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="(line511)"></a>         XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>,</font>f<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line512)"></a>    toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>,</font>t<font color=Cyan>,</font>u<font color=Cyan>,</font>v<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z
+<a name="(line513)"></a>                               <font color=Cyan>++</font> toContents t <font color=Cyan>++</font> toContents u <font color=Cyan>++</font> toContents v
+<a name="(line514)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="(line515)"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="(line516)"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="(line517)"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="(line518)"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="(line519)"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents
+<a name="(line520)"></a>        <font color=Cyan>;</font> f <font color=Red>&lt;-</font> parseContents
+<a name="(line521)"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>,</font>f<font color=Cyan>)</font>
+<a name="(line522)"></a>        <font color=Cyan>}</font>
+<a name="(line523)"></a>
+<a name="(line524)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line525)"></a>    toContents m   <font color=Red>=</font> <font color=Red>[</font>mkElem m <font color=Cyan>(</font>maybe [] toContents m<font color=Cyan>)</font><font color=Red>]</font>
+<a name="(line526)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="(line527)"></a>        <font color=Cyan>{</font> e <font color=Red>&lt;-</font> elementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Red>[</font><font color=Magenta>"maybe"</font><font color=Red>]</font>
+<a name="(line528)"></a>        <font color=Cyan>;</font> <font color=Green><u>case</u></font> e <font color=Green><u>of</u></font> <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> [] []<font color=Cyan>)</font> <font color=Red>-&gt;</font> return Nothing
+<a name="(line529)"></a>                    <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> [] <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> fmap Just <font color=Cyan>(</font>interior e parseContents<font color=Cyan>)</font>
+<a name="(line530)"></a>        <font color=Cyan>}</font>
+<a name="(line531)"></a>
+<a name="(line532)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>Either a b<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line533)"></a>    toContents v<font color=Red>@</font><font color=Cyan>(</font>Left aa<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line534)"></a>        <font color=Red>[</font>mkElemC <font color=Cyan>(</font>showConstr <font color=Magenta>0</font> <font color=Cyan>(</font>toHType v<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>toContents aa<font color=Cyan>)</font><font color=Red>]</font>
+<a name="(line535)"></a>    toContents v<font color=Red>@</font><font color=Cyan>(</font>Right ab<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line536)"></a>        <font color=Red>[</font>mkElemC <font color=Cyan>(</font>showConstr <font color=Magenta>1</font> <font color=Cyan>(</font>toHType v<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>toContents ab<font color=Cyan>)</font><font color=Red>]</font>
+<a name="(line537)"></a>    parseContents <font color=Red>=</font>
+<a name="(line538)"></a>        <font color=Cyan>(</font>inElementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Magenta>"Left"</font>  <font color=Cyan>$</font> fmap Left  parseContents<font color=Cyan>)</font>
+<a name="(line539)"></a>          <font color=Cyan>`onFail`</font>
+<a name="(line540)"></a>        <font color=Cyan>(</font>inElementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Magenta>"Right"</font> <font color=Cyan>$</font> fmap Right parseContents<font color=Cyan>)</font>
+<a name="(line541)"></a>
+<a name="(line542)"></a><font color=Blue>--    do{ e@(Elem t [] _) &lt;- element ["Left","Right"]</font>
+<a name="(line543)"></a><font color=Blue>--      ; case t of</font>
+<a name="(line544)"></a><font color=Blue>--          _ | "Left"  `isPrefixOf` t -&gt; fmap Left  (interior e parseContents)</font>
+<a name="(line545)"></a><font color=Blue>--            | "Right" `isPrefixOf` t -&gt; fmap Right (interior e parseContents)</font>
+<a name="(line546)"></a><font color=Blue>--      }</font>
+<a name="(line547)"></a>
+<a name="(line548)"></a>
+<a name="(line549)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line550)"></a><font color=Blue>-- Useful auxiliaries for "fromAttributes"</font>
+<a name="(line551)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line552)"></a>
+<a name="(line553)"></a><a name="Defaultable"></a><font color=Blue>-- | If an attribute is defaultable, then it either takes the default</font>
+<a name="(line554)"></a><a name="Defaultable"></a><font color=Blue>--   value (which is omitted from the output), or a non-default value</font>
+<a name="(line555)"></a><a name="Defaultable"></a><font color=Blue>--   (which obviously must be printed).</font>
+<a name="(line556)"></a><a name="Defaultable"></a><font color=Green><u>data</u></font> Defaultable a  <font color=Red>=</font> Default a    <font color=Red>|</font> NonDefault a    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="(line557)"></a>
+<a name="(line558)"></a><a name="searchMaybe"></a>searchMaybe <font color=Red>::</font> <font color=Cyan>(</font>a <font color=Red>-&gt;</font> Maybe b<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> Maybe b
+<a name="(line559)"></a>searchMaybe <font color=Green><u>_</u></font> [] <font color=Red>=</font> Nothing
+<a name="(line560)"></a>searchMaybe f <font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line561)"></a>    <font color=Green><u>let</u></font> fx <font color=Red>=</font> f x <font color=Green><u>in</u></font>
+<a name="(line562)"></a>    <font color=Green><u>case</u></font> fx <font color=Green><u>of</u></font>
+<a name="(line563)"></a>      Nothing  <font color=Red>-&gt;</font> searchMaybe f xs
+<a name="(line564)"></a>      <font color=Cyan>(</font>Just <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> fx
+<a name="(line565)"></a>
+<a name="(line566)"></a><a name="maybeToAttr"></a>maybeToAttr <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>a<font color=Red>-&gt;</font>Maybe Attribute<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Maybe a
+<a name="(line567)"></a>               <font color=Red>-&gt;</font> Maybe Attribute
+<a name="(line568)"></a>maybeToAttr <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> Nothing  <font color=Red>=</font> Nothing
+<a name="(line569)"></a>maybeToAttr to n <font color=Cyan>(</font>Just v<font color=Cyan>)</font> <font color=Red>=</font> to n v
+<a name="(line570)"></a>
+<a name="(line571)"></a><a name="defaultToAttr"></a>defaultToAttr <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>a<font color=Red>-&gt;</font>Maybe Attribute<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Defaultable a
+<a name="(line572)"></a>                 <font color=Red>-&gt;</font> Maybe Attribute
+<a name="(line573)"></a>defaultToAttr <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Cyan>(</font>Default <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> Nothing
+<a name="(line574)"></a>defaultToAttr to n <font color=Cyan>(</font>NonDefault v<font color=Cyan>)</font> <font color=Red>=</font> to n v
+<a name="(line575)"></a>
+<a name="(line576)"></a><a name="definiteA"></a>definiteA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Attribute<font color=Red>-&gt;</font>Maybe a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> String
+<a name="(line577)"></a>             <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> a
+<a name="(line578)"></a>definiteA from tag at <font color=Green><u>as</u></font> <font color=Red>=</font>
+<a name="(line579)"></a>    <font color=Green><u>case</u></font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font> <font color=Green><u>of</u></font>
+<a name="(line580)"></a>      Nothing  <font color=Red>-&gt;</font> error <font color=Cyan>(</font><font color=Magenta>"missing attribute "</font><font color=Cyan>++</font>at<font color=Cyan>++</font><font color=Magenta>" in tag &lt;"</font><font color=Cyan>++</font>tag<font color=Cyan>++</font><font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="(line581)"></a>      <font color=Cyan>(</font>Just a<font color=Cyan>)</font> <font color=Red>-&gt;</font> a
+<a name="(line582)"></a>
+<a name="(line583)"></a><a name="defaultA"></a>defaultA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Attribute<font color=Red>-&gt;</font>Maybe a<font color=Cyan>)</font> <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> String
+<a name="(line584)"></a>            <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> Defaultable a
+<a name="(line585)"></a>defaultA from def at <font color=Green><u>as</u></font> <font color=Red>=</font>
+<a name="(line586)"></a>    <font color=Green><u>case</u></font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font> <font color=Green><u>of</u></font>
+<a name="(line587)"></a>      Nothing  <font color=Red>-&gt;</font> Default def
+<a name="(line588)"></a>      <font color=Cyan>(</font>Just a<font color=Cyan>)</font> <font color=Red>-&gt;</font> NonDefault a
+<a name="(line589)"></a>
+<a name="(line590)"></a><a name="possibleA"></a>possibleA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Attribute<font color=Red>-&gt;</font>Maybe a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> Maybe a
+<a name="(line591)"></a>possibleA from at <font color=Green><u>as</u></font> <font color=Red>=</font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font>
+<a name="(line592)"></a>
+<a name="(line593)"></a><a name="fromAttrToStr"></a>fromAttrToStr <font color=Red>::</font> String <font color=Red>-&gt;</font> Attribute <font color=Red>-&gt;</font> Maybe String
+<a name="(line594)"></a>fromAttrToStr n <font color=Cyan>(</font>n0<font color=Cyan>,</font>v<font color=Cyan>)</font>
+<a name="(line595)"></a>        <font color=Red>|</font> n <font color=Cyan>==</font> n0   <font color=Red>=</font> Just <font color=Cyan>(</font>attr2str v<font color=Cyan>)</font>
+<a name="(line596)"></a>        <font color=Red>|</font> otherwise <font color=Red>=</font> Nothing
+<a name="(line597)"></a>
+<a name="(line598)"></a><a name="toAttrFrStr"></a>toAttrFrStr   <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Maybe Attribute
+<a name="(line599)"></a>toAttrFrStr n v <font color=Red>=</font> Just <font color=Cyan>(</font>n<font color=Cyan>,</font> str2attr v<font color=Cyan>)</font>
+<a name="(line600)"></a>
+<a name="(line601)"></a><a name="str2attr"></a>str2attr <font color=Red>::</font> String <font color=Red>-&gt;</font> AttValue
+<a name="(line602)"></a>str2attr s <font color=Red>=</font>
+<a name="(line603)"></a>    <font color=Green><u>let</u></font> f t <font color=Red>=</font>
+<a name="(line604)"></a>          <font color=Green><u>let</u></font> <font color=Cyan>(</font>l<font color=Cyan>,</font>r<font color=Cyan>)</font> <font color=Red>=</font> span <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font> not <font color=Cyan>(</font>elem c <font color=Magenta>"\"&amp;&lt;&gt;'"</font><font color=Cyan>)</font><font color=Cyan>)</font> t
+<a name="(line605)"></a>          <font color=Green><u>in</u></font> <font color=Green><u>if</u></font> null r <font color=Green><u>then</u></font> <font color=Red>[</font>Left l<font color=Red>]</font>
+<a name="(line606)"></a>             <font color=Green><u>else</u></font> Left l<font color=Red><b>:</b></font> Right <font color=Cyan>(</font>g <font color=Cyan>(</font>head r<font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font> f <font color=Cyan>(</font>tail r<font color=Cyan>)</font>
+<a name="(line607)"></a>        g <font color=Magenta>'"'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"quot"</font>
+<a name="(line608)"></a>        g <font color=Magenta>'&amp;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"amp"</font>
+<a name="(line609)"></a>        g <font color=Magenta>'&lt;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"lt"</font>
+<a name="(line610)"></a>        g <font color=Magenta>'&gt;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"gt"</font>
+<a name="(line611)"></a>        g <font color=Magenta>'\''</font> <font color=Red>=</font> RefEntity <font color=Magenta>"apos"</font>
+<a name="(line612)"></a>    <font color=Green><u>in</u></font> AttValue <font color=Cyan>(</font>f s<font color=Cyan>)</font>
+<a name="(line613)"></a>
+<a name="(line614)"></a><a name="attr2str"></a>attr2str <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> String          <font color=Blue>-- really needs symbol table</font>
+<a name="(line615)"></a>attr2str <font color=Cyan>(</font>AttValue xs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="(line616)"></a>    <font color=Green><u>let</u></font> f <font color=Cyan>(</font>Left s<font color=Cyan>)</font> <font color=Red>=</font> s
+<a name="(line617)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefChar i<font color=Cyan>)</font><font color=Cyan>)</font>        <font color=Red>=</font> <font color=Red>[</font>chr i<font color=Red>]</font>
+<a name="(line618)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"quot"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"\""</font>
+<a name="(line619)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"amp"</font><font color=Cyan>)</font><font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"&amp;"</font>
+<a name="(line620)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"lt"</font><font color=Cyan>)</font><font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&lt;"</font>
+<a name="(line621)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"gt"</font><font color=Cyan>)</font><font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&gt;"</font>
+<a name="(line622)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"apos"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"'"</font>
+<a name="(line623)"></a>        f <font color=Cyan>(</font>Right <font color=Green><u>_</u></font><font color=Cyan>)</font>                  <font color=Red>=</font> <font color=Magenta>"*"</font>  <font color=Blue>-- Ooops, ST needed here.</font>
+<a name="(line624)"></a>    <font color=Green><u>in</u></font> concatMap f xs
+<a name="(line625)"></a>
+<a name="(line626)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line627)"></a><font color=Blue>--  New content-model types</font>
+<a name="(line628)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line629)"></a>
+<a name="(line630)"></a><font color=Blue>{-
+<a name="(line631)"></a>data OneOf2 a b
+<a name="(line632)"></a>data OneOf3 a b c
+<a name="(line633)"></a>data OneOf4 a b c d
+<a name="(line634)"></a>    ... etc are now defined (with instances) in module OneOfN.
+<a name="(line635)"></a>-}</font>
+<a name="(line636)"></a>
+<a name="(line637)"></a><a name="ANYContent"></a><font color=Blue>-- | A type corresponding to XML's ANY contentspec.</font>
+<a name="(line638)"></a><a name="ANYContent"></a><font color=Blue>--   It is either a list of unconverted xml 'Content'</font>
+<a name="(line639)"></a><a name="ANYContent"></a><font color=Blue>--   or some 'XmlContent'-able value.</font>
+<a name="(line640)"></a><a name="ANYContent"></a><font color=Blue>--</font>
+<a name="(line641)"></a><a name="ANYContent"></a><font color=Blue>-- Parsing functions (e.g. 'parseContents') will always produce 'UnConverted'.</font>
+<a name="(line642)"></a><a name="ANYContent"></a><font color=Blue>-- Note: The Show instance for 'UnConverted' uses 'verbatim'.</font>
+<a name="(line643)"></a><a name="ANYContent"></a><font color=Green><u>data</u></font> ANYContent <font color=Red>=</font> <font color=Green><u>forall</u></font> a <font color=Cyan>.</font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> Show a<font color=Cyan>)</font> <font color=Red>=&gt;</font> ANYContent a
+<a name="(line644)"></a>                <font color=Red>|</font> UnConverted <font color=Red>[</font>Content Posn<font color=Red>]</font>
+<a name="(line645)"></a>
+<a name="(line646)"></a><font color=Green><u>instance</u></font> Show ANYContent <font color=Green><u>where</u></font>
+<a name="(line647)"></a>    show <font color=Cyan>(</font>UnConverted c<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"UnConverted "</font> <font color=Cyan>++</font> <font color=Cyan>(</font>show <font color=Cyan>$</font> map verbatim c<font color=Cyan>)</font>
+<a name="(line648)"></a>    show <font color=Cyan>(</font>ANYContent a<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"ANYContent "</font> <font color=Cyan>++</font> <font color=Cyan>(</font>show a<font color=Cyan>)</font>
+<a name="(line649)"></a>
+<a name="(line650)"></a><font color=Green><u>instance</u></font> Eq ANYContent <font color=Green><u>where</u></font>
+<a name="(line651)"></a>    a <font color=Cyan>==</font> b <font color=Red>=</font> show a <font color=Cyan>==</font> show b
+<a name="(line652)"></a>
+<a name="(line653)"></a><a name="List1"></a><font color=Blue>-- | The List1 type represents lists with at least one element.</font>
+<a name="(line654)"></a><a name="List1"></a><font color=Blue>--   It is required for DTD content models that use + as a modifier.</font>
+<a name="(line655)"></a><a name="List1"></a><font color=Green><u>data</u></font> List1 a <font color=Red>=</font> NonEmpty <font color=Red>[</font>a<font color=Red>]</font>  <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font> Show<font color=Cyan>)</font>
+<a name="(line656)"></a>
+<a name="(line657)"></a>
+<a name="(line658)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line659)"></a><font color=Blue>--  Instances for new content-model types</font>
+<a name="(line660)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line661)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>)</font> <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>List1 a<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line662)"></a>    toHType m  <font color=Red>=</font> Defined <font color=Magenta>"List1"</font> <font color=Red>[</font>hx<font color=Red>]</font>
+<a name="(line663)"></a>                         <font color=Red>[</font>Constr <font color=Magenta>"NonEmpty"</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Red>[</font>List hx<font color=Red>]</font> <font color=Blue>{-Nothing-}</font><font color=Red>]</font>
+<a name="(line664)"></a>               <font color=Green><u>where</u></font> <font color=Cyan>(</font>NonEmpty x<font color=Cyan>)</font> <font color=Red>=</font> m
+<a name="(line665)"></a>                     hx <font color=Red>=</font> toHType x
+<a name="(line666)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>List1 a<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="(line667)"></a>    toContents <font color=Cyan>(</font>NonEmpty xs<font color=Cyan>)</font> <font color=Red>=</font> concatMap toContents xs
+<a name="(line668)"></a>    parseContents <font color=Red>=</font> fmap NonEmpty <font color=Cyan>$</font> many1 parseContents
+<a name="(line669)"></a>
+<a name="(line670)"></a><font color=Green><u>instance</u></font> HTypeable ANYContent <font color=Green><u>where</u></font>
+<a name="(line671)"></a>    toHType <font color=Green><u>_</u></font>      <font color=Red>=</font> Prim <font color=Magenta>"ANYContent"</font> <font color=Magenta>"ANY"</font>
+<a name="(line672)"></a><font color=Green><u>instance</u></font> XmlContent ANYContent <font color=Green><u>where</u></font>
+<a name="(line673)"></a>    toContents <font color=Cyan>(</font>ANYContent a<font color=Cyan>)</font>  <font color=Red>=</font> toContents a
+<a name="(line674)"></a>    toContents <font color=Cyan>(</font>UnConverted s<font color=Cyan>)</font> <font color=Red>=</font> map <font color=Cyan>(</font>fmap <font color=Cyan>(</font>const ()<font color=Cyan>)</font><font color=Cyan>)</font> s
+<a name="(line675)"></a>    parseContents <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>cs <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>UnConverted cs<font color=Cyan>)</font><font color=Cyan>,</font> []<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="(line676)"></a>
+<a name="(line677)"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="(line678)"></a><font color=Blue>--</font>
+<a name="(line679)"></a><font color=Blue>------------------------------------------------------------------------</font>
 </pre>
 </html>
diff --git a/docs/changelog.html b/docs/changelog.html
--- a/docs/changelog.html
+++ b/docs/changelog.html
@@ -20,7 +20,9 @@
      in the XtractLazy tool.
 <li> Version 1.19.2 updates the Cabal file to enable HaXml to build with both
      ghc-6.6.x and ghc-6.8.x.
-
+<li> Version 1.19.3 fixes an incompatibility with some versions of the
+     Bytestring package.  Also has a bugfix in the DTD validator, and
+     adds some new utility functions in Text.XML.HaXml.Util.
 </ul>
 
 <h3>Changes in 1.18</h3>
diff --git a/docs/index.html b/docs/index.html
--- a/docs/index.html
+++ b/docs/index.html
@@ -132,10 +132,11 @@
 <center><h3><a name="download">Downloads</a></h3></center>
 <p>
 <b>Development versions:</b><br>
-HaXml-1.19.2, release date 2008.01.14<br>
+HaXml-1.19.3, release date 2008.06.17<br>
+From <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HaXml">Hackage</a><br>
 By HTTP:
-<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.2.tar.gz">.tar.gz</a>,
-<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.2.zip">.zip</a>.
+<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.3.tar.gz">.tar.gz</a>,
+<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.3.zip">.zip</a>.
 <br>
 By FTP: 
 <a href="ftp://ftp.cs.york.ac.uk/pub/haskell/HaXml/">
@@ -202,6 +203,8 @@
 <center><h3><a name="news">Recent news</a></h3></center>
 
 <p>
+Version 1.19.3 has some minor bugfixes to increase compatibility with the
+ByteString package.<br>
 Version 1.19.2 updates the Cabal file to enable HaXml to build with both
 ghc-6.6.x and ghc-6.8.x.<br>
 Version 1.19.1 fixes a build error in 1.19.<br>
diff --git a/src/Makefile b/src/Makefile
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,5 +1,5 @@
 SOFTWARE = HaXml
-VERSION = 1.19.2
+VERSION = 1.19.3
 
 LIBSRCS = \
 	Text/XML/HaXml.hs Text/XML/HaXml/Combinators.hs Text/XML/HaXml/Lex.hs \
diff --git a/src/Text/XML/HaXml/ByteStringPP.hs b/src/Text/XML/HaXml/ByteStringPP.hs
--- a/src/Text/XML/HaXml/ByteStringPP.hs
+++ b/src/Text/XML/HaXml/ByteStringPP.hs
@@ -22,51 +22,55 @@
 
 import Prelude hiding (maybe,either,elem,concat)
 import Maybe hiding (maybe)
-import Data.List (intersperse) 
+import Data.List (intersperse)
 --import Data.ByteString.Lazy hiding (pack,map,head,any,singleton,intersperse,join)
-import Data.ByteString.Lazy.Char8 (ByteString(), concat, pack, singleton, join
+import Data.ByteString.Lazy.Char8 (ByteString(), concat, pack, singleton, intercalate
                                   , append, elem, empty)
 import Text.XML.HaXml.Types
 
-either f g (Left x)  = f x
-either f g (Right x) = g x
+either :: (t -> t1) -> (t2 -> t1) -> Either t t2 -> t1
+either f _ (Left x)  = f x
+either _ g (Right x) = g x
 
-maybe f Nothing  = empty
+maybe :: (t -> ByteString) -> Maybe t -> ByteString
+maybe _ Nothing  = empty
 maybe f (Just x) = f x
 
 
 -- A simple implementation of the pretty-printing combinator interface,
 -- but for plain ByteStrings:
-infixl 6 <> 
+infixl 6 <>
 infixl 6 <+>
-infixl 5 $$, $+$
+infixl 5 $$
 (<>)   :: ByteString   -> ByteString -> ByteString -- Beside
-hcat   :: [ByteString] -> ByteString		   -- List version of <>
+hcat   :: [ByteString] -> ByteString                 -- List version of <>
 (<+>)  :: ByteString   -> ByteString -> ByteString -- Beside, separated by space
-hsep   :: [ByteString] -> ByteString		   -- List version of <+>
+hsep   :: [ByteString] -> ByteString                 -- List version of <+>
 ($$)   :: ByteString   -> ByteString -> ByteString -- Above; if there is no
                                                    -- overlap, it "dovetails"
 vcat   :: [ByteString] -> ByteString       -- List version of $$
-cat    :: [ByteString] -> ByteString       -- Either hcat or vcat
+-- cat    :: [ByteString] -> ByteString       -- Either hcat or vcat
 sep    :: [ByteString] -> ByteString       -- Either hsep or vcat
-fcat   :: [ByteString] -> ByteString       -- ``Paragraph fill'' version of cat
+-- fcat   :: [ByteString] -> ByteString       -- ``Paragraph fill'' version of cat
 fsep   :: [ByteString] -> ByteString       -- ``Paragraph fill'' version of sep
 nest   :: Int -> ByteString -> ByteString  -- Nested
 
 (<>)  b1 b2  = b1 `append` b2
 (<+>) b1 b2  = b1 <> pack " " <> b2
 ($$)  b1 b2  = b1 <> pack "\n" <> b2
-($+$)        = ($$)
+-- ($+$)        = ($$)
 
-hcat = Data.ByteString.Lazy.Char8.concat 
-hsep = Data.ByteString.Lazy.Char8.join (singleton ' ')
-vcat = Data.ByteString.Lazy.Char8.join (singleton '\n')
-cat  = hcat
+hcat = Data.ByteString.Lazy.Char8.concat
+hsep = Data.ByteString.Lazy.Char8.intercalate (singleton ' ')
+vcat = Data.ByteString.Lazy.Char8.intercalate (singleton '\n')
+_  = hcat
 sep  = hsep
+text :: [Char] -> ByteString
 text = pack
-fcat = cat
+-- _ = cat
 fsep = sep
 nest _ b = pack " " <> b
+parens :: ByteString -> ByteString
 parens p = pack "(" <> p <> pack ")"
 
 
@@ -82,8 +86,8 @@
 
 doctypedecl   :: DocTypeDecl   -> ByteString
 markupdecl    :: MarkupDecl    -> ByteString
-extsubset     :: ExtSubset     -> ByteString
-extsubsetdecl :: ExtSubsetDecl -> ByteString
+-- extsubset     :: ExtSubset     -> ByteString
+-- extsubsetdecl :: ExtSubsetDecl -> ByteString
 cp            :: CP            -> ByteString
 
 element   :: Element i -> ByteString
@@ -105,7 +109,7 @@
 misc (PI (n,s))            = text "<?" <> text n <+> text s <+> text "?>"
 sddecl sd   | sd           = text "standalone='yes'"
             | otherwise    = text "standalone='no'"
-doctypedecl (DTD n eid ds) = if Prelude.null ds then 
+doctypedecl (DTD n eid ds) = if Prelude.null ds then
                                   hd <> text ">"
                              else hd <+> text " [" $$
                                   vcat (Prelude.map markupdecl ds) $$ text "]>"
@@ -117,10 +121,10 @@
 markupdecl (Notation n)    = notationdecl n
 markupdecl (MarkupMisc m)  = misc m
 --markupdecl (MarkupPE p m)  = peref p
-extsubset (ExtSubset t ds) = maybe textdecl t $$
-                             vcat (Prelude.map extsubsetdecl ds)
-extsubsetdecl (ExtMarkupDecl m)      = markupdecl m
-extsubsetdecl (ExtConditionalSect c) = conditionalsect c
+-- _ (ExtSubset t ds) = maybe textdecl t $$
+--                             vcat (Prelude.map extsubsetdecl ds)
+-- _ (ExtMarkupDecl m)      = markupdecl m
+-- extsubsetdecl (ExtConditionalSect c) = conditionalsect c
 --extsubsetdecl (ExtPEReference p e)   = peref p
 
 element (Elem n as []) = text "<" <> text n <+>
@@ -135,15 +139,17 @@
     | otherwise        = let (d,c) = carryelem e empty
                          in d <> c
 
+isText :: Content t -> Bool
 isText (CString _ _ _) = True
 isText (CRef _ _)      = True
 isText _               = False
 
+carryelem :: Element t -> ByteString -> (ByteString, ByteString)
 carryelem (Elem n as []) c
                        = ( c <>
                            text "<" <> text n <+> fsep (Prelude.map attribute as)
                          , text "/>")
-carryelem e@(Elem n as cs) c
+carryelem (Elem n as cs) c
 --  | any isText cs    =  ( c <> element e, empty)
     | otherwise        =  let (cs0,d0) = carryscan carrycontent cs (text ">")
                           in
@@ -152,6 +158,7 @@
                             nest 2 (vcat cs0) <> --- $$
                             d0 <> text "</" <> text n
                           , text ">")
+carrycontent :: Content t -> ByteString -> (ByteString, ByteString)
 carrycontent (CElem e _) c   = carryelem e c
 carrycontent (CString False s _) c = (c <> chardata s, empty)
 carrycontent (CString True  s _) c = (c <> cdsect s, empty)
@@ -159,7 +166,7 @@
 carrycontent (CMisc m _) c   = (c <> misc m, empty)
 
 carryscan :: (a->c->(b,c)) -> [a] -> c -> ([b],c)
-carryscan f []     c = ([],c)
+carryscan _ []     c = ([],c)
 carryscan f (a:as) c = let (b, c0) = f a c
                            (bs,c1) = carryscan f as c0
                        in (b:bs, c1)
@@ -189,8 +196,10 @@
 content (CRef r _)          = reference r
 content (CMisc m _)         = misc m
 
+elementdecl :: ElementDecl -> ByteString
 elementdecl (ElementDecl n cs) = text "<!ELEMENT" <+> text n <+>
                                  contentspec cs <> text ">"
+contentspec :: ContentSpec -> ByteString
 contentspec EMPTY              = text "EMPTY"
 contentspec ANY                = text "ANY"
 contentspec (Mixed m)          = mixed m
@@ -202,21 +211,27 @@
 cp (Seq cs m)          = parens (hcat (intersperse (text ",") (Prelude.map cp cs))) <>
                            modifier m
 --cp (CPPE p c)          = peref p
+modifier :: Modifier -> ByteString
 modifier None          = empty
 modifier Query         = text "?"
 modifier Star          = text "*"
 modifier Plus          = text "+"
+mixed :: Mixed -> ByteString
 mixed  PCDATA          = text "(#PCDATA)"
 mixed (PCDATAplus ns)  = text "(#PCDATA |" <+>
                          hcat (intersperse (text "|") (Prelude.map text ns)) <>
                          text ")*"
 
+attlistdecl :: AttListDecl -> ByteString
 attlistdecl (AttListDecl n ds) = text "<!ATTLIST" <+> text n <+>
                                  fsep (Prelude.map attdef ds) <> text ">"
+attdef :: AttDef -> ByteString
 attdef (AttDef n t d)          = text n <+> atttype t <+> defaultdecl d
+atttype :: AttType -> ByteString
 atttype  StringType            = text "CDATA"
 atttype (TokenizedType t)      = tokenizedtype t
 atttype (EnumeratedType t)     = enumeratedtype t
+tokenizedtype :: TokenizedType -> ByteString
 tokenizedtype ID               = text "ID"
 tokenizedtype IDREF            = text "IDREF"
 tokenizedtype IDREFS           = text "IDREFS"
@@ -224,75 +239,102 @@
 tokenizedtype ENTITIES         = text "ENTITIES"
 tokenizedtype NMTOKEN          = text "NMTOKEN"
 tokenizedtype NMTOKENS         = text "NMTOKENS"
+enumeratedtype :: EnumeratedType -> ByteString
 enumeratedtype (NotationType n)= notationtype n
 enumeratedtype (Enumeration e) = enumeration e
+notationtype :: [[Char]] -> ByteString
 notationtype ns                = text "NOTATION" <+>
                                  parens (hcat (intersperse (text "|") (Prelude.map text ns)))
+enumeration :: [[Char]] -> ByteString
 enumeration ns                 = parens (hcat (intersperse (text "|") (Prelude.map nmtoken ns)))
+defaultdecl :: DefaultDecl -> ByteString
 defaultdecl  REQUIRED          = text "#REQUIRED"
 defaultdecl  IMPLIED           = text "#IMPLIED"
 defaultdecl (DefaultTo a f)    = maybe (const (text "#FIXED")) f <+> attvalue a
-conditionalsect (IncludeSect i)= text "<![INCLUDE [" <+>
-                                 vcat (Prelude.map extsubsetdecl i) <+> text "]]>"
-conditionalsect (IgnoreSect i) = text "<![IGNORE [" <+>
-                                 fsep (Prelude.map ignoresectcontents i) <+> text "]]>"
-ignore (Ignore)                = empty
-ignoresectcontents (IgnoreSectContents i is)
-                               = ignore i <+> vcat (Prelude.map internal is)
-                          where internal (ics,i) = text "<![[" <+>
-                                                   ignoresectcontents ics <+>
-                                                   text "]]>" <+> ignore i
+--_ (IncludeSect i)= text "<![INCLUDE [" <+>
+--                                 vcat (Prelude.map extsubsetdecl i) <+> text "]]>"
+-- conditionalsect (IgnoreSect i) = text "<![IGNORE [" <+>
+--                                  fsep (Prelude.map ignoresectcontents i) <+> text "]]>"
+-- -- _ (Ignore)                = empty
+-- ignoresectcontents :: IgnoreSectContents -> ByteString
+-- _ (IgnoreSectContents i is)
+--                                = ignore i <+> vcat (Prelude.map internal is)
+--                           where internal (ics,i) = text "<![[" <+>
+--                                                    ignoresectcontents ics <+>
+--                                                    text "]]>" <+> ignore i
+reference :: Reference -> ByteString
 reference (RefEntity er)       = entityref er
 reference (RefChar cr)         = charref cr
+entityref :: [Char] -> ByteString
 entityref n                    = text "&" <> text n <> text ";"
+charref :: (Show a) => a -> ByteString
 charref c                      = text "&#" <> text (show c) <> text ";"
+entitydecl :: EntityDecl -> ByteString
 entitydecl (EntityGEDecl d)    = gedecl d
 entitydecl (EntityPEDecl d)    = pedecl d
+gedecl :: GEDecl -> ByteString
 gedecl (GEDecl n ed)           = text "<!ENTITY" <+> text n <+> entitydef ed <>
                                  text ">"
+pedecl :: PEDecl -> ByteString
 pedecl (PEDecl n pd)           = text "<!ENTITY %" <> text n <+> pedef pd <>
                                  text ">"
-entitydef (DefEntityValue ev)  = entityvalue ev
+entitydef :: EntityDef -> ByteString
+entitydef (DefEntityValue ew)  = entityvalue ew
 entitydef (DefExternalID i nd) = externalid i <+> maybe ndatadecl nd
-pedef (PEDefEntityValue ev)    = entityvalue ev
+pedef :: PEDef -> ByteString
+pedef (PEDefEntityValue ew)    = entityvalue ew
 pedef (PEDefExternalID eid)    = externalid eid
+externalid :: ExternalID -> ByteString
 externalid (SYSTEM sl)         = text "SYSTEM" <+> systemliteral sl
 externalid (PUBLIC i sl)       = text "PUBLIC" <+> pubidliteral i <+>
                                  systemliteral sl
+ndatadecl :: NDataDecl -> ByteString
 ndatadecl (NDATA n)            = text "NDATA" <+> text n
-textdecl (TextDecl vi ed)      = text "<?xml" <+> maybe text vi <+>
-                                 encodingdecl ed <> text "?>"
-extparsedent (ExtParsedEnt t c)= maybe textdecl t <+> content c
-extpe (ExtPE t esd)            = maybe textdecl t <+>
-                                 vcat (Prelude.map extsubsetdecl esd)
+-- _ (TextDecl vi ed)      = text "<?xml" <+> maybe text vi <+>
+--                                  encodingdecl ed <> text "?>"
+-- extparsedent :: ExtParsedEnt t -> ByteString
+-- _ (ExtParsedEnt t c)= maybe textdecl t <+> content c
+-- _ (ExtPE t esd)            = maybe textdecl t <+>
+--                                  vcat (Prelude.map extsubsetdecl esd)
+notationdecl :: NotationDecl -> ByteString
 notationdecl (NOTATION n e)    = text "<!NOTATION" <+> text n <+>
                                  either externalid publicid e <>
                                  text ">"
+publicid :: PublicID -> ByteString
 publicid (PUBLICID p)          = text "PUBLICID" <+> pubidliteral p
+encodingdecl :: EncodingDecl -> ByteString
 encodingdecl (EncodingDecl s)  = text "encoding='" <> text s <> text "'"
+nmtoken :: [Char] -> ByteString
 nmtoken s                      = text s
+attvalue :: AttValue -> ByteString
 attvalue (AttValue esr)        = text "\"" <>
                                  hcat (Prelude.map (either text reference) esr) <>
                                  text "\""
+entityvalue :: EntityValue -> ByteString
 entityvalue (EntityValue evs)
   | containsDoubleQuote evs    = text "'"  <> hcat (Prelude.map ev evs) <> text "'"
   | otherwise                  = text "\"" <> hcat (Prelude.map ev evs) <> text "\""
+ev :: EV -> ByteString
 ev (EVString s)                = text s
 --ev (EVPERef p e)               = peref p
 ev (EVRef r)                   = reference r
+pubidliteral :: PubidLiteral -> ByteString
 pubidliteral (PubidLiteral s)
     | toWord8 '"' `elem` (pack s) = text "'" <> text s <> text "'"
     | otherwise                = text "\"" <> text s <> text "\""
+systemliteral :: SystemLiteral -> ByteString
 systemliteral (SystemLiteral s)
     | toWord8 '"' `elem` (pack s) = text "'" <> text s <> text "'"
     | otherwise                = text "\"" <> text s <> text "\""
+chardata, cdsect :: [Char] -> ByteString
 chardata s                     = {-if all isSpace s then empty else-} text s
 cdsect c                       = text "<![CDATA[" <> chardata c <> text "]]>"
 
---toWord8 :: Char -> Word8
+-- toWord8 :: Char -> Word8
+toWord8 :: (Enum a, Enum a1) => a1 -> a
 toWord8 = toEnum . fromEnum
 
-----
+containsDoubleQuote :: [EV] -> Bool
 containsDoubleQuote evs = any csq evs
     where csq (EVString s) = toWord8 '"' `elem` (pack s)
           csq _            = False
diff --git a/src/Text/XML/HaXml/DtdToHaskell/Convert.hs b/src/Text/XML/HaXml/DtdToHaskell/Convert.hs
--- a/src/Text/XML/HaXml/DtdToHaskell/Convert.hs
+++ b/src/Text/XML/HaXml/DtdToHaskell/Convert.hs
@@ -13,7 +13,7 @@
 
 ---- Internal representation for database of DTD decls ----
 data Record = R [AttDef] ContentSpec
-type Db = [(String,Record)]
+-- type Db = [(String,Record)]
 
 
 ---- Build a database of DTD decls then convert them to typedefs ----
@@ -21,7 +21,7 @@
 ---- Apparently multiple ATTLIST decls for the same element are permitted,
 ---- although only one ELEMENT decl for it is allowed.
 dtd2TypeDef :: [MarkupDecl] -> [TypeDef]
-dtd2TypeDef mds = 
+dtd2TypeDef mds =
   (concatMap convert . reverse . database []) mds
   where
   database db [] = db
@@ -38,7 +38,7 @@
     --  (MarkupPE _ m') -> database db (m':ms)
         _ -> database db ms
 
-  replace n v [] = error "dtd2TypeDef.replace: no element to replace"
+  replace _ _ [] = error "dtd2TypeDef.replace: no element to replace"
   replace n v (x@(n0,_):db)
       | n==n0     = (n,v): db
       | otherwise = x: replace n v db
@@ -86,8 +86,8 @@
 mkData [ts] fs aux n  = [DataDef aux n fs [(n, ts)]]
 mkData tss  fs aux n  = [DataDef aux n fs (map (mkConstr n) tss)]
   where
-    mkConstr n ts = (mkConsName n ts, ts)
-    mkConsName (Name x n) sts = Name x (n++concat (intersperse "_" (map flatten sts)))
+    mkConstr m ts = (mkConsName m ts, ts)
+    mkConsName (Name x m) sts = Name x (m++concat (intersperse "_" (map flatten sts)))
     flatten (Maybe st)   = {-"Maybe_" ++ -} flatten st
     flatten (List st)    = {-"List_" ++ -} flatten st
     flatten (List1 st)   = {-"List1_" ++ -} flatten st
@@ -97,15 +97,16 @@
     flatten (OneOf sts)  = {-"OneOf" ++ show (length sts) ++ "_" ++ -}
                             concat (intersperse "_" (map flatten sts))
     flatten Any          = "Any"
-    flatten (Defined (Name _ n))  = n
+    flatten (Defined (Name _ m))  = m
 
-mkAttrDef e (AttDef n StringType def) =
+mkAttrDef :: String -> AttDef -> [TypeDef]
+mkAttrDef _ (AttDef _ StringType _) =
     []
-mkAttrDef e (AttDef n (TokenizedType t) def) =
+mkAttrDef _ (AttDef _ (TokenizedType _) _) =
     [] -- mkData [[String]] [] False (name n)
-mkAttrDef e (AttDef n (EnumeratedType (NotationType nt)) def) =
+mkAttrDef e (AttDef n (EnumeratedType (NotationType nt)) _) =
     [EnumDef (name_a e n) (map (name_ac e n) nt)]
-mkAttrDef e (AttDef n (EnumeratedType (Enumeration es)) def) =
+mkAttrDef e (AttDef n (EnumeratedType (Enumeration es)) _) =
     [EnumDef (name_a e n) (map (name_ac e n) es)]
         -- Default attribute values not handled here
 
@@ -114,13 +115,13 @@
   where
     mkType StringType REQUIRED = String
     mkType StringType IMPLIED  = Maybe String
-    mkType StringType (DefaultTo v@(AttValue _) f) = Defaultable String (show v)
+    mkType StringType (DefaultTo v@(AttValue _) _) = Defaultable String (show v)
     mkType (TokenizedType _) REQUIRED  = String
     mkType (TokenizedType _) IMPLIED   = Maybe String
-    mkType (TokenizedType _) (DefaultTo v@(AttValue _) f) =
-							Defaultable String (show v)
+    mkType (TokenizedType _) (DefaultTo v@(AttValue _) _) =
+                                                        Defaultable String (show v)
     mkType (EnumeratedType _) REQUIRED = Defined (name_a e n)
     mkType (EnumeratedType _) IMPLIED  = Maybe (Defined (name_a e n))
-    mkType (EnumeratedType _) (DefaultTo v@(AttValue _) f) =
-		Defaultable (Defined (name_a e n)) (hName (name_ac e n (show v)))
+    mkType (EnumeratedType _) (DefaultTo v@(AttValue _) _) =
+                Defaultable (Defined (name_a e n)) (hName (name_ac e n (show v)))
 
diff --git a/src/Text/XML/HaXml/DtdToHaskell/Instance.hs b/src/Text/XML/HaXml/DtdToHaskell/Instance.hs
--- a/src/Text/XML/HaXml/DtdToHaskell/Instance.hs
+++ b/src/Text/XML/HaXml/DtdToHaskell/Instance.hs
@@ -12,8 +12,8 @@
 mkInstance :: TypeDef -> Doc
 
 -- no constructors - represents an element with empty content but attributes.
-mkInstance (DataDef aux n fs []) =
-    let (frpat, frattr, topat, toattr) = attrpats fs
+mkInstance (DataDef _ n fs []) =
+    let (_, frattr, topat, toattr) = attrpats fs
         frretval = if null fs then ppHName n else frattr
         topatval = if null fs then ppHName n else topat
     in
@@ -81,9 +81,9 @@
 
 -- multiple constructors (real)
 mkInstance (DataDef False n fs cs) =
-    let vs = nameSupply cs
+    let _ = nameSupply cs
         (frpat, frattr, topat, toattr) = attrpats fs
-        mixattrs = if null fs then False else True
+        _ = if null fs then False else True
     in
     text "instance HTypeable" <+> ppHName n <+> text "where" $$
     nest 4 ( text "toHType x = Defined \"" <> ppXName n <> text "\" [] []" )
@@ -108,8 +108,8 @@
 
 -- multiple constructors (auxiliary)
 mkInstance (DataDef True n fs cs) =
-    let vs = nameSupply cs
-        (frpat, frattr, topat, toattr) = attrpats fs
+    let _ = nameSupply cs
+        (_, frattr, _, _) = attrpats fs
         mixattrs = if null fs then False else True
     in
     text "instance HTypeable" <+> ppHName n <+> text "where" $$
@@ -143,7 +143,7 @@
 data SameName = Same | Extended
 
 mkInstanceAttrs        :: SameName -> Name -> AttrFields -> Doc
-mkInstanceAttrs s n []  = empty
+mkInstanceAttrs _ _ []  = empty
 mkInstanceAttrs s n fs  =
     let ppName = case s of { Same-> ppHName;  Extended-> ppAName; }
     in
@@ -170,46 +170,46 @@
 
 
 
-mkFrElem :: Name -> [StructType] -> [Doc] -> Doc -> Doc
-mkFrElem n sts vs inner =
-    foldr (frElem n) inner (zip3 sts vs cvs)
-  where
-    cvs = let ns = nameSupply2 vs
-          in zip ns (text "c0": init ns)
-    frElem n (st,v,(cvi,cvo)) inner =
-        parens (text "\\" <> parens (v<>comma<>cvi) <> text "->" $$
-                nest 2 inner) $$
-        parens (
-          case st of
-            (Maybe String)  -> text "fromText" <+> cvo
-            (Maybe s)       -> text "fromElem" <+> cvo
-            (List String)   -> text "many fromText" <+> cvo
-            (List s)        -> text "many fromElem" <+> cvo
-            (List1 s)       -> text "definite fromElem"
-                               <+> text "\"" <> text (show s)<> text "+\""
-                               <+> text "\"" <> ppXName n <> text "\""
-                               <+> cvo
-            (Tuple ss)  -> text "definite fromElem"
-                           <+> text "\"(" <> hcat (intersperse (text ",")
-                                                           (map (text.show) ss))
-                                          <> text ")\""
-                           <+> text "\"" <> ppXName n <> text "\""
-                           <+> cvo
-            (OneOf ss)  -> text "definite fromElem"
-                           <+> text "\"OneOf\""
-                           <+> text "\"" <> ppXName n <> text "\""
-                           <+> cvo
-            (String)    -> text "definite fromText" <+> text "\"text\" \"" <>
-                                                 ppXName n <> text "\"" <+> cvo
-            (Any)       -> text "definite fromElem" <+> text "\"ANY\" \"" <>
-                                                 ppXName n <> text "\"" <+> cvo
-            (Defined m) -> text "definite fromElem" <+>
-				 text "\"<" <> ppXName m <> text ">\" \"" <>
-                                                 ppXName n <> text "\"" <+> cvo
-            (Defaultable _ _)  -> text "nyi_fromElem_Defaultable" <+> cvo
-          )
+-- mkFrElem :: Name -> [StructType] -> [Doc] -> Doc -> Doc
+-- mkFrElem n sts vs inner =
+--     foldr (frElem n) inner (zip3 sts vs cvs)
+--   where
+--     cvs = let ns = nameSupply2 vs
+--           in zip ns (text "c0": init ns)
+--     frElem _ (st,v,(cvi,cvo)) inner =
+--         parens (text "\\" <> parens (v<>comma<>cvi) <> text "->" $$
+--                 nest 2 inner) $$
+--         parens (
+--           case st of
+--             (Maybe String)  -> text "fromText" <+> cvo
+--             (Maybe _)       -> text "fromElem" <+> cvo
+--             (List String)   -> text "many fromText" <+> cvo
+--             (List _)        -> text "many fromElem" <+> cvo
+--             (List1 s)       -> text "definite fromElem"
+--                                <+> text "\"" <> text (show s)<> text "+\""
+--                                <+> text "\"" <> ppXName n <> text "\""
+--                                <+> cvo
+--             (Tuple ss)  -> text "definite fromElem"
+--                            <+> text "\"(" <> hcat (intersperse (text ",")
+--                                                            (map (text.show) ss))
+--                                           <> text ")\""
+--                            <+> text "\"" <> ppXName n <> text "\""
+--                            <+> cvo
+--             (OneOf _)  -> text "definite fromElem"
+--                            <+> text "\"OneOf\""
+--                            <+> text "\"" <> ppXName n <> text "\""
+--                            <+> cvo
+--             (String)    -> text "definite fromText" <+> text "\"text\" \"" <>
+--                                                  ppXName n <> text "\"" <+> cvo
+--             (Any)       -> text "definite fromElem" <+> text "\"ANY\" \"" <>
+--                                                  ppXName n <> text "\"" <+> cvo
+--             (Defined m) -> text "definite fromElem" <+>
+--                                  text "\"<" <> ppXName m <> text ">\" \"" <>
+--                                                  ppXName m <> text "\"" <+> cvo
+--             (Defaultable _ _)  -> text "nyi_fromElem_Defaultable" <+> cvo
+--           )
 
--- 
+--
 {-
 mkParseContents :: Name -> [StructType] -> [Doc] -> Doc -> Doc
 mkParseContents n sts vs inner =
@@ -223,24 +223,25 @@
         parens (
           )
 -}
-
+mkParseConstr :: Doc -> (Name, [StructType]) -> Doc
 mkParseConstr frattr (c,sts) =
         fsep (text "return" <+> parens (ppHName c <+> frattr)
              : map mkParseContents sts)
 
+mkParseContents :: StructType -> Doc
 mkParseContents st =
   let ap = text "`apply`" in
           case st of
             (Maybe String)  -> ap <+> text "optional text"
-            (Maybe s)       -> ap <+> text "optional parseContents"
+            (Maybe _)       -> ap <+> text "optional parseContents"
             (List String)   -> ap <+> text "many text"
-            (List s)        -> ap <+> text "many parseContents"
-            (List1 s)       -> ap <+> text "parseContents"
-            (Tuple ss)      -> ap <+> text "parseContents"
-            (OneOf ss)      -> ap <+> text "parseContents"
+            (List _)        -> ap <+> text "many parseContents"
+            (List1 _)       -> ap <+> text "parseContents"
+            (Tuple _)      -> ap <+> text "parseContents"
+            (OneOf _)      -> ap <+> text "parseContents"
             (String)        -> ap <+> text "(text `onFail` return \"\")"
             (Any)           -> ap <+> text "parseContents"
-            (Defined m)     -> ap <+> text "parseContents"
+            (Defined _)     -> ap <+> text "parseContents"
             (Defaultable _ _)  -> ap <+> text "nyi_fromElem_Defaultable"
 
 --
@@ -252,27 +253,27 @@
     toElem st v =
       case st of
         (Maybe String)  -> text "maybe [] toText" <+> v
-        (Maybe s)       -> text "maybe [] toContents" <+> v
+        (Maybe _)       -> text "maybe [] toContents" <+> v
         (List String)   -> text "concatMap toText" <+> v
-        (List s)        -> text "concatMap toContents" <+> v
-        (List1 s)       -> text "toContents" <+> v
-        (Tuple ss)      -> text "toContents" <+> v
-        (OneOf ss)      -> text "toContents" <+> v
+        (List _)        -> text "concatMap toContents" <+> v
+        (List1 _)       -> text "toContents" <+> v
+        (Tuple _)      -> text "toContents" <+> v
+        (OneOf _)      -> text "toContents" <+> v
         (String)        -> text "toText" <+> v
         (Any)           -> text "toContents" <+> v
-        (Defined m)     -> text "toContents" <+> v
+        (Defined _)     -> text "toContents" <+> v
         (Defaultable _ _)  -> text "nyi_toElem_Defaultable" <+> v
 
-mkRpat :: [Doc] -> Doc
-mkRpat [v] = v
-mkRpat vs  = (parens . hcat . intersperse comma) vs
+-- mkRpat :: [Doc] -> Doc
+-- mkRpat [v] = v
+-- mkRpat vs  = (parens . hcat . intersperse comma) vs
 
 mkCpat :: Name -> Doc -> [Doc] -> Doc
 mkCpat n i vs = ppHName n <+> i <+> fsep vs
 
-nameSupply,nameSupply2 :: [b] -> [Doc]
+nameSupply :: [b] -> [Doc]
 nameSupply  ss = take (length ss) (map char ['a'..])
-nameSupply2 ss = take (length ss) [ text ('c':v:[]) | v <- ['a'..]]
+-- nameSupply2 ss = take (length ss) [ text ('c':v:[]) | v <- ['a'..]]
 
 mkTranslate :: [Name] -> Doc
 mkTranslate es =
@@ -282,6 +283,7 @@
     trans n = text "translate \"" <> ppXName n <> text "\" =" <+>
               text "Just" <+> ppHName n
 
+mkToAttr :: Name -> Doc
 mkToAttr n = text "toAttrFrTyp n" <+> ppHName n <+> text "=" <+>
              text "Just (n, str2attr" <+> doubleQuotes (ppXName n) <> text ")"
 
@@ -290,14 +292,14 @@
     ppHName n <+> text "=" <+>
     ( case st of
         (Defaultable String s) -> text "defaultA fromAttrToStr" <+>
-						 doubleQuotes (text s)
+                                                 doubleQuotes (text s)
         (Defaultable _ s)      -> text "defaultA fromAttrToTyp" <+> text s
         (Maybe String)         -> text "possibleA fromAttrToStr"
         (Maybe _)              -> text "possibleA fromAttrToTyp"
         String                 -> text "definiteA fromAttrToStr" <+>
-						 doubleQuotes (ppXName tag)
+                                                 doubleQuotes (ppXName tag)
         _                      -> text "definiteA fromAttrToTyp" <+>
-						 doubleQuotes (ppXName tag)
+                                                 doubleQuotes (ppXName tag)
     ) <+> doubleQuotes (ppXName n) <+> text "as"
 
 mkToFld :: (Name,StructType) -> Doc
@@ -311,67 +313,67 @@
         _                      -> text "toAttrFrTyp"
     ) <+> doubleQuotes (ppXName n) <+> parens (ppHName n <+> text "v")
 
-mkFrAux :: Bool -> Doc -> [(Name,[StructType])] -> Doc
-mkFrAux keeprest attrs cs = foldr frAux inner cs
-  where
-    inner = text "(Nothing, c0)"
-    rest  = if keeprest then text "rest" else text "_"
-    frAux (n,sts) inner =
-        let vs  = nameSupply sts in
-        nest 4 (text "case" <+> blah sts vs <+> text "of" $$
-                succpat sts vs <+> text "-> (Just" <+>
-                                   parens (mkCpat n attrs vs) <> text ", rest)"
-                $$
-                failpat sts <+> text "->" $$ nest 4 inner
-               )
-    blah [st] [v] =
-        blahblahblah st (text "c0")
-    blah sts vs =
-        let ns = nameSupply2 vs
-            cvs = zip ns (text "c0": init ns)
-            blahblah (st,v,(cvi,cvo)) inner =
-                parens (text "\\" <> parens (v<>comma<>cvi) <> text "->" $$
-                        nest 2 inner) $$
-                blahblahblah st cvo
-        in
-        foldr blahblah (mkRpat (vs++[last ns])) (zip3 sts vs cvs)
-    blahblahblah st cvo = parens (
-        case st of
-          (Maybe String) -> text "fromText" <+> cvo
-          (Maybe s)      -> text "fromElem" <+> cvo
-          (List String)  -> text "many fromText" <+> cvo
-          (List s)       -> text "many fromElem" <+> cvo
-          (List1 s)      -> text "fromElem" <+> cvo
-          (Tuple ss)     -> text "fromElem" <+> cvo	-- ??
-          (OneOf ss)     -> text "fromElem" <+> cvo
-          (String)       -> text "fromText" <+> cvo
-          (Any)          -> text "fromElem" <+> cvo
-          (Defined m)    -> text "fromElem" <+> cvo
-        )
-    failpat sts =
-        let fp st =
-                case st of
-                  (Maybe s)   -> text "Nothing"
-                  (List s)    -> text "[]"
-                  (List1 s)   -> text "_"
-                  (Tuple ss)  -> text "_"
-                  (OneOf ss)  -> text "_"
-                  (String)    -> text "_"
-                  (Any)       -> text "_"
-                  (Defined m) -> text "_"
-        in parens (hcat (intersperse comma (map fp sts++[text "_"])))
-    succpat sts vs =
-        let sp st v =
-                case st of
-                  (Maybe s)   -> v
-                  (List s)    -> v
-                  (List1 s)   -> text "Just" <+> v
-                  (Tuple ss)  -> text "Just" <+> v
-                  (OneOf ss)  -> text "Just" <+> v
-                  (String)    -> text "Just" <+> v
-                  (Any)       -> text "Just" <+> v
-                  (Defined m) -> text "Just" <+> v
-        in parens (hcat (intersperse comma (zipWith sp sts vs++[rest])))
+-- mkFrAux :: Bool -> Doc -> [(Name,[StructType])] -> Doc
+-- mkFrAux keeprest attrs cs = foldr frAux inner cs
+--   where
+--     inner = text "(Nothing, c0)"
+--     rest  = if keeprest then text "rest" else text "_"
+--     frAux (n,sts) innr =
+--         let vs  = nameSupply sts in
+--         nest 4 (text "case" <+> blah sts vs <+> text "of" $$
+--                 succpat sts vs <+> text "-> (Just" <+>
+--                                    parens (mkCpat n attrs vs) <> text ", rest)"
+--                 $$
+--                 failpat sts <+> text "->" $$ nest 4 innr
+--                )
+--     blah [st] [_] =
+--         blahblahblah st (text "c0")
+--     blah sts vs =
+--         let ns = nameSupply2 vs
+--             cvs = zip ns (text "c0": init ns)
+--             blahblah (st,v,(cvi,cvo)) innr =
+--                 parens (text "\\" <> parens (v<>comma<>cvi) <> text "->" $$
+--                         nest 2 innr) $$
+--                 blahblahblah st cvo
+--         in
+--         foldr blahblah (mkRpat (vs++[last ns])) (zip3 sts vs cvs)
+--     blahblahblah st cvo = parens (
+--         case st of
+--           (Maybe String) -> text "fromText" <+> cvo
+--           (Maybe _)      -> text "fromElem" <+> cvo
+--           (List String)  -> text "many fromText" <+> cvo
+--           (List _)       -> text "many fromElem" <+> cvo
+--           (List1 _)      -> text "fromElem" <+> cvo
+--           (Tuple _)     -> text "fromElem" <+> cvo      -- ??
+--           (OneOf _)     -> text "fromElem" <+> cvo
+--           (String)       -> text "fromText" <+> cvo
+--           (Any)          -> text "fromElem" <+> cvo
+--           (Defined _)    -> text "fromElem" <+> cvo
+--         )
+--     failpat sts =
+--         let fp st =
+--                 case st of
+--                   (Maybe _)   -> text "Nothing"
+--                   (List _)    -> text "[]"
+--                   (List1 _)   -> text "_"
+--                   (Tuple _)  -> text "_"
+--                   (OneOf _)  -> text "_"
+--                   (String)    -> text "_"
+--                   (Any)       -> text "_"
+--                   (Defined _) -> text "_"
+--         in parens (hcat (intersperse comma (map fp sts++[text "_"])))
+--     succpat sts vs =
+--         let sp st v =
+--                 case st of
+--                   (Maybe _)   -> v
+--                   (List _)    -> v
+--                   (List1 _)   -> text "Just" <+> v
+--                   (Tuple _)  -> text "Just" <+> v
+--                   (OneOf _)  -> text "Just" <+> v
+--                   (String)    -> text "Just" <+> v
+--                   (Any)       -> text "Just" <+> v
+--                   (Defined _) -> text "Just" <+> v
+--         in parens (hcat (intersperse comma (zipWith sp sts vs++[rest])))
 
 mkToAux :: Bool -> (Name,[StructType]) -> Doc
 mkToAux mixattrs (n,sts) =
diff --git a/src/Text/XML/HaXml/DtdToHaskell/TypeDef.hs b/src/Text/XML/HaXml/DtdToHaskell/TypeDef.hs
--- a/src/Text/XML/HaXml/DtdToHaskell/TypeDef.hs
+++ b/src/Text/XML/HaXml/DtdToHaskell/TypeDef.hs
@@ -26,25 +26,25 @@
 ---- Internal representation for typedefs ----
 
 -- | Need to keep both the XML and Haskell versions of a name.
-data Name = Name { xName :: String	-- ^ original XML name
-		 , hName :: String	-- ^ mangled Haskell name
+data Name = Name { xName :: String       -- ^ original XML name
+                 , hName :: String       -- ^ mangled Haskell name
                  }
           deriving Eq
 
 data TypeDef =
-      DataDef Bool Name AttrFields Constructors	-- ^ Bool for main\/aux.
+      DataDef Bool Name AttrFields Constructors -- ^ Bool for main\/aux.
     | EnumDef Name [Name]
     deriving Eq
 type Constructors = [(Name,[StructType])]
 type AttrFields   = [(Name, StructType)]
 data StructType =
       Maybe StructType
-    | Defaultable StructType String	-- ^ String holds default value.
+    | Defaultable StructType String     -- ^ String holds default value.
     | List StructType
-    | List1 StructType			-- ^ Non-empty lists.
+    | List1 StructType                  -- ^ Non-empty lists.
     | Tuple [StructType]
     | OneOf [StructType]
-    | Any				-- ^ XML's contentspec allows ANY
+    | Any                               -- ^ XML's contentspec allows ANY
     | String
     | Defined Name
     deriving Eq
@@ -52,50 +52,50 @@
 -- used for converting StructType (roughly) back to an XML content model
 instance Show StructType where
     showsPrec p (Maybe s)         = showsPrec (p+1) s . showChar '?'
-    showsPrec p (Defaultable s _) = shows s
+    showsPrec _ (Defaultable s _) = shows s
     showsPrec p (List s)          = showsPrec (p+1) s . showChar '*'
     showsPrec p (List1 s)         = showsPrec (p+1) s . showChar '+'
-    showsPrec p (Tuple ss)        = showChar '('
+    showsPrec _ (Tuple ss)        = showChar '('
                                     . foldr1 (.) (intersperse (showChar ',')
                                                               (map shows ss))
                                     . showChar ')'
-    showsPrec p (OneOf ss)        = showChar '('
+    showsPrec _ (OneOf ss)        = showChar '('
                                     . foldr1 (.) (intersperse (showChar '|')
                                                               (map shows ss))
                                     . showChar ')'
-    showsPrec p (Any)             = showString "ANY"
-    showsPrec p (String)          = showString "#PCDATA"
-    showsPrec p (Defined (Name n _)) = showString n
+    showsPrec _ (Any)             = showString "ANY"
+    showsPrec _ (String)          = showString "#PCDATA"
+    showsPrec _ (Defined (Name n _)) = showString n
 
 
 ---- Pretty-printing typedefs ----
 ppTypeDef :: TypeDef -> Doc
 
---	no attrs, no constructors
+--      no attrs, no constructors
 ppTypeDef (DataDef _ n [] []) =
-    let name = ppHName n in
-    text "data" <+> name <+> text "=" <+> name <+> text "\t\t" <> derives
+    let nme = ppHName n in
+    text "data" <+> nme <+> text "=" <+> nme <+> text "\t\t" <> derives
 
---	no attrs, single constructor
+--      no attrs, single constructor
 ppTypeDef (DataDef _ n [] [c@(_,[_])]) =
     text "newtype" <+> ppHName n <+> text "=" <+> ppC c <+> text "\t\t" <> derives
 
---	no attrs, multiple constrs
+--      no attrs, multiple constrs
 ppTypeDef (DataDef _ n [] cs) =
     text "data" <+> ppHName n <+>
            ( text "=" <+> ppC (head cs) $$
              vcat (map (\c-> text "|" <+> ppC c) (tail cs)) $$
              derives )
 
---	nonzero attrs, no constructors
+--      nonzero attrs, no constructors
 ppTypeDef (DataDef _ n fs []) =
-    let name = ppHName n in
-    text "data" <+> name <+> text "=" <+> name $$
+    let nme = ppHName n in
+    text "data" <+> nme <+> text "=" <+> nme $$
     nest 4 ( text "{" <+> ppF (head fs) $$
              vcat (map (\f-> text "," <+> ppF f) (tail fs)) $$
              text "}" <+> derives )
 
---	nonzero attrs, one or more constrs
+--      nonzero attrs, one or more constrs
 ppTypeDef (DataDef _ n fs cs) =
     let attr = ppAName n in
     text "data" <+> ppHName n <+>
@@ -107,7 +107,7 @@
              vcat (map (\f-> text "," <+> ppF f) (tail fs)) $$
              text "}" <+> derives )
 
---	enumerations (of attribute values)
+--      enumerations (of attribute values)
 ppTypeDef (EnumDef n es) =
     text "data" <+> ppHName n <+>
     ( text "=" <+>
@@ -148,7 +148,8 @@
 -- | Pretty print Haskell attributes name.
 ppAName :: Name -> Doc
 ppAName (Name _ s) = text s <> text "_Attrs"
-                      
+
+derives :: Doc
 derives = text "deriving" <+> parens (commaList (map text ["Eq","Show"]))
 
 
@@ -195,39 +196,38 @@
 
 -- | Ensure a generated name does not conflict with a standard haskell one.
 notPrelude :: String -> String
-notPrelude "String"  = "AString"
-notPrelude "Maybe"   = "AMaybe"
-notPrelude "Either"  = "AEither"
+notPrelude "Bool"    = "ABool"
+notPrelude "Bounded" = "ABounded"
 notPrelude "Char"    = "AChar"
-notPrelude "String"  = "AString"
-notPrelude "Int"     = "AInt"
-notPrelude "Integer" = "AInteger"
-notPrelude "Float"   = "AFloat"
 notPrelude "Double"  = "ADouble"
-notPrelude "List1"   = "AList1"	-- part of HaXml
-notPrelude "IO"      = "AIO"
-notPrelude "IOError" = "AIOError"
-notPrelude "FilePath"= "AFilePath"
-notPrelude "Bool"    = "ABool"
-notPrelude "Ordering"= "AOrdering"
-notPrelude "Eq"      = "AEq"
-notPrelude "Ord"     = "AOrd"
+notPrelude "Either"  = "AEither"
 notPrelude "Enum"    = "AEnum"
-notPrelude "Bounded" = "ABounded"
+notPrelude "Eq"      = "AEq"
+notPrelude "FilePath"= "AFilePath"
+notPrelude "Float"   = "AFloat"
+notPrelude "Floating"= "AFloating"
+notPrelude "Fractional"= "AFractional"
 notPrelude "Functor" = "AFunctor"
-notPrelude "Monad"   = "AMonad"
-notPrelude "Rational"= "ARational"
+notPrelude "IO"      = "AIO"
+notPrelude "IOError" = "AIOError"
+notPrelude "Int"     = "AInt"
+notPrelude "Integer" = "AInteger"
 notPrelude "Integral"= "AIntegral"
+notPrelude "List1"   = "AList1" -- part of HaXml
+notPrelude "Maybe"   = "AMaybe"
+notPrelude "Monad"   = "AMonad"
 notPrelude "Num"     = "ANum"
+notPrelude "Ord"     = "AOrd"
+notPrelude "Ordering"= "AOrdering"
+notPrelude "Rational"= "ARational"
+notPrelude "Read"    = "ARead"
+notPrelude "ReadS"   = "AReadS"
 notPrelude "Real"    = "AReal"
-notPrelude "RealFrac"= "ARealFrac"
-notPrelude "Floating"= "AFloating"
 notPrelude "RealFloat" = "ARealFloat"
-notPrelude "Fractional"= "AFractional"
-notPrelude "Read"    = "ARead"
+notPrelude "RealFrac"= "ARealFrac"
 notPrelude "Show"    = "AShow"
-notPrelude "ReadS"   = "AReadS"
 notPrelude "ShowS"   = "AShowS"
+notPrelude "String"  = "AString"
 notPrelude n         = n
 
 -- | Convert an XML name to a Haskell varid.
@@ -244,4 +244,5 @@
 decolonify '.' = '_'
 decolonify  c  = c
 
+commaList :: [Doc] -> Doc
 commaList = hcat . intersperse comma
diff --git a/src/Text/XML/HaXml/Escape.hs b/src/Text/XML/HaXml/Escape.hs
--- a/src/Text/XML/HaXml/Escape.hs
+++ b/src/Text/XML/HaXml/Escape.hs
@@ -1,5 +1,5 @@
 {- This module contains code for escaping/unescaping text in attributes
-   and elements in the HaXml Element type, replacing characters by character 
+   and elements in the HaXml Element type, replacing characters by character
    references or vice-versa.  Two uses are envisaged for this:
 
    (1) stopping HaXml generating incorrect XML when a character is included
@@ -21,7 +21,7 @@
       -- Something describing a particular set of escapes.
 
    stdXmlEscaper,
-      -- Standard boilerplate escaper, escaping everything that is 
+      -- Standard boilerplate escaper, escaping everything that is
       -- nonprintable, non-ASCII, or might conceivably cause problems by
       -- parsing XML, for example quotes, < signs, and ampersands.
 
@@ -56,7 +56,7 @@
    ) where
 
 import Char
-import Numeric
+-- import Numeric
 import Text.XML.HaXml.Types
 
 #if __GLASGOW_HASKELL__ >= 604 || __NHC__ >= 118 || defined(__HUGS__)
@@ -98,16 +98,16 @@
 
 
 xmlEscape :: XmlEscaper -> Element i -> Element i
-xmlEscape xmlEscaper element = 
+xmlEscape xmlEscaper element =
    compressElement (escapeElement xmlEscaper element)
 
 xmlEscapeContent :: XmlEscaper -> [Content i] -> [Content i]
-xmlEscapeContent xmlEscaper cs = 
+xmlEscapeContent xmlEscaper cs =
    compressContent (escapeContent xmlEscaper cs)
 
 escapeElement :: XmlEscaper -> Element i -> Element i
 escapeElement xmlEscaper (Elem name attributes content) =
-   Elem name (escapeAttributes xmlEscaper attributes) 
+   Elem name (escapeAttributes xmlEscaper attributes)
       (escapeContent xmlEscaper content)
 
 escapeAttributes :: XmlEscaper -> [Attribute] -> [Attribute]
@@ -115,23 +115,23 @@
    map
       (\ (name,av) -> (name,escapeAttValue xmlEscaper av))
       atts
-   
+
 escapeAttValue :: XmlEscaper -> AttValue -> AttValue
 escapeAttValue xmlEscaper (AttValue attValList) =
    AttValue (
-      concat ( 
+      concat (
          map
             (\ av -> case av of
-               Right ref -> [av]
+               Right _ -> [av]
                Left s ->
                   map
-                     (\ c -> if isEscape xmlEscaper c 
+                     (\ c -> if isEscape xmlEscaper c
                         then
                            Right (mkEscape xmlEscaper c)
                         else
                            Left [c]
                         )
-                     s 
+                     s
                )
             attValList
          )
@@ -151,20 +151,20 @@
                          CString b [c] i
                       )
                    str
-             (CElem elem i) -> [CElem (escapeElement xmlEscaper elem) i]
+             (CElem element i) -> [CElem (escapeElement xmlEscaper element) i]
              _ -> [content]
              )
           contents
           )
 
 mkEscape :: XmlEscaper -> Char -> Reference
-mkEscape (XmlEscaper {toEscape = toEscape}) ch =
-   case lookupFM toEscape ch of
+mkEscape (XmlEscaper {toEscape = toescape}) ch =
+   case lookupFM toescape ch of
       Nothing  -> RefChar (ord ch)
       Just str -> RefEntity str
-   where
-      showHex = showIntAtBase 16 intToDigit 
-      -- It should be, but in GHC it isn't.
+--    where
+--       _ = showIntAtBase 16 intToDigit
+--       -- It should be, but in GHC it isn't.
 
 -- ------------------------------------------------------------------------
 -- Unescaping
@@ -175,7 +175,7 @@
    compressElement (unEscapeElement xmlEscaper element)
 
 xmlUnEscapeContent :: XmlEscaper -> [Content i] -> [Content i]
-xmlUnEscapeContent xmlEscaper cs = 
+xmlUnEscapeContent xmlEscaper cs =
    compressContent (unEscapeContent xmlEscaper cs)
 
 unEscapeElement :: XmlEscaper -> Element i -> Element i
@@ -194,7 +194,7 @@
    AttValue (
       map
          (\ av -> case av of
-            Left s -> av
+            Left _ -> av
             Right ref -> case unEscapeChar xmlEscaper ref of
                Just c -> Left [c]
                Nothing -> av
@@ -205,12 +205,12 @@
 unEscapeContent :: XmlEscaper -> [Content i] -> [Content i]
 unEscapeContent xmlEscaper content =
    map
-      (\ content -> case content of
+      (\ cntnt -> case cntnt of
          CRef ref i -> case unEscapeChar xmlEscaper ref of
             Just c -> CString False [c] i
-            Nothing -> content
-         CElem elem i -> CElem (unEscapeElement xmlEscaper elem) i
-         _ -> content
+            Nothing -> cntnt
+         CElem element i -> CElem (unEscapeElement xmlEscaper element) i
+         _ -> cntnt
          )
       content
 
@@ -250,11 +250,11 @@
 compressContent [] = []
 compressContent ((csb @ (CString b1 s1 i1)) : cs) =
    case compressContent cs of
-      (CString b2 s2 i2) : cs2
+      (CString b2 s2 _) : cs2
           | b1 == b2
           -> CString b1 (s1 ++ s2) i1: cs2
       cs2 -> csb : cs2
-compressContent (CElem element i : cs) = 
+compressContent (CElem element i : cs) =
    CElem (compressElement element) i : compressContent cs
 compressContent (c : cs) = c : compressContent cs
 
@@ -266,7 +266,7 @@
 stdXmlEscaper :: XmlEscaper
 stdXmlEscaper = mkXmlEscaper
    [('\60',"lt"),('\62',"gt"),('\38',"amp"),('\39',"apos"),('\34',"quot")]
-   (\ ch -> 
+   (\ ch ->
       let
          i = ord ch
       in
@@ -279,13 +279,13 @@
                '>' -> True
                _ -> False
       )
-             
-            
+
+
 mkXmlEscaper :: [(Char,String)] -> (Char -> Bool) -> XmlEscaper
-mkXmlEscaper escapes isEscape =
+mkXmlEscaper escapes isescape =
    XmlEscaper {
       toEscape = listToFM escapes,
       fromEscape = listToFM (map (\ (c,str) -> (str,c)) escapes),
-      isEscape = isEscape
+      isEscape = isescape
       }
 
diff --git a/src/Text/XML/HaXml/Html/Generate.hs b/src/Text/XML/HaXml/Html/Generate.hs
--- a/src/Text/XML/HaXml/Html/Generate.hs
+++ b/src/Text/XML/HaXml/Html/Generate.hs
@@ -29,7 +29,6 @@
   ) where
 
 import Char (isSpace)
-import List (partition)
 
 import Text.XML.HaXml.Types
 import Text.XML.HaXml.Combinators
@@ -94,41 +93,41 @@
 -- htmlprint :: [Content] -> String
 -- htmlprint = concatMap cprint
 --   where
---   cprint (CElem e _) = elem e 
+--   cprint (CElem e _) = elem e
 --   cprint (CString _ s) = s
 --   cprint (CMisc m) = ""
---  
+--
 --   elem (Elem n as []) = "\n<"++n++attrs as++" />"
 --   elem (Elem n as cs) = "\n<"++n++attrs as++">"++htmlprint cs++"\n</"++n++">"
--- 
+--
 --   attrs = concatMap attr
 --   attr (n,v) = " "++n++"='"++v++"'"
 
 
 htmlprint :: [Content i] -> Pretty.Doc
-htmlprint = Pretty.cat . map cprint . foldrefs 
+htmlprint = Pretty.cat . map cprint . foldrefs
   where
   foldrefs [] = []
   foldrefs (CString ws s1 i:CRef r _:CString _ s2 _:cs) =
               CString ws (s1++"&"++ref r++";"++s2) i: foldrefs cs
   foldrefs (c:cs) = c : foldrefs cs
 
---ref (RefEntity (EntityRef n)) = n	-- Actually, should look-up symtable.
+--ref (RefEntity (EntityRef n)) = n     -- Actually, should look-up symtable.
 --ref (RefChar (CharRef s)) = s
-  ref (RefEntity n) = n	-- Actually, should look-up symtable.
+  ref (RefEntity n) = n -- Actually, should look-up symtable.
   ref (RefChar s) = show s
 
-  cprint (CElem e _)      = elem e
+  cprint (CElem e _)      = element e
   cprint (CString ws s _) = Pretty.cat (map Pretty.text (fmt 60
                                              ((if ws then id else deSpace) s)))
   cprint (CRef r _)       = Pretty.text ("&"++ref r++";")
-  cprint (CMisc m _)      = Pretty.empty
- 
-  elem (Elem n as []) = Pretty.text "<"   Pretty.<>
+  cprint (CMisc _ _)      = Pretty.empty
+
+  element (Elem n as []) = Pretty.text "<"   Pretty.<>
                         Pretty.text n     Pretty.<>
                         attrs as          Pretty.<>
                         Pretty.text " />"
-  elem (Elem n as cs) =
+  element (Elem n as cs) =
                     --  ( Pretty.text "<"   Pretty.<>
                     --    Pretty.text n     Pretty.<>
                     --    attrs as          Pretty.<>
@@ -147,15 +146,15 @@
                                         Pretty.text ">" )
                                     ]
 
-  attrs = Pretty.cat . map attr
-  attr (n,v@(AttValue _)) =
+  attrs = Pretty.cat . map attribute
+  attribute (n,v@(AttValue _)) =
                Pretty.text " "  Pretty.<>
                Pretty.text n    Pretty.<>
                Pretty.text "='" Pretty.<>
                Pretty.text (show v) Pretty.<>
                Pretty.text "'"
 
-  fmt n [] = []
+  fmt _ [] = []
   fmt n s  = let (top,bot) = splitAt n s
                  (word,left) = keepUntil isSpace (reverse top)
              in if length top < n then [s]
@@ -170,6 +169,7 @@
                  | otherwise = c : deSpace cs
 
   keepUntil p xs = select p ([],xs)
-      where select p (ls,[])     = (ls,[])
-            select p (ls,(x:xs)) | p x       = (ls,x:xs)
-                                 | otherwise = select p (x:ls,xs)
+      where select _ (ls,[])     = (ls,[])
+            select q (ls,(y:ys)) | q y       = (ls,y:ys)
+                                 | otherwise = select q (y:ls,ys)
+
diff --git a/src/Text/XML/HaXml/OneOfN.hs b/src/Text/XML/HaXml/OneOfN.hs
--- a/src/Text/XML/HaXml/OneOfN.hs
+++ b/src/Text/XML/HaXml/OneOfN.hs
@@ -8,7 +8,7 @@
 
 instance (HTypeable a,HTypeable b)
     => HTypeable (OneOf2 a b)
-  where      toHType m = Defined "OneOf2" [] []
+  where      toHType _ = Defined "OneOf2" [] []
   --         toHType m = Defined "OneOf2" [a,b] []
   --            where a = toHType $ (\ (OneOf2 a)->a) $ m
   --                  b = toHType $ (\ (TwoOf2 b)->b) $ m
@@ -30,7 +30,7 @@
 
 instance (HTypeable a,HTypeable b,HTypeable c)
     => HTypeable (OneOf3 a b c)
-  where      toHType m = Defined "OneOf3" [] []
+  where      toHType _ = Defined "OneOf3" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c)
     => XmlContent (OneOf3 a b c)
@@ -49,7 +49,7 @@
 
 instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d)
     => HTypeable (OneOf4 a b c d)
-  where      toHType m = Defined "OneOf4" [] []
+  where      toHType _ = Defined "OneOf4" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d)
     => XmlContent (OneOf4 a b c d)
@@ -69,7 +69,7 @@
 
 instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e)
     => HTypeable (OneOf5 a b c d e)
-  where      toHType m = Defined "OneOf5" [] []
+  where      toHType _ = Defined "OneOf5" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e)
     => XmlContent (OneOf5 a b c d e)
@@ -92,7 +92,7 @@
 instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e
           ,HTypeable f)
     => HTypeable (OneOf6 a b c d e f)
-  where      toHType m = Defined "OneOf6" [] []
+  where      toHType _ = Defined "OneOf6" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f)
@@ -118,7 +118,7 @@
 instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e
           ,HTypeable f,HTypeable g)
     => HTypeable (OneOf7 a b c d e f g)
-  where      toHType m = Defined "OneOf7" [] []
+  where      toHType _ = Defined "OneOf7" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f,XmlContent g)
@@ -145,7 +145,7 @@
 instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e
           ,HTypeable f,HTypeable g,HTypeable h)
     => HTypeable (OneOf8 a b c d e f g h)
-  where      toHType m = Defined "OneOf8" [] []
+  where      toHType _ = Defined "OneOf8" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f,XmlContent g,XmlContent h)
@@ -173,7 +173,7 @@
 instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e
           ,HTypeable f,HTypeable g,HTypeable h,HTypeable i)
     => HTypeable (OneOf9 a b c d e f g h i)
-  where      toHType m = Defined "OneOf9" [] []
+  where      toHType _ = Defined "OneOf9" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i)
@@ -203,7 +203,7 @@
 instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e
           ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j)
     => HTypeable (OneOf10 a b c d e f g h i j)
-  where      toHType m = Defined "OneOf10" [] []
+  where      toHType _ = Defined "OneOf10" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j)
@@ -236,7 +236,7 @@
           ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j
           ,HTypeable k)
     => HTypeable (OneOf11 a b c d e f g h i j k)
-  where      toHType m = Defined "OneOf11" [] []
+  where      toHType _ = Defined "OneOf11" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j
@@ -272,7 +272,7 @@
           ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j
           ,HTypeable k,HTypeable l)
     => HTypeable (OneOf12 a b c d e f g h i j k l)
-  where      toHType m = Defined "OneOf12" [] []
+  where      toHType _ = Defined "OneOf12" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j
@@ -309,7 +309,7 @@
           ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j
           ,HTypeable k,HTypeable l,HTypeable m)
     => HTypeable (OneOf13 a b c d e f g h i j k l m)
-  where      toHType m = Defined "OneOf13" [] []
+  where      toHType _ = Defined "OneOf13" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j
@@ -347,7 +347,7 @@
           ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j
           ,HTypeable k,HTypeable l,HTypeable m,HTypeable n)
     => HTypeable (OneOf14 a b c d e f g h i j k l m n)
-  where      toHType m = Defined "OneOf14" [] []
+  where      toHType _ = Defined "OneOf14" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j
@@ -388,7 +388,7 @@
           ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j
           ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o)
     => HTypeable (OneOf15 a b c d e f g h i j k l m n o)
-  where      toHType m = Defined "OneOf15" [] []
+  where      toHType _ = Defined "OneOf15" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j
@@ -431,7 +431,7 @@
           ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o
           ,HTypeable p)
     => HTypeable (OneOf16 a b c d e f g h i j k l m n o p)
-  where      toHType m = Defined "OneOf16" [] []
+  where      toHType _ = Defined "OneOf16" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j
@@ -476,7 +476,7 @@
           ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o
           ,HTypeable p,HTypeable q)
     => HTypeable (OneOf17 a b c d e f g h i j k l m n o p q)
-  where      toHType m = Defined "OneOf17" [] []
+  where      toHType _ = Defined "OneOf17" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j
@@ -523,7 +523,7 @@
           ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o
           ,HTypeable p,HTypeable q,HTypeable r)
     => HTypeable (OneOf18 a b c d e f g h i j k l m n o p q r)
-  where      toHType m = Defined "OneOf18" [] []
+  where      toHType _ = Defined "OneOf18" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j
@@ -572,7 +572,7 @@
           ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o
           ,HTypeable p,HTypeable q,HTypeable r,HTypeable s)
     => HTypeable (OneOf19 a b c d e f g h i j k l m n o p q r s)
-  where      toHType m = Defined "OneOf19" [] []
+  where      toHType _ = Defined "OneOf19" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j
@@ -622,7 +622,7 @@
           ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o
           ,HTypeable p,HTypeable q,HTypeable r,HTypeable s,HTypeable t)
     => HTypeable (OneOf20 a b c d e f g h i j k l m n o p q r s t)
-  where      toHType m = Defined "OneOf20" [] []
+  where      toHType _ = Defined "OneOf20" [] []
 
 instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e
           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j
diff --git a/src/Text/XML/HaXml/Posn.hs b/src/Text/XML/HaXml/Posn.hs
--- a/src/Text/XML/HaXml/Posn.hs
+++ b/src/Text/XML/HaXml/Posn.hs
@@ -42,7 +42,7 @@
 posInNewCxt name pos = Pn name 1 1 pos
 
 instance Show Posn where
-      showsPrec p (Pn f l c i) = showString f .
+      showsPrec _ (Pn f l c i) = showString f .
                                  showString "  at line " . shows l .
                                  showString " col " . shows c .
                                  ( case i of
@@ -53,7 +53,7 @@
 -- | Just used to strictify the internal values of a position, to avoid
 --   space leaks.
 forcep :: Posn -> Int
-forcep (Pn f n m i) = m `seq` n
+forcep (Pn _ n m _) = m `seq` n
 
 -- | Add n character positions to the given position.
 addcol :: Int -> Posn -> Posn
@@ -61,7 +61,7 @@
 
 -- | Add a newline or tab to the given position.
 newline, tab :: Posn -> Posn
-newline (Pn f r c i) = Pn f (r+1) 1 i
+newline (Pn f r _ i) = Pn f (r+1) 1 i
 tab     (Pn f r c i) = Pn f r (((c`div`8)+1)*8) i
 
 -- | Add the given whitespace char to the given position.
diff --git a/src/Text/XML/HaXml/Pretty.hs b/src/Text/XML/HaXml/Pretty.hs
--- a/src/Text/XML/HaXml/Pretty.hs
+++ b/src/Text/XML/HaXml/Pretty.hs
@@ -28,10 +28,12 @@
 import Text.PrettyPrint.HughesPJ
 import Text.XML.HaXml.Types
 
-either f g (Left x)  = f x
-either f g (Right x) = g x
+either :: (t -> t1) -> (t2 -> t1) -> Either t t2 -> t1
+either f _ (Left x)  = f x
+either _ g (Right x) = g x
 
-maybe f Nothing  = empty
+maybe :: (t -> Doc) -> Maybe t -> Doc
+maybe _ Nothing  = empty
 maybe f (Just x) = f x
 
 --peref p   = text "%" <> text p <> text ";"
@@ -69,7 +71,7 @@
 misc (PI (n,s))            = text "<?" <> text n <+> text s <> text "?>"
 sddecl sd   | sd           = text "standalone='yes'"
             | otherwise    = text "standalone='no'"
-doctypedecl (DTD n eid ds) = if null ds then 
+doctypedecl (DTD n eid ds) = if null ds then
                                   hd <> text ">"
                              else hd <+> text " [" $$
                                   vcat (map markupdecl ds) $$ text "]>"
@@ -80,12 +82,12 @@
 markupdecl (Entity e)      = entitydecl e
 markupdecl (Notation n)    = notationdecl n
 markupdecl (MarkupMisc m)  = misc m
---markupdecl (MarkupPE p m)  = peref p
+-- markupdecl (MarkupPE p m)  = peref p
 extsubset (ExtSubset t ds) = maybe textdecl t $$
                              vcat (map extsubsetdecl ds)
-extsubsetdecl (ExtMarkupDecl m)      = markupdecl m
+extmarkupdecl (ExtMarkupDecl m)      = markupdecl m
 extsubsetdecl (ExtConditionalSect c) = conditionalsect c
---extsubsetdecl (ExtPEReference p e)   = peref p
+-- extsubsetdecl (ExtPEReference p e)   = peref p
 
 element (Elem n as []) = text "<" <> text n <+>
                          fsep (map attribute as) <> text "/>"
@@ -99,15 +101,18 @@
     | otherwise        = let (d,c) = carryelem e empty
                          in d <> c
 
+isText :: Content t -> Bool
 isText (CString _ _ _) = True
 isText (CRef _ _)      = True
 isText _               = False
 
+carryelem :: Element t -> Doc -> (Doc, Doc)
+carrycontent ::  Content t -> Doc -> (Doc, Doc)
 carryelem (Elem n as []) c
                        = ( c <>
                            text "<" <> text n <+> fsep (map attribute as)
                          , text "/>")
-carryelem e@(Elem n as cs) c
+carryelem (Elem n as cs) c
 --  | any isText cs    =  ( c <> element e, empty)
     | otherwise        =  let (cs0,d0) = carryscan carrycontent cs (text ">")
                           in
@@ -123,7 +128,7 @@
 carrycontent (CMisc m _) c   = (c <> misc m, empty)
 
 carryscan :: (a->c->(b,c)) -> [a] -> c -> ([b],c)
-carryscan f []     c = ([],c)
+carryscan _ []     c = ([],c)
 carryscan f (a:as) c = let (b, c0) = f a c
                            (bs,c1) = carryscan f as c0
                        in (b:bs, c1)
@@ -153,8 +158,10 @@
 content (CRef r _)          = reference r
 content (CMisc m _)         = misc m
 
+elementdecl :: ElementDecl -> Doc
 elementdecl (ElementDecl n cs) = text "<!ELEMENT" <+> text n <+>
                                  contentspec cs <> text ">"
+contentspec :: ContentSpec -> Doc
 contentspec EMPTY              = text "EMPTY"
 contentspec ANY                = text "ANY"
 contentspec (Mixed m)          = mixed m
@@ -166,21 +173,27 @@
 cp (Seq cs m)          = parens (hcat (intersperse (text ",") (map cp cs))) <>
                            modifier m
 --cp (CPPE p c)          = peref p
+modifier :: Modifier -> Doc
 modifier None          = empty
 modifier Query         = text "?"
 modifier Star          = text "*"
 modifier Plus          = text "+"
+mixed :: Mixed -> Doc
 mixed  PCDATA          = text "(#PCDATA)"
 mixed (PCDATAplus ns)  = text "(#PCDATA |" <+>
                          hcat (intersperse (text "|") (map text ns)) <>
                          text ")*"
 
+attlistdecl :: AttListDecl -> Doc
 attlistdecl (AttListDecl n ds) = text "<!ATTLIST" <+> text n <+>
                                  fsep (map attdef ds) <> text ">"
+attdef :: AttDef -> Doc
 attdef (AttDef n t d)          = text n <+> atttype t <+> defaultdecl d
+atttype :: AttType -> Doc
 atttype  StringType            = text "CDATA"
 atttype (TokenizedType t)      = tokenizedtype t
 atttype (EnumeratedType t)     = enumeratedtype t
+tokenizedtype :: TokenizedType -> Doc
 tokenizedtype ID               = text "ID"
 tokenizedtype IDREF            = text "IDREF"
 tokenizedtype IDREFS           = text "IDREFS"
@@ -188,11 +201,15 @@
 tokenizedtype ENTITIES         = text "ENTITIES"
 tokenizedtype NMTOKEN          = text "NMTOKEN"
 tokenizedtype NMTOKENS         = text "NMTOKENS"
+enumeratedtype :: EnumeratedType -> Doc
 enumeratedtype (NotationType n)= notationtype n
 enumeratedtype (Enumeration e) = enumeration e
+notationtype :: [String] -> Doc
 notationtype ns                = text "NOTATION" <+>
                                  parens (hcat (intersperse (text "|") (map text ns)))
+enumeration :: [String] -> Doc
 enumeration ns                 = parens (hcat (intersperse (text "|") (map nmtoken ns)))
+defaultdecl :: DefaultDecl -> Doc
 defaultdecl  REQUIRED          = text "#REQUIRED"
 defaultdecl  IMPLIED           = text "#IMPLIED"
 defaultdecl (DefaultTo a f)    = maybe (const (text "#FIXED")) f <+> attvalue a
@@ -206,54 +223,76 @@
                           where internal (ics,i) = text "<![[" <+>
                                                    ignoresectcontents ics <+>
                                                    text "]]>" <+> ignore i
+reference :: Reference -> Doc
 reference (RefEntity er)       = entityref er
 reference (RefChar cr)         = charref cr
+entityref :: String -> Doc
 entityref n                    = text "&" <> text n <> text ";"
+charref :: (Show a) => a -> Doc
 charref c                      = text "&#" <> text (show c) <> text ";"
+entitydecl :: EntityDecl -> Doc
 entitydecl (EntityGEDecl d)    = gedecl d
 entitydecl (EntityPEDecl d)    = pedecl d
+gedecl :: GEDecl -> Doc
 gedecl (GEDecl n ed)           = text "<!ENTITY" <+> text n <+> entitydef ed <>
                                  text ">"
+pedecl :: PEDecl -> Doc
 pedecl (PEDecl n pd)           = text "<!ENTITY %" <+> text n <+> pedef pd <>
                                  text ">"
-entitydef (DefEntityValue ev)  = entityvalue ev
+entitydef :: EntityDef -> Doc
+entitydef (DefEntityValue ew)  = entityvalue ew
 entitydef (DefExternalID i nd) = externalid i <+> maybe ndatadecl nd
-pedef (PEDefEntityValue ev)    = entityvalue ev
+pedef :: PEDef -> Doc
+pedef (PEDefEntityValue ew)    = entityvalue ew
 pedef (PEDefExternalID eid)    = externalid eid
+externalid :: ExternalID -> Doc
 externalid (SYSTEM sl)         = text "SYSTEM" <+> systemliteral sl
 externalid (PUBLIC i sl)       = text "PUBLIC" <+> pubidliteral i <+>
                                  systemliteral sl
+ndatadecl :: NDataDecl -> Doc
 ndatadecl (NDATA n)            = text "NDATA" <+> text n
 textdecl (TextDecl vi ed)      = text "<?xml" <+> maybe text vi <+>
                                  encodingdecl ed <+> text "?>"
 extparsedent (ExtParsedEnt t c)= maybe textdecl t <+> content c
 extpe (ExtPE t esd)            = maybe textdecl t <+>
                                  vcat (map extsubsetdecl esd)
+notationdecl :: NotationDecl -> Doc
 notationdecl (NOTATION n e)    = text "<!NOTATION" <+> text n <+>
                                  either externalid publicid e <>
                                  text ">"
+publicid :: PublicID -> Doc
 publicid (PUBLICID p)          = text "PUBLIC" <+> pubidliteral p
+encodingdecl :: EncodingDecl -> Doc
 encodingdecl (EncodingDecl s)  = text "encoding='" <> text s <> text "'"
+nmtoken :: String -> Doc
 nmtoken s                      = text s
+attvalue :: AttValue -> Doc
 attvalue (AttValue esr)        = text "\"" <>
                                  hcat (map (either text reference) esr) <>
                                  text "\""
+entityvalue :: EntityValue -> Doc
 entityvalue (EntityValue evs)
   | containsDoubleQuote evs    = text "'"  <> hcat (map ev evs) <> text "'"
   | otherwise                  = text "\"" <> hcat (map ev evs) <> text "\""
+ev :: EV -> Doc
 ev (EVString s)                = text s
 --ev (EVPERef p e)               = peref p
 ev (EVRef r)                   = reference r
+pubidliteral :: PubidLiteral -> Doc
 pubidliteral (PubidLiteral s)
     | '"' `elem` s             = text "'" <> text s <> text "'"
     | otherwise                = text "\"" <> text s <> text "\""
+systemliteral :: SystemLiteral -> Doc
 systemliteral (SystemLiteral s)
     | '"' `elem` s             = text "'" <> text s <> text "'"
     | otherwise                = text "\"" <> text s <> text "\""
+chardata :: String -> Doc
 chardata s                     = {-if all isSpace s then empty else-} text s
+cdsect :: String -> Doc
 cdsect c                       = text "<![CDATA[" <> chardata c <> text "]]>"
 
 ----
+containsDoubleQuote :: [EV] -> Bool
 containsDoubleQuote evs = any csq evs
     where csq (EVString s) = '"' `elem` s
           csq _            = False
diff --git a/src/Text/XML/HaXml/SAX.hs b/src/Text/XML/HaXml/SAX.hs
--- a/src/Text/XML/HaXml/SAX.hs
+++ b/src/Text/XML/HaXml/SAX.hs
@@ -35,8 +35,8 @@
 	 -> ([SaxElement],Maybe String)
 		-- ^ A tuple of the parsed elements and @Nothing@, if no
 		--   error occured, or @Just@ @String@ if an error occured.
-saxParse file content = parseStream sax emptySTs
-                                    (xmlLex file content)
+saxParse file cntnt = parseStream sax emptySTs
+                                    (xmlLex file cntnt)
 
 parseStream :: Parser s t a -> s -> [t] -> ([a], Maybe String)
 parseStream _ _ [] = ([],Nothing)
@@ -78,13 +78,13 @@
 saxcomment = comment >>= return . SaxComment
 
 saxchardata :: XParser SaxElement
-saxchardata = 
+saxchardata =
   (cdsect >>= return . SaxCharData)
   `onFail`
   (chardata >>= return . SaxCharData)
 
 saxreference :: XParser SaxElement
-saxreference = reference >>= return . SaxReference	
+saxreference = reference >>= return . SaxReference
 
 saxdoctypedecl :: XParser SaxElement
 saxdoctypedecl = doctypedecl >>= return . SaxDocTypeDecl
diff --git a/src/Text/XML/HaXml/ShowXmlLazy.hs b/src/Text/XML/HaXml/ShowXmlLazy.hs
--- a/src/Text/XML/HaXml/ShowXmlLazy.hs
+++ b/src/Text/XML/HaXml/ShowXmlLazy.hs
@@ -1,15 +1,14 @@
-
 module Text.XML.HaXml.ShowXmlLazy (showXmlLazy) where
 
 import Text.XML.HaXml.Types
-import Text.XML.HaXml.TypeMapping
+import Text.XML.HaXml.TypeMapping -- (toHType, toDTD, Tuple(), Defined, showHType)
 
 import qualified Text.XML.HaXml.XmlContent as X
 import Prelude hiding (maybe,either)
 import Maybe hiding (maybe)
 import Data.List
 
--- | Convert a fully-typed XML document to a string (without DTD).                                         
+-- | Convert a fully-typed XML document to a string (without DTD).
 showXmlLazy :: X.XmlContent a => Bool -> a -> String
 showXmlLazy dtd x =
     case X.toContents x of
@@ -17,7 +16,7 @@
       _ -> ""
 
 
--- | Convert a fully-typed XML document to a string (with or without DTD).                                 
+-- | Convert a fully-typed XML document to a string (with or without DTD).
 toXmlLazy :: X.XmlContent a => Bool -> a -> Document ()
 toXmlLazy dtd value =
     let ht = toHType value in
@@ -34,23 +33,35 @@
 
 
 type Doc = String
+empty :: [Char]
 empty = ""
+($$) :: [Char] -> [Char] -> [Char]
 ($$) a b = a ++ "\n" ++ b
+vcat :: [[Char]] -> [Char]
 vcat a = foldr ($$) [] a
+hcat :: [[a]] -> [a]
 hcat = concat
+(<>) :: [a] -> [a] -> [a]
 (<>) = (++)
+(<+>) :: [Char] -> [Char] -> [Char]
 (<+>) a b = a ++ " " ++ b
+fsep :: [[Char]] -> [Char]
 fsep = vcat
+text :: t -> t
 text string = string
+parens :: [Char] -> [Char]
 parens string = "("++string++")"
+nest :: t -> t1 -> t1
 nest _ string = string
 
 
 
-either f g (Left x)  = f x
-either f g (Right x) = g x
+either :: (t -> t1) -> (t2 -> t1) -> Either t t2 -> t1
+either f _ (Left x)  = f x
+either _ g (Right x) = g x
 
-maybe f Nothing  = empty
+maybe :: (t -> [Char]) -> Maybe t -> [Char]
+maybe _ Nothing  = empty
 maybe f (Just x) = f x
 
 --peref p   = text "%" <> text p <> text ";"
@@ -65,8 +76,8 @@
 
 doctypedecl :: DocTypeDecl -> Doc
 markupdecl  :: MarkupDecl -> Doc
-extsubset   :: ExtSubset -> Doc
-extsubsetdecl :: ExtSubsetDecl -> Doc
+-- extsubset   :: ExtSubset -> Doc
+-- extsubsetdecl :: ExtSubsetDecl -> Doc
 cp          :: CP -> Doc
 
 element   :: Element i -> Doc
@@ -88,7 +99,7 @@
 misc (PI (n,s))            = text "<?" <> text n <+> text s <+> text "?>"
 sddecl sd   | sd           = text "standalone='yes'"
             | otherwise    = text "standalone='no'"
-doctypedecl (DTD n eid ds) = if null ds then 
+doctypedecl (DTD n eid ds) = if null ds then
                                   hd <> text ">"
                              else hd <+> text " [" $$
                                   vcat (map markupdecl ds) $$ text "]>"
@@ -100,10 +111,10 @@
 markupdecl (Notation n)    = notationdecl n
 markupdecl (MarkupMisc m)  = misc m
 --markupdecl (MarkupPE p m)  = peref p
-extsubset (ExtSubset t ds) = maybe textdecl t $$
-                             vcat (map extsubsetdecl ds)
-extsubsetdecl (ExtMarkupDecl m)      = markupdecl m
-extsubsetdecl (ExtConditionalSect c) = conditionalsect c
+-- _ (ExtSubset t ds) = maybe textdecl t $$
+--                              vcat (map extsubsetdecl ds)
+-- _ (ExtMarkupDecl m)      = markupdecl m
+-- extsubsetdecl (ExtConditionalSect c) = conditionalsect c
 --extsubsetdecl (ExtPEReference p e)   = peref p
 
 element (Elem n as []) = text "<" <> text n <+>
@@ -118,6 +129,7 @@
     | otherwise        = let (d,c) = carryelem e empty
                          in d <> c
 
+isText :: Content t -> Bool
 isText (CString _ _ _) = True
 isText (CRef _ _)      = True
 isText _               = False
@@ -126,15 +138,17 @@
                        = ( c <>
                            text "<" <> text n <+> fsep (map attribute as)
                          , text "/>")
-carryelem e@(Elem n as cs) c
+carryelem (Elem n as cs) c
 --  | any isText cs    =  ( c <> element e, empty)
     | otherwise        =  let (cs0,d0) = carryscan carrycontent cs (text ">")
                           in
                           ( c <>
                             text "<" <> text n <+> fsep (map attribute as) $$
-                            nest 2 (vcat cs0) <> --- $$
+                            nest (2 :: Int) (vcat cs0) <> --- $$
                             d0 <> text "</" <> text n
                           , text ">")
+carrycontent :: Content t -> [Char] -> ([Char], [Char])
+carryelem :: Element t -> [Char] -> ([Char], [Char])
 carrycontent (CElem e _) c   = carryelem e c
 carrycontent (CString False s _) c = (c <> chardata s, empty)
 carrycontent (CString True  s _) c = (c <> cdsect s, empty)
@@ -142,7 +156,7 @@
 carrycontent (CMisc m _) c   = (c <> misc m, empty)
 
 carryscan :: (a->c->(b,c)) -> [a] -> c -> ([b],c)
-carryscan f []     c = ([],c)
+carryscan _ []     c = ([],c)
 carryscan f (a:as) c = let (b, c0) = f a c
                            (bs,c1) = carryscan f as c0
                        in (b:bs, c1)
@@ -172,8 +186,10 @@
 content (CRef r _)          = reference r
 content (CMisc m _)         = misc m
 
+elementdecl :: ElementDecl -> [Char]
 elementdecl (ElementDecl n cs) = text "<!ELEMENT" <+> text n <+>
                                  contentspec cs <> text ">"
+contentspec :: ContentSpec -> [Char]
 contentspec EMPTY              = text "EMPTY"
 contentspec ANY                = text "ANY"
 contentspec (Mixed m)          = mixed m
@@ -185,21 +201,27 @@
 cp (Seq cs m)          = parens (hcat (intersperse (text ",") (map cp cs))) <>
                            modifier m
 --cp (CPPE p c)          = peref p
+modifier :: Modifier -> [Char]
 modifier None          = empty
 modifier Query         = text "?"
 modifier Star          = text "*"
 modifier Plus          = text "+"
+mixed :: Mixed -> [Char]
 mixed  PCDATA          = text "(#PCDATA)"
 mixed (PCDATAplus ns)  = text "(#PCDATA |" <+>
                          hcat (intersperse (text "|") (map text ns)) <>
                          text ")*"
 
+attlistdecl :: AttListDecl -> [Char]
 attlistdecl (AttListDecl n ds) = text "<!ATTLIST" <+> text n <+>
                                  fsep (map attdef ds) <> text ">"
+attdef :: AttDef -> [Char]
 attdef (AttDef n t d)          = text n <+> atttype t <+> defaultdecl d
+atttype :: AttType -> [Char]
 atttype  StringType            = text "CDATA"
 atttype (TokenizedType t)      = tokenizedtype t
 atttype (EnumeratedType t)     = enumeratedtype t
+tokenizedtype :: TokenizedType -> [Char]
 tokenizedtype ID               = text "ID"
 tokenizedtype IDREF            = text "IDREF"
 tokenizedtype IDREFS           = text "IDREFS"
@@ -207,72 +229,98 @@
 tokenizedtype ENTITIES         = text "ENTITIES"
 tokenizedtype NMTOKEN          = text "NMTOKEN"
 tokenizedtype NMTOKENS         = text "NMTOKENS"
+enumeratedtype :: EnumeratedType -> [Char]
 enumeratedtype (NotationType n)= notationtype n
 enumeratedtype (Enumeration e) = enumeration e
+notationtype :: [[Char]] -> [Char]
 notationtype ns                = text "NOTATION" <+>
                                  parens (hcat (intersperse (text "|") (map text ns)))
+enumeration :: [[Char]] -> [Char]
 enumeration ns                 = parens (hcat (intersperse (text "|") (map nmtoken ns)))
+defaultdecl :: DefaultDecl -> [Char]
 defaultdecl  REQUIRED          = text "#REQUIRED"
 defaultdecl  IMPLIED           = text "#IMPLIED"
 defaultdecl (DefaultTo a f)    = maybe (const (text "#FIXED")) f <+> attvalue a
-conditionalsect (IncludeSect i)= text "<![INCLUDE [" <+>
-                                 vcat (map extsubsetdecl i) <+> text "]]>"
-conditionalsect (IgnoreSect i) = text "<![IGNORE [" <+>
-                                 fsep (map ignoresectcontents i) <+> text "]]>"
-ignore (Ignore)                = empty
-ignoresectcontents (IgnoreSectContents i is)
-                               = ignore i <+> vcat (map internal is)
-                          where internal (ics,i) = text "<![[" <+>
-                                                   ignoresectcontents ics <+>
-                                                   text "]]>" <+> ignore i
+-- _ (IncludeSect i)= text "<![INCLUDE [" <+>
+--                                  vcat (map extsubsetdecl i) <+> text "]]>"
+-- conditionalsect (IgnoreSect i) = text "<![IGNORE [" <+>
+--                                  fsep (map ignoresectcontents i) <+> text "]]>"
+-- _ (Ignore)                = empty
+-- _ (IgnoreSectContents i is)
+--                                = ignore i <+> vcat (map internal is)
+--                           where internal (ics,i) = text "<![[" <+>
+--                                                    ignoresectcontents ics <+>
+--                                                    text "]]>" <+> ignore i
+reference :: Reference -> [Char]
 reference (RefEntity er)       = entityref er
 reference (RefChar cr)         = charref cr
+entityref :: [Char] -> [Char]
 entityref n                    = text "&" <> text n <> text ";"
+charref :: (Show a) => a -> [Char]
 charref c                      = text "&#" <> text (show c) <> text ";"
+entitydecl :: EntityDecl -> [Char]
 entitydecl (EntityGEDecl d)    = gedecl d
 entitydecl (EntityPEDecl d)    = pedecl d
+gedecl :: GEDecl -> [Char]
 gedecl (GEDecl n ed)           = text "<!ENTITY" <+> text n <+> entitydef ed <>
                                  text ">"
+pedecl :: PEDecl -> [Char]
 pedecl (PEDecl n pd)           = text "<!ENTITY %" <> text n <+> pedef pd <>
                                  text ">"
-entitydef (DefEntityValue ev)  = entityvalue ev
+entitydef :: EntityDef -> [Char]
+entitydef (DefEntityValue ew)  = entityvalue ew
 entitydef (DefExternalID i nd) = externalid i <+> maybe ndatadecl nd
-pedef (PEDefEntityValue ev)    = entityvalue ev
+pedef :: PEDef -> [Char]
+pedef (PEDefEntityValue ew)    = entityvalue ew
 pedef (PEDefExternalID eid)    = externalid eid
+externalid :: ExternalID -> [Char]
 externalid (SYSTEM sl)         = text "SYSTEM" <+> systemliteral sl
 externalid (PUBLIC i sl)       = text "PUBLIC" <+> pubidliteral i <+>
                                  systemliteral sl
+ndatadecl :: NDataDecl -> [Char]
 ndatadecl (NDATA n)            = text "NDATA" <+> text n
-textdecl (TextDecl vi ed)      = text "<?xml" <+> maybe text vi <+>
-                                 encodingdecl ed <> text "?>"
-extparsedent (ExtParsedEnt t c)= maybe textdecl t <+> content c
-extpe (ExtPE t esd)            = maybe textdecl t <+>
-                                 vcat (map extsubsetdecl esd)
+-- _ (TextDecl vi ed)      = text "<?xml" <+> maybe text vi <+>
+--                                  encodingdecl ed <> text "?>"
+-- _ (ExtParsedEnt t c)= maybe textdecl t <+> content c
+-- _ (ExtPE t esd)            = maybe textdecl t <+>
+--                                  vcat (map extsubsetdecl esd)
+notationdecl :: NotationDecl -> [Char]
 notationdecl (NOTATION n e)    = text "<!NOTATION" <+> text n <+>
                                  either externalid publicid e <>
                                  text ">"
+publicid :: PublicID -> [Char]
 publicid (PUBLICID p)          = text "PUBLICID" <+> pubidliteral p
+encodingdecl :: EncodingDecl -> [Char]
 encodingdecl (EncodingDecl s)  = text "encoding='" <> text s <> text "'"
+nmtoken :: t -> t
 nmtoken s                      = text s
+attvalue :: AttValue -> [Char]
 attvalue (AttValue esr)        = text "\"" <>
                                  hcat (map (either text reference) esr) <>
                                  text "\""
+entityvalue :: EntityValue -> [Char]
 entityvalue (EntityValue evs)
   | containsDoubleQuote evs    = text "'"  <> hcat (map ev evs) <> text "'"
   | otherwise                  = text "\"" <> hcat (map ev evs) <> text "\""
+ev :: EV -> String
 ev (EVString s)                = text s
 --ev (EVPERef p e)               = peref p
 ev (EVRef r)                   = reference r
+pubidliteral :: PubidLiteral -> [Char]
 pubidliteral (PubidLiteral s)
     | '"' `elem` s             = text "'" <> text s <> text "'"
     | otherwise                = text "\"" <> text s <> text "\""
+systemliteral :: SystemLiteral -> [Char]
 systemliteral (SystemLiteral s)
     | '"' `elem` s             = text "'" <> text s <> text "'"
     | otherwise                = text "\"" <> text s <> text "\""
+chardata :: t -> t
 chardata s                     = {-if all isSpace s then empty else-} text s
+cdsect :: [Char] -> [Char]
 cdsect c                       = text "<![CDATA[" <> chardata c <> text "]]>"
 
 ----
+containsDoubleQuote :: [EV] -> Bool
 containsDoubleQuote evs = any csq evs
     where csq (EVString s) = '"' `elem` s
           csq _            = False
diff --git a/src/Text/XML/HaXml/TypeMapping.hs b/src/Text/XML/HaXml/TypeMapping.hs
--- a/src/Text/XML/HaXml/TypeMapping.hs
+++ b/src/Text/XML/HaXml/TypeMapping.hs
@@ -90,6 +90,21 @@
 instance (HTypeable a, HTypeable b, HTypeable c) => HTypeable (a,b,c) where
     toHType p      = Tuple [toHType a, toHType b, toHType c]
                    where  (a,b,c) = p
+instance (HTypeable a, HTypeable b, HTypeable c, HTypeable d) =>
+         HTypeable (a,b,c,d) where
+    toHType p      = Tuple [toHType a, toHType b, toHType c, toHType d]
+                   where  (a,b,c,d) = p
+instance (HTypeable a, HTypeable b, HTypeable c, HTypeable d, HTypeable e) =>
+         HTypeable (a,b,c,d,e) where
+    toHType p      = Tuple [ toHType a, toHType b, toHType c, toHType d
+                           , toHType e ]
+                   where  (a,b,c,d,e) = p
+instance ( HTypeable a, HTypeable b, HTypeable c, HTypeable d, HTypeable e
+         , HTypeable f) =>
+         HTypeable (a,b,c,d,e,f) where
+    toHType p      = Tuple [ toHType a, toHType b, toHType c, toHType d
+                           , toHType e, toHType f ]
+                   where  (a,b,c,d,e,f) = p
 instance (HTypeable a) => HTypeable (Maybe a) where
     toHType m      = Maybe (toHType x)   where   (Just x) = m
 instance (HTypeable a, HTypeable b) => HTypeable (Either a b) where
diff --git a/src/Text/XML/HaXml/Types.hs b/src/Text/XML/HaXml/Types.hs
--- a/src/Text/XML/HaXml/Types.hs
+++ b/src/Text/XML/HaXml/Types.hs
@@ -135,15 +135,15 @@
 data XMLDecl    = XMLDecl VersionInfo (Maybe EncodingDecl) (Maybe SDDecl)
                   deriving Eq
 data Misc       = Comment Comment
-                | PI ProcessingInstruction 
+                | PI ProcessingInstruction
                 deriving Eq
-              
+
 type ProcessingInstruction = (PITarget,String)
 
-type SDDecl      = Bool 
-type VersionInfo = String 
-type Comment     = String 
-type PITarget    = String 
+type SDDecl      = Bool
+type VersionInfo = String
+type Comment     = String
+type PITarget    = String
 
 data DocTypeDecl = DTD Name (Maybe ExternalID) [MarkupDecl]  deriving Eq
 data MarkupDecl  = Element  ElementDecl
@@ -159,15 +159,17 @@
                    deriving Eq
 
 data Element i = Elem Name [Attribute] [Content i] deriving Eq
-                                       	--  intermediate for parsing
+                                        --  intermediate for parsing
 data ElemTag   = ElemTag Name [Attribute]
 type Attribute = (Name, AttValue)
 data Content i = CElem (Element i) i
                | CString Bool CharData i
-			-- ^ bool is whether whitespace is significant
+                        -- ^ bool is whether whitespace is significant
                | CRef Reference i
                | CMisc Misc i
                deriving Eq
+
+info :: Content t -> t
 info (CElem _ i) = i
 info (CString _ _ i) = i
 info (CRef _ i) = i
@@ -192,21 +194,21 @@
 -- FIXME: What is TagName here? Seems to be in disagreement with XML spec.
 data CP = TagName Name Modifier
         | Choice [CP] Modifier
-        | Seq [CP] Modifier 
+        | Seq [CP] Modifier
         deriving Eq
 data Modifier = None  -- ^ Just One
               | Query -- ^ Zero Or One
               | Star  -- ^ Zero Or More
-              | Plus  -- ^ One Or More 
+              | Plus  -- ^ One Or More
               deriving Eq
 data Mixed = PCDATA
-           | PCDATAplus [Name] 
+           | PCDATAplus [Name]
            deriving Eq
 data AttListDecl = AttListDecl Name [AttDef] deriving Eq
 data AttDef      = AttDef Name AttType DefaultDecl deriving Eq
 data AttType     = StringType
                  | TokenizedType TokenizedType
-                 | EnumeratedType EnumeratedType 
+                 | EnumeratedType EnumeratedType
                  deriving Eq
 data TokenizedType = ID
                    | IDREF
@@ -214,21 +216,21 @@
                    | ENTITY
                    | ENTITIES
                    | NMTOKEN
-                   | NMTOKENS 
+                   | NMTOKENS
                    deriving Eq
 data EnumeratedType = NotationType NotationType
-                    | Enumeration Enumeration 
+                    | Enumeration Enumeration
                     deriving Eq
-type NotationType   = [Name]	-- nonempty list
-type Enumeration    = [NmToken]	-- nonempty list
+type NotationType   = [Name]    -- nonempty list
+type Enumeration    = [NmToken] -- nonempty list
 data DefaultDecl    = REQUIRED
                     | IMPLIED
-                    | DefaultTo AttValue (Maybe FIXED) 
+                    | DefaultTo AttValue (Maybe FIXED)
                     deriving Eq
 data FIXED          = FIXED deriving Eq
 
 data ConditionalSect = IncludeSect IncludeSect
-                     | IgnoreSect IgnoreSect 
+                     | IgnoreSect IgnoreSect
                      deriving Eq
 type IncludeSect = [ExtSubsetDecl]
 type IgnoreSect  = [IgnoreSectContents]
@@ -236,19 +238,19 @@
 data IgnoreSectContents = IgnoreSectContents Ignore [(IgnoreSectContents,Ignore)]  deriving Eq
 
 data Reference    = RefEntity EntityRef
-                  | RefChar CharRef 
+                  | RefChar CharRef
                   deriving (Eq,Show)
-type EntityRef    = Name 
+type EntityRef    = Name
 type CharRef      = Int
-type PEReference  = Name 
+type PEReference  = Name
 
 data EntityDecl   = EntityGEDecl GEDecl
-                  | EntityPEDecl PEDecl 
+                  | EntityPEDecl PEDecl
                   deriving Eq
 data GEDecl       = GEDecl Name EntityDef deriving Eq
 data PEDecl       = PEDecl Name PEDef deriving Eq
-data EntityDef    = DefEntityValue EntityValue 
-                  | DefExternalID ExternalID (Maybe NDataDecl) 
+data EntityDef    = DefEntityValue EntityValue
+                  | DefExternalID ExternalID (Maybe NDataDecl)
                   deriving Eq
 data PEDef        = PEDefEntityValue EntityValue
                   | PEDefExternalID ExternalID deriving (Eq,Show)
@@ -264,16 +266,16 @@
 newtype PublicID     = PUBLICID PubidLiteral deriving Eq
 newtype EncodingDecl = EncodingDecl String deriving Eq
 
-type Name     = String		 -- non-empty string
-type Names    = [Name]		 -- non-empty list
-type NmToken  = String		 -- non-empty string
-type NmTokens = [NmToken]	 -- non-empty list
+type Name     = String           -- non-empty string
+type Names    = [Name]           -- non-empty list
+type NmToken  = String           -- non-empty string
+type NmTokens = [NmToken]        -- non-empty list
 
 data AttValue    = AttValue [Either String Reference] deriving Eq
 instance Show AttValue where
   show (AttValue v) = concatMap decode v
     where
-      decode (Left  v)               = v
+      decode (Left  w)               = w
       decode (Right (RefEntity ent)) = "&"++ent++";"
       decode (Right (RefChar cref))  = "&"++show cref++";"
 
@@ -283,7 +285,7 @@
         | EVRef Reference  deriving (Eq,Show)
 newtype PubidLiteral  = PubidLiteral String deriving (Eq,Show)
 newtype SystemLiteral = SystemLiteral String deriving (Eq,Show)
-type CharData         = String 
+type CharData         = String
 type CDSect           = CharData
 
 instance Eq ElemTag where
diff --git a/src/Text/XML/HaXml/Validate.hs b/src/Text/XML/HaXml/Validate.hs
--- a/src/Text/XML/HaXml/Validate.hs
+++ b/src/Text/XML/HaXml/Validate.hs
@@ -220,6 +220,7 @@
 
     choice elem ns cps =  -- return only those parses that don't give any errors
         [ rem | ([],rem) <- map (\cp-> checkCP elem (definite cp) ns) cps ]
+        ++ [ ns | all possEmpty cps ]
         where definite (TagName n Query)  = TagName n None
               definite (Choice cps Query) = Choice cps None
               definite (Seq cps Query)    = Seq cps None
@@ -227,6 +228,11 @@
               definite (Choice cps Star)  = Choice cps Plus
               definite (Seq cps Star)     = Seq cps Plus
               definite x                  = x
+              possEmpty (TagName _ mod)   = mod `Prelude.elem` [Query,Star]
+              possEmpty (Choice cps None) = all possEmpty cps
+              possEmpty (Choice _ mod)    = mod `Prelude.elem` [Query,Star]
+              possEmpty (Seq cps None)    = all possEmpty cps
+              possEmpty (Seq _ mod)       = mod `Prelude.elem` [Query,Star]
     sequence elem ns cps =  -- accumulate errors down the sequence
         foldl (\(es,ns) cp-> let (es',ns') = checkCP elem cp ns
                              in (es++es', ns'))
diff --git a/src/Text/XML/HaXml/XmlContent.hs b/src/Text/XML/HaXml/XmlContent.hs
--- a/src/Text/XML/HaXml/XmlContent.hs
+++ b/src/Text/XML/HaXml/XmlContent.hs
@@ -1,4 +1,5 @@
-{-# OPTIONS -fglasgow-exts #-}
+{-# LANGUAGE ExistentialQuantification #-}
+
 -- | The class 'XmlContent' is a kind of replacement for Read and Show:
 --   it provides conversions between a generic XML tree representation
 --   and your own more specialised typeful Haskell data trees.
@@ -23,7 +24,7 @@
 --   The functions 'hGetXml' and 'hPutXml' do the conversion to and from
 --   the given file handles.
 --   (See the type signatures.)
---  
+--
 
 module Text.XML.HaXml.XmlContent
   ( -- * Re-export the relevant set of generic XML document type definitions
@@ -31,7 +32,7 @@
   , Element(..)
   , ElemTag(..)
   , Content(..)
-  , Attribute(..)
+  , Attribute()
   , AttValue(..)
   , Prolog(..)
   , Reference(..)
@@ -54,7 +55,7 @@
   , definiteA, defaultA, possibleA, fromAttrToStr, toAttrFrStr
   , Defaultable(..)
   , str2attr, attr2str, attval
-  , catMaybes	-- re-exported from Maybe
+  , catMaybes   -- re-exported from Maybe
   -- * Whole-document conversion functions
   , toXml, fromXml
   , readXml, showXml, fpsShowXml
@@ -70,8 +71,8 @@
 
 import IO
 import Maybe (catMaybes)
-import Char  (chr, ord, isSpace)
-import List  (intersperse, isPrefixOf, isSuffixOf, partition)
+import Char  (chr, isSpace)
+import List  (isPrefixOf, isSuffixOf)
 
 import Text.PrettyPrint.HughesPJ (render)
 import qualified Text.XML.HaXml.Pretty as PP
@@ -80,7 +81,7 @@
 import Text.XML.HaXml.TypeMapping
 import Text.XML.HaXml.Posn     (Posn, posInNewCxt)
 import Text.XML.HaXml.Pretty   (document)
-import Text.XML.HaXml.Parse    (xmlParse, fst3)
+import Text.XML.HaXml.Parse    (xmlParse)
 import Text.XML.HaXml.Verbatim (Verbatim(verbatim))
 import qualified Text.XML.HaXml.ByteStringPP as FPS (document)
 import qualified Data.ByteString.Lazy.Char8 as FPS
@@ -94,7 +95,8 @@
 debug :: a -> String -> a
 v `debug` s = trace s v
 #else
-v `debug` s = v
+debug :: t -> t1 -> t
+v `debug` _ = v
 #endif
 
 
@@ -115,7 +117,7 @@
 mkElemC :: String -> [Content ()] -> Content ()
 mkElemC x cs = CElem (Elem x [] cs) ()
 
--- | Turn a simple string into XML text. 
+-- | Turn a simple string into XML text.
 toText :: String -> [Content ()]
 toText s = [CString False s ()]
 
@@ -125,9 +127,9 @@
 toCData s = [CString True s ()]
 ------------------------------------------------------------------------
 
-	-- probably want to write DTD separately from value, and have
-	-- easy ways to combine DTD + value into a document, or write
-	-- them to separate files.
+        -- probably want to write DTD separately from value, and have
+        -- easy ways to combine DTD + value into a document, or write
+        -- them to separate files.
 
 -- | Read an XML document from a file and convert it to a fully-typed
 --   Haskell value.
@@ -135,7 +137,7 @@
 fReadXml fp = do
     f <- ( if fp=="-" then return stdin
            else openFile fp ReadMode )
-    x <- hGetContents f 
+    x <- hGetContents f
     let (Document _ _ y _) = xmlParse fp x
         y' = CElem y (posInNewCxt fp Nothing)
     either fail return (fst (runParser parseContents [y']))
@@ -206,7 +208,7 @@
 -- | Read a fully-typed XML document from a file handle.
 hGetXml :: XmlContent a => Handle -> IO a
 hGetXml h = do
-    x <- hGetContents h 
+    x <- hGetContents h
     let (Document _ _ y _) = xmlParse "file handle" x
     either fail return
            (fst (runParser parseContents
@@ -240,7 +242,7 @@
 content word = next `adjustErr` (++" when expecting "++word)
 
 -- | Get the next content element, checking that it has one of the required
---   tags, using the given matching function. 
+--   tags, using the given matching function.
 --   (Skips over comments and whitespace, rejects text and refs.
 --    Also returns position of element.)
 posnElementWith :: (String->String->Bool) -> [String]
@@ -254,7 +256,7 @@
                                            ++formatted tags++"\nat "++show pos)
           CString b s pos
               | not b && all isSpace s -> posnElementWith match tags
-							-- ignore blank space
+                                                        -- ignore blank space
               | otherwise -> fail ("Found text content, but expected "
                                   ++formatted tags++"\ntext is: "++s
                                   ++"\nat "++show pos)
@@ -265,7 +267,7 @@
     }
   where
     formatted [t]  = "a <"++t++">"
-    formatted tags = "one of"++ concatMap (\t->" <"++t++">") tags
+    formatted tgs = "one of"++ concatMap (\t->" <"++t++">") tgs
 
 -- | A specialisation of @posnElementWith (==)@.
 posnElement :: [String] -> XMLParser (Posn, Element Posn)
@@ -275,12 +277,12 @@
 --   tags.  (Skips over comments and whitespace, rejects text and refs.)
 element :: [String] -> XMLParser (Element Posn)
 element tags = fmap snd (posnElement tags)
-				`debug` ("Element: "++unwords tags++"\n")
+                                `debug` ("Element: "++unwords tags++"\n")
 
 -- | Like element, only permits a more flexible match against the tagname.
 elementWith :: (String->String->Bool) -> [String] -> XMLParser (Element Posn)
 elementWith match tags = fmap snd (posnElementWith match tags)
-				`debug` ("Element: "++unwords tags++"\n")
+                                `debug` ("Element: "++unwords tags++"\n")
 
 -- | Run an XMLParser on the contents of the given element (i.e. not on the
 --   current monadic content sequence), checking that the contents are
@@ -291,11 +293,11 @@
     case runParser p cs of
         (Left msg, _) -> fail msg
         (Right x, []) -> return x
-        (Right x, cs@(c:_))
-            | all onlyMisc cs -> return x
+        (Right x, ds@(d:_))
+            | all onlyMisc ds -> return x
             | otherwise       -> fail ("Too many elements inside <"++e++"> at\n"
-                                      ++show (info c)++"\n"
-                                      ++"Found excess: "++verbatim c)
+                                      ++show (info d)++"\n"
+                                      ++"Found excess: "++verbatim d)
   where onlyMisc (CMisc _ _) = True
         onlyMisc (CString False s _) | all isSpace s = True
         onlyMisc _ = False
@@ -338,7 +340,7 @@
 choice :: XmlContent a => (a -> b) -> XMLParser b -> XMLParser b
 choice cons (P other) =
     P (\cs-> case runParser parseContents cs of
-                 (Left msg, _)  -> other cs
+                 (Left _, _)  -> other cs
                  (Right x, cs') -> (Right (cons x), cs'))
 
 --choice cons other = fmap cons parseContents `onFail` other
@@ -348,7 +350,7 @@
 --   care of that for us.
 definite :: XmlContent a => XMLParser a -> String -> String -> XMLParser a
 definite p inner tag = P (\cs-> case runParser p cs of
-                                   (Left msg, cs') -> (Left (False,msg'), cs')
+                                   (Left _, cs') -> (Left (False,msg'), cs')
                                    (Right x, cs')  -> (Right x,   cs'))
   where msg' = "content error: expected "++inner++" inside <"++tag
                ++"> element\n"
@@ -391,7 +393,7 @@
 instance XmlContent Bool where
     toContents b   = [CElem (Elem "bool" [mkAttr "value" (show b)] []) ()]
     parseContents = do { e <- element ["bool"] ; return (attval e) }
-    
+
 instance XmlContent Int where
     toContents i   = [CElem (Elem "int" [mkAttr "value" (show i)] []) ()]
     parseContents = do { e <- element ["int"] ; return (attval e) }
@@ -399,7 +401,7 @@
 instance XmlContent Integer where
     toContents i   = [CElem (Elem "integer" [mkAttr "value" (show i)] []) ()]
     parseContents = do { e <- element ["integer"] ; return (attval e) }
-    
+
 instance XmlContent Float where
     toContents i   = [CElem (Elem "float" [mkAttr "value" (show i)] []) ()]
     parseContents = do { e <- element ["float"] ; return (attval e) }
@@ -439,10 +441,10 @@
                      scanElements es =
                         case runParser parseContents es of
                             (Left msg, es') -> (Left (False,msg), es')
-                            (Right x, es') ->
+                            (Right y, es') ->
                                 case scanElements es' of
-                                    (Left msg, cs) -> (Left msg, cs)
-                                    (Right xs, cs) -> (Right (x:xs), cs)
+                                    (Left msg, ds) -> (Left msg, ds)
+                                    (Right ys, ds) -> (Right (y:ys), ds)
             (CElem (Elem e _ _) pos: cs)
                    -> (Left (False
                             ,"Expected a <list-...>, but found a <"++e++"> at\n"
@@ -478,6 +480,47 @@
         ; return (a,b,c)
         }
 
+instance (XmlContent a, XmlContent b, XmlContent c, XmlContent d) =>
+         XmlContent (a,b,c,d) where
+    toContents (x,y,z,t) = toContents x ++ toContents y ++ toContents z
+                           ++ toContents t
+    parseContents = do
+        { a <- parseContents
+        ; b <- parseContents
+        ; c <- parseContents
+        ; d <- parseContents
+        ; return (a,b,c,d)
+        }
+
+instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d
+         , XmlContent e ) =>
+         XmlContent (a,b,c,d,e) where
+    toContents (x,y,z,t,u) = toContents x ++ toContents y ++ toContents z
+                             ++ toContents t ++ toContents u
+    parseContents = do
+        { a <- parseContents
+        ; b <- parseContents
+        ; c <- parseContents
+        ; d <- parseContents
+        ; e <- parseContents
+        ; return (a,b,c,d,e)
+        }
+
+instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d
+         , XmlContent e, XmlContent f ) =>
+         XmlContent (a,b,c,d,e,f) where
+    toContents (x,y,z,t,u,v) = toContents x ++ toContents y ++ toContents z
+                               ++ toContents t ++ toContents u ++ toContents v
+    parseContents = do
+        { a <- parseContents
+        ; b <- parseContents
+        ; c <- parseContents
+        ; d <- parseContents
+        ; e <- parseContents
+        ; f <- parseContents
+        ; return (a,b,c,d,e,f)
+        }
+
 instance (XmlContent a) => XmlContent (Maybe a) where
     toContents m   = [mkElem m (maybe [] toContents m)]
     parseContents = do
@@ -504,7 +547,7 @@
 
 
 ------------------------------------------------------------------------
--- Useful auxiliaries for "fromAttributes" 
+-- Useful auxiliaries for "fromAttributes"
 ------------------------------------------------------------------------
 
 -- | If an attribute is defaultable, then it either takes the default
@@ -513,7 +556,7 @@
 data Defaultable a  = Default a    | NonDefault a    deriving (Eq,Show)
 
 searchMaybe :: (a -> Maybe b) -> [a] -> Maybe b
-searchMaybe f [] = Nothing
+searchMaybe _ [] = Nothing
 searchMaybe f (x:xs) =
     let fx = f x in
     case fx of
@@ -522,12 +565,12 @@
 
 maybeToAttr :: (String->a->Maybe Attribute) -> String -> Maybe a
                -> Maybe Attribute
-maybeToAttr to n Nothing  = Nothing
+maybeToAttr _ _ Nothing  = Nothing
 maybeToAttr to n (Just v) = to n v
 
 defaultToAttr :: (String->a->Maybe Attribute) -> String -> Defaultable a
                  -> Maybe Attribute
-defaultToAttr to n (Default v)  = Nothing
+defaultToAttr _ _ (Default _)  = Nothing
 defaultToAttr to n (NonDefault v) = to n v
 
 definiteA :: (String->Attribute->Maybe a) -> String -> String
@@ -557,8 +600,8 @@
 
 str2attr :: String -> AttValue
 str2attr s =
-    let f s =
-          let (l,r) = span (\c-> not (elem c "\"&<>'")) s
+    let f t =
+          let (l,r) = span (\c-> not (elem c "\"&<>'")) t
           in if null r then [Left l]
              else Left l: Right (g (head r)): f (tail r)
         g '"'  = RefEntity "quot"
@@ -591,8 +634,8 @@
     ... etc are now defined (with instances) in module OneOfN.
 -}
 
--- | A type corresponding to XML's ANY contentspec. 
---   It is either a list of unconverted xml 'Content' 
+-- | A type corresponding to XML's ANY contentspec.
+--   It is either a list of unconverted xml 'Content'
 --   or some 'XmlContent'-able value.
 --
 -- Parsing functions (e.g. 'parseContents') will always produce 'UnConverted'.
@@ -632,5 +675,5 @@
     parseContents = P (\cs -> (Right (UnConverted cs), []))
 
 ------------------------------------------------------------------------
---  
+--
 ------------------------------------------------------------------------
diff --git a/src/tools/Xtract.hs b/src/tools/Xtract.hs
--- a/src/tools/Xtract.hs
+++ b/src/tools/Xtract.hs
@@ -16,6 +16,7 @@
 import Text.XML.HaXml.Pretty        (content)
 import Text.XML.HaXml.Html.Generate (htmlprint)
 import Text.XML.HaXml.Escape        (xmlEscapeContent,stdXmlEscaper)
+import Text.XML.HaXml.Util          (docContent)
 
 escape = xmlEscapeContent stdXmlEscaper
 
@@ -38,19 +39,18 @@
     in
 --  findcontents >>= \cs->
 --  ( hPutStrLn stdout . render . vcat
---  . map (vcat . map content . selection . getElem)) cs
+--  . map (vcat . map content . selection . docContent)) cs
     mapM_ (\x-> do c <- (if x=="-" then getContents else readFile x)
                    ( if isHTML x then
                           hPutStrLn stdout . render . htmlprint
                           . xtract (map toLower) pattern
-                          . getElem x . htmlParse x
+                          . docContent (posInNewCxt x Nothing) . htmlParse x
                      else hPutStrLn stdout . render . vcat . map (format . esc)
                           . xtract id pattern
-                          . getElem x . xmlParse x) c
+                          . docContent (posInNewCxt x Nothing) . xmlParse x) c
                    hFlush stdout)
           files
 
-getElem x (Document _ _ e _) = CElem e (posInNewCxt x Nothing)
 isHTML x = ".html" `isSuffixOf` x  ||  ".htm"  `isSuffixOf` x
 
 format [] = empty
