diff --git a/HaXml.cabal b/HaXml.cabal
--- a/HaXml.cabal
+++ b/HaXml.cabal
@@ -1,5 +1,5 @@
 name:		HaXml
-version:	1.19.4
+version:	1.19.5
 license:	LGPL
 license-file:	COPYRIGHT
 author:		Malcolm Wallace <Malcolm.Wallace@cs.york.ac.uk>
@@ -50,7 +50,7 @@
         Text.XML.HaXml.Xtract.Lex,
         Text.XML.HaXml.Xtract.Parse
   hs-source-dirs: src
-  build-depends: base, haskell98, polyparse
+  build-depends: base, haskell98, polyparse, filepath
   if flag(splitBase)
     build-depends: base >= 3, pretty, random, containers
   else
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 SOFTWARE = HaXml
-VERSION  = 1.19.4
+VERSION  = 1.19.5
 
 #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.4"
+VERSION="1.19.5"
 
 if [ -f obj/prefix ]
 then INSTALLDIR=`cat obj/prefix`
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
@@ -483,6 +483,258 @@
 ></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, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> g) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> (a, b, c, d, e, f, g)</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, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> g, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> h) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> (a, b, c, d, e, f, g, h)</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, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> g, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> h, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> i) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> (a, b, c, d, e, f, g, h, i)</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, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> g, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> h, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> i, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> j) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> (a, b, c, d, e, f, g, h, i, j)</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, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> g, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> h, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> i, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> j, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> k) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> (a, b, c, d, e, f, g, h, i, j, k)</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, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> g, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> h, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> i, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> j, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> k, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> l) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> (a, b, c, d, e, f, g, h, i, j, k, l)</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, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> g, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> h, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> i, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> j, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> k, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> l, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> m) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> (a, b, c, d, e, f, g, h, i, j, k, l, m)</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, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> g, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> h, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> i, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> j, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> k, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> l, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> m, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> n) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> (a, b, c, d, e, f, g, h, i, j, k, l, m, n)</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, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> g, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> h, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> i, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> j, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> k, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> l, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> m, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> n, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> o) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
+>HTypeable</A
+> (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)</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-Wrappers.html b/docs/HaXml/Text-XML-HaXml-Wrappers.html
--- a/docs/HaXml/Text-XML-HaXml-Wrappers.html
+++ b/docs/HaXml/Text-XML-HaXml-Wrappers.html
@@ -97,6 +97,22 @@
 >Posn</A
 > -&gt; IO ()</TD
 ></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AonContent"
+>onContent</A
+> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
+>CFilter</A
+> i -&gt; <A HREF="Text-XML-HaXml-Types.html#t%3ADocument"
+>Document</A
+> i -&gt; <A HREF="Text-XML-HaXml-Types.html#t%3ADocument"
+>Document</A
+> i</TD
+></TR
 ></TABLE
 ></TD
 ></TR
@@ -180,6 +196,42 @@
    the error-correcting HTML parser rather than the strict XML parser.
 </P
 ></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="topdecl"
+><TABLE CLASS="declbar"
+><TR
+><TD CLASS="declname"
+><A NAME="v%3AonContent"
+></A
+><B
+>onContent</B
+> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
+>CFilter</A
+> i -&gt; <A HREF="Text-XML-HaXml-Types.html#t%3ADocument"
+>Document</A
+> i -&gt; <A HREF="Text-XML-HaXml-Types.html#t%3ADocument"
+>Document</A
+> i</TD
+><TD CLASS="declbut"
+><A HREF="src/Text/XML/HaXml/Wrappers.html#onContent"
+>Source</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="doc"
+>The wrapper <TT
+>onContent</TT
+> simply applies a given content filter to a
+   document.  Ambiguous or empty results raise an error exception.
+</TD
 ></TR
 ><TR
 ><TD CLASS="s15"
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
@@ -2117,6 +2117,258 @@
 ></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, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> g) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> (a, b, c, d, e, f, g)</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, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> g, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> h) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> (a, b, c, d, e, f, g, h)</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, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> g, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> h, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> i) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> (a, b, c, d, e, f, g, h, i)</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, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> g, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> h, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> i, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> j) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> (a, b, c, d, e, f, g, h, i, j)</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, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> g, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> h, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> i, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> j, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> k) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> (a, b, c, d, e, f, g, h, i, j, k)</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, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> g, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> h, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> i, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> j, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> k, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> l) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> (a, b, c, d, e, f, g, h, i, j, k, l)</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, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> g, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> h, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> i, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> j, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> k, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> l, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> m) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> (a, b, c, d, e, f, g, h, i, j, k, l, m)</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, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> g, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> h, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> i, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> j, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> k, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> l, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> m, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> n) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> (a, b, c, d, e, f, g, h, i, j, k, l, m, n)</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, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> g, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> h, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> i, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> j, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> k, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> l, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> m, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> n, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> o) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"
+>XmlContent</A
+> (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)</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"
diff --git a/docs/HaXml/doc-index-O.html b/docs/HaXml/doc-index-O.html
--- a/docs/HaXml/doc-index-O.html
+++ b/docs/HaXml/doc-index-O.html
@@ -571,6 +571,14 @@
 ></TR
 ><TR
 ><TD CLASS="indexentry"
+>onContent</TD
+><TD CLASS="indexlinks"
+><A HREF="Text-XML-HaXml-Wrappers.html#v%3AonContent"
+>Text.XML.HaXml.Wrappers</A
+></TD
+></TR
+><TR
+><TD CLASS="indexentry"
 >oo</TD
 ><TD CLASS="indexlinks"
 ><A HREF="Text-XML-HaXml-Combinators.html#v%3Aoo"
diff --git a/docs/HaXml/src/Text/XML/HaXml.html b/docs/HaXml/src/Text/XML/HaXml.html
--- a/docs/HaXml/src/Text/XML/HaXml.html
+++ b/docs/HaXml/src/Text/XML/HaXml.html
@@ -1,40 +1,46 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Magenta><em>#</em></font>define dummy	<font color=Blue>-- just to ensure cpp gets called on this file</font>
-<a name="(line2)"></a><font color=Blue>-- | This is just a convenient way of bunching the XML combinators</font>
-<a name="(line3)"></a><font color=Blue>--   together with some other things you are likely to want at the</font>
-<a name="(line4)"></a><font color=Blue>--   same time.</font>
-<a name="(line5)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml
-<a name="(line6)"></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>Types
-<a name="(line7)"></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>Combinators
-<a name="(line8)"></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>Parse
-<a name="(line9)"></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>Pretty
-<a name="(line10)"></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>Html<font color=Cyan>.</font>Generate
-<a name="(line11)"></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>Html<font color=Cyan>.</font>Parse
-<a name="(line12)"></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>Validate
-<a name="(line13)"></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>Wrappers
-<a name="(line14)"></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>Verbatim
-<a name="(line15)"></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>Escape
-<a name="(line16)"></a>  <font color=Cyan>,</font> render
-<a name="(line17)"></a>  <font color=Cyan>,</font> version
-<a name="(line18)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line19)"></a>
-<a name="(line20)"></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="(line21)"></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="(line22)"></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>dtdParse<font color=Cyan>)</font>
-<a name="(line23)"></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>element<font color=Cyan>)</font>
-<a name="(line24)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Generate
-<a name="(line25)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Parse  <font color=Cyan>(</font>htmlParse<font color=Cyan>)</font>
-<a name="(line26)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Validate    <font color=Cyan>(</font>validate<font color=Cyan>)</font>
-<a name="(line27)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Wrappers    <font color=Cyan>(</font>fix2Args<font color=Cyan>,</font>processXmlWith<font color=Cyan>)</font>
-<a name="(line28)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim
-<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>Escape
-<a name="(line30)"></a>
-<a name="(line31)"></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="(line32)"></a>
-<a name="(line33)"></a><a name="version"></a><font color=Blue>-- | The version of the library.</font>
-<a name="(line34)"></a>version <font color=Red>::</font> String
-<a name="(line35)"></a>version  <font color=Red>=</font> <font color=Magenta>"VERSION"</font>
-<a name="(line36)"></a>		<font color=Blue>-- expect cpp to fill in value</font>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Magenta><em>#</em></font>define dummy	<font color=Blue>-- just to ensure cpp gets called on this file</font>
+<a name="line-2"></a><font color=Blue>-- | This is just a convenient way of bunching the XML combinators</font>
+<a name="line-3"></a><font color=Blue>--   together with some other things you are likely to want at the</font>
+<a name="line-4"></a><font color=Blue>--   same time.</font>
+<a name="line-5"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml
+<a name="line-6"></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>Types
+<a name="line-7"></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>Combinators
+<a name="line-8"></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>Parse
+<a name="line-9"></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>Pretty
+<a name="line-10"></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>Html<font color=Cyan>.</font>Generate
+<a name="line-11"></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>Html<font color=Cyan>.</font>Parse
+<a name="line-12"></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>Validate
+<a name="line-13"></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>Wrappers
+<a name="line-14"></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>Verbatim
+<a name="line-15"></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>Escape
+<a name="line-16"></a>  <font color=Cyan>,</font> render
+<a name="line-17"></a>  <font color=Cyan>,</font> version
+<a name="line-18"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-19"></a>
+<a name="line-20"></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="line-21"></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="line-22"></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>dtdParse<font color=Cyan>)</font>
+<a name="line-23"></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>element<font color=Cyan>)</font>
+<a name="line-24"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Generate
+<a name="line-25"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Parse  <font color=Cyan>(</font>htmlParse<font color=Cyan>)</font>
+<a name="line-26"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Validate    <font color=Cyan>(</font>validate<font color=Cyan>)</font>
+<a name="line-27"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Wrappers    <font color=Cyan>(</font>fix2Args<font color=Cyan>,</font>processXmlWith<font color=Cyan>)</font>
+<a name="line-28"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim
+<a name="line-29"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Escape
+<a name="line-30"></a>
+<a name="line-31"></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="line-32"></a>
+<a name="line-33"></a><a name="version"></a><font color=Blue>-- | The version of the library.</font>
+<a name="line-34"></a><font color=Blue>version</font> <font color=Red>::</font> String
+<a name="line-35"></a><font color=Blue>version</font>  <font color=Red>=</font> <font color=Magenta>"VERSION"</font>
+<a name="line-36"></a>		<font color=Blue>-- expect cpp to fill in value</font>
 </pre>
+</body>
 </html>
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
@@ -1,344 +1,350 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | This is a fast non-pretty-printer for turning the internal representation</font>
-<a name="(line2)"></a><font color=Blue>--   of generic structured XML documents into Lazy ByteStrings.</font>
-<a name="(line3)"></a><font color=Blue>--   Like in Text.Xml.HaXml.Pretty, there is one pp function for each type in</font>
-<a name="(line4)"></a><font color=Blue>--   Text.Xml.HaXml.Types, so you can pretty-print as much or as little</font>
-<a name="(line5)"></a><font color=Blue>--   of the document as you wish.</font>
-<a name="(line6)"></a>
-<a name="(line7)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ByteStringPP
-<a name="(line8)"></a>  <font color=Cyan>(</font>
-<a name="(line9)"></a>  <font color=Blue>-- * Pretty-print a whole document</font>
-<a name="(line10)"></a>    document
-<a name="(line11)"></a>  <font color=Blue>-- ** Just one content</font>
-<a name="(line12)"></a>  <font color=Cyan>,</font>   content
-<a name="(line13)"></a>  <font color=Blue>-- ** Just one tagged element</font>
-<a name="(line14)"></a>  <font color=Cyan>,</font>   element
-<a name="(line15)"></a>  <font color=Blue>-- * Pretty-print just a DTD</font>
-<a name="(line16)"></a>  <font color=Cyan>,</font> doctypedecl
-<a name="(line17)"></a>  <font color=Blue>-- ** The prolog</font>
-<a name="(line18)"></a>  <font color=Cyan>,</font>   prolog
-<a name="(line19)"></a>  <font color=Blue>-- ** A content particle description</font>
-<a name="(line20)"></a>  <font color=Cyan>,</font>   cp
-<a name="(line21)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<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="(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> 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 <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><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><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="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>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
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/ByteStringPP.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | This is a fast non-pretty-printer for turning the internal representation</font>
+<a name="line-2"></a><font color=Blue>--   of generic structured XML documents into Lazy ByteStrings.</font>
+<a name="line-3"></a><font color=Blue>--   Like in Text.Xml.HaXml.Pretty, there is one pp function for each type in</font>
+<a name="line-4"></a><font color=Blue>--   Text.Xml.HaXml.Types, so you can pretty-print as much or as little</font>
+<a name="line-5"></a><font color=Blue>--   of the document as you wish.</font>
+<a name="line-6"></a>
+<a name="line-7"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ByteStringPP
+<a name="line-8"></a>  <font color=Cyan>(</font>
+<a name="line-9"></a>  <font color=Blue>-- * Pretty-print a whole document</font>
+<a name="line-10"></a>    document
+<a name="line-11"></a>  <font color=Blue>-- ** Just one content</font>
+<a name="line-12"></a>  <font color=Cyan>,</font>   content
+<a name="line-13"></a>  <font color=Blue>-- ** Just one tagged element</font>
+<a name="line-14"></a>  <font color=Cyan>,</font>   element
+<a name="line-15"></a>  <font color=Blue>-- * Pretty-print just a DTD</font>
+<a name="line-16"></a>  <font color=Cyan>,</font> doctypedecl
+<a name="line-17"></a>  <font color=Blue>-- ** The prolog</font>
+<a name="line-18"></a>  <font color=Cyan>,</font>   prolog
+<a name="line-19"></a>  <font color=Blue>-- ** A content particle description</font>
+<a name="line-20"></a>  <font color=Cyan>,</font>   cp
+<a name="line-21"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-22"></a>
+<a name="line-23"></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="line-24"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
+<a name="line-25"></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="line-26"></a><font color=Blue>--import Data.ByteString.Lazy hiding (pack,map,head,any,singleton,intersperse,join)</font>
+<a name="line-27"></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="line-28"></a>                                  <font color=Cyan>,</font> append<font color=Cyan>,</font> elem<font color=Cyan>,</font> empty<font color=Cyan>)</font>
+<a name="line-29"></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="line-30"></a>
+<a name="line-31"></a><a name="either"></a><font color=Blue>either</font> <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="line-32"></a><font color=Blue>either</font> 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="line-33"></a><font color=Blue>either</font> <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="line-34"></a>
+<a name="line-35"></a><a name="maybe"></a><font color=Blue>maybe</font> <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="line-36"></a><font color=Blue>maybe</font> <font color=Green><u>_</u></font> Nothing  <font color=Red>=</font> empty
+<a name="line-37"></a><font color=Blue>maybe</font> f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x
+<a name="line-38"></a>
+<a name="line-39"></a>
+<a name="line-40"></a><font color=Blue>-- A simple implementation of the pretty-printing combinator interface,</font>
+<a name="line-41"></a><font color=Blue>-- but for plain ByteStrings:</font>
+<a name="line-42"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan>&lt;&gt;</font>
+<a name="line-43"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="line-44"></a><font color=Green><u>infixl</u></font> <font color=Magenta>5</font> <font color=Cyan>$$</font>
+<a name="line-45"></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="line-46"></a><a name="hcat"></a><font color=Blue>hcat</font>   <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="line-47"></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="line-48"></a><a name="hsep"></a><font color=Blue>hsep</font>   <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="line-49"></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="line-50"></a>                                                   <font color=Blue>-- overlap, it "dovetails"</font>
+<a name="line-51"></a><a name="vcat"></a><font color=Blue>vcat</font>   <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="line-52"></a><a name="sep"></a><font color=Blue>-- cat    :: [ByteString] -&gt; ByteString       -- Either hcat or vcat</font>
+<a name="line-53"></a><font color=Blue>sep</font>    <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="line-54"></a><a name="fsep"></a><font color=Blue>-- fcat   :: [ByteString] -&gt; ByteString       -- ``Paragraph fill'' version of cat</font>
+<a name="line-55"></a><font color=Blue>fsep</font>   <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="line-56"></a><a name="nest"></a><font color=Blue>nest</font>   <font color=Red>::</font> Int <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString  <font color=Blue>-- Nested</font>
+<a name="line-57"></a>
+<a name="line-58"></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="line-59"></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="line-60"></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="line-61"></a><font color=Blue>-- ($+$)        = ($$)</font>
+<a name="line-62"></a>
+<a name="line-63"></a><font color=Blue>hcat</font> <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="line-64"></a><font color=Blue>hsep</font> <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="line-65"></a><font color=Blue>vcat</font> <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="line-66"></a><font color=Green><u>_</u></font>  <font color=Red>=</font> hcat
+<a name="line-67"></a><font color=Blue>sep</font>  <font color=Red>=</font> hsep
+<a name="line-68"></a><a name="text"></a><font color=Blue>text</font> <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString
+<a name="line-69"></a><font color=Blue>text</font> <font color=Red>=</font> pack
+<a name="line-70"></a><font color=Blue>-- _ = cat</font>
+<a name="line-71"></a><font color=Blue>fsep</font> <font color=Red>=</font> sep
+<a name="line-72"></a><font color=Blue>nest</font> <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="line-73"></a><a name="parens"></a><font color=Blue>parens</font> <font color=Red>::</font> ByteString <font color=Red>-&gt;</font> ByteString
+<a name="line-74"></a><font color=Blue>parens</font> 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="line-75"></a>
+<a name="line-76"></a>
+<a name="line-77"></a><font color=Blue>----</font>
+<a name="line-78"></a><font color=Blue>-- Now for the XML pretty-printing interface.</font>
+<a name="line-79"></a><font color=Blue>-- (Basically copied direct from Text.XML.HaXml.Pretty).</font>
+<a name="line-80"></a>
+<a name="line-81"></a><a name="document"></a><font color=Blue>document</font> <font color=Red>::</font> Document i <font color=Red>-&gt;</font> ByteString
+<a name="line-82"></a><a name="prolog"></a><font color=Blue>prolog</font>   <font color=Red>::</font> Prolog     <font color=Red>-&gt;</font> ByteString
+<a name="line-83"></a><a name="xmldecl"></a><font color=Blue>xmldecl</font>  <font color=Red>::</font> XMLDecl    <font color=Red>-&gt;</font> ByteString
+<a name="line-84"></a><a name="misc"></a><font color=Blue>misc</font>     <font color=Red>::</font> Misc       <font color=Red>-&gt;</font> ByteString
+<a name="line-85"></a><a name="sddecl"></a><font color=Blue>sddecl</font>   <font color=Red>::</font> Bool       <font color=Red>-&gt;</font> ByteString
+<a name="line-86"></a>
+<a name="line-87"></a><a name="doctypedecl"></a><font color=Blue>doctypedecl</font>   <font color=Red>::</font> DocTypeDecl   <font color=Red>-&gt;</font> ByteString
+<a name="line-88"></a><a name="markupdecl"></a><font color=Blue>markupdecl</font>    <font color=Red>::</font> MarkupDecl    <font color=Red>-&gt;</font> ByteString
+<a name="line-89"></a><a name="cp"></a><font color=Blue>-- extsubset     :: ExtSubset     -&gt; ByteString</font>
+<a name="line-90"></a><font color=Blue>-- extsubsetdecl :: ExtSubsetDecl -&gt; ByteString</font>
+<a name="line-91"></a><font color=Blue>cp</font>            <font color=Red>::</font> CP            <font color=Red>-&gt;</font> ByteString
+<a name="line-92"></a>
+<a name="line-93"></a><a name="element"></a><font color=Blue>element</font>   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> ByteString
+<a name="line-94"></a><a name="attribute"></a><font color=Blue>attribute</font> <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> ByteString
+<a name="line-95"></a><a name="content"></a><font color=Blue>content</font>   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> ByteString
+<a name="line-96"></a>
+<a name="line-97"></a><font color=Blue>----</font>
+<a name="line-98"></a>
+<a name="line-99"></a><font color=Blue>document</font> <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="line-100"></a><font color=Blue>prolog</font> <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="line-101"></a>                             vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="line-102"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>
+<a name="line-103"></a>                             vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m2<font color=Cyan>)</font>
+<a name="line-104"></a><font color=Blue>xmldecl</font> <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="line-105"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>
+<a name="line-106"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>
+<a name="line-107"></a>                             text <font color=Magenta>"?&gt;"</font>
+<a name="line-108"></a><font color=Blue>misc</font> <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="line-109"></a><font color=Blue>misc</font> <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="line-110"></a><font color=Blue>sddecl</font> sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>
+<a name="line-111"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>
+<a name="line-112"></a><font color=Blue>doctypedecl</font> <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="line-113"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="line-114"></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="line-115"></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="line-116"></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="line-117"></a>                                      maybe externalid eid
+<a name="line-118"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e
+<a name="line-119"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a
+<a name="line-120"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e
+<a name="line-121"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n
+<a name="line-122"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m
+<a name="line-123"></a><font color=Blue>--markupdecl (MarkupPE p m)  = peref p</font>
+<a name="line-124"></a><font color=Blue>-- _ (ExtSubset t ds) = maybe textdecl t $$</font>
+<a name="line-125"></a><font color=Blue>--                             vcat (Prelude.map extsubsetdecl ds)</font>
+<a name="line-126"></a><font color=Blue>-- _ (ExtMarkupDecl m)      = markupdecl m</font>
+<a name="line-127"></a><font color=Blue>-- extsubsetdecl (ExtConditionalSect c) = conditionalsect c</font>
+<a name="line-128"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e)   = peref p</font>
+<a name="line-129"></a>
+<a name="line-130"></a><font color=Blue>element</font> <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="line-131"></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="line-132"></a><font color=Blue>element</font> 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="line-133"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>
+<a name="line-134"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>
+<a name="line-135"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>
+<a name="line-136"></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="line-137"></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="line-138"></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="line-139"></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="line-140"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c
+<a name="line-141"></a>
+<a name="line-142"></a><a name="isText"></a><font color=Blue>isText</font> <font color=Red>::</font> Content t <font color=Red>-&gt;</font> Bool
+<a name="line-143"></a><font color=Blue>isText</font> <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="line-144"></a><font color=Blue>isText</font> <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="line-145"></a><font color=Blue>isText</font> <font color=Green><u>_</u></font>               <font color=Red>=</font> False
+<a name="line-146"></a>
+<a name="line-147"></a><a name="carryelem"></a><font color=Blue>carryelem</font> <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="line-148"></a><font color=Blue>carryelem</font> <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c
+<a name="line-149"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
+<a name="line-150"></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="line-151"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>
+<a name="line-152"></a><font color=Blue>carryelem</font> <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c
+<a name="line-153"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>
+<a name="line-154"></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="line-155"></a>                          <font color=Green><u>in</u></font>
+<a name="line-156"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
+<a name="line-157"></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="line-158"></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="line-159"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n
+<a name="line-160"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="line-161"></a><a name="carrycontent"></a><font color=Blue>carrycontent</font> <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="line-162"></a><font color=Blue>carrycontent</font> <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="line-163"></a><font color=Blue>carrycontent</font> <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="line-164"></a><font color=Blue>carrycontent</font> <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="line-165"></a><font color=Blue>carrycontent</font> <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="line-166"></a><font color=Blue>carrycontent</font> <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="line-167"></a>
+<a name="line-168"></a><a name="carryscan"></a><font color=Blue>carryscan</font> <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="line-169"></a><font color=Blue>carryscan</font> <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="line-170"></a><font color=Blue>carryscan</font> 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="line-171"></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="line-172"></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="line-173"></a>
+<a name="line-174"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>
+<a name="line-175"></a><font color=Blue>--  | isText (head cs) =</font>
+<a name="line-176"></a><font color=Blue>--        ( start &lt;&gt;</font>
+<a name="line-177"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
+<a name="line-178"></a><font color=Blue>--        , text "&gt;")</font>
+<a name="line-179"></a><font color=Blue>--  | otherwise =</font>
+<a name="line-180"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>
+<a name="line-181"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
+<a name="line-182"></a><font color=Blue>--        , text "&gt;")</font>
+<a name="line-183"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>
+<a name="line-184"></a><font color=Blue>--</font>
+<a name="line-185"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>
+<a name="line-186"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>
+<a name="line-187"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>
+<a name="line-188"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>
+<a name="line-189"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>
+<a name="line-190"></a>
+<a name="line-191"></a>
+<a name="line-192"></a><font color=Blue>attribute</font> <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="line-193"></a><font color=Blue>content</font> <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e
+<a name="line-194"></a><font color=Blue>content</font> <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="line-195"></a><font color=Blue>content</font> <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="line-196"></a><font color=Blue>content</font> <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r
+<a name="line-197"></a><font color=Blue>content</font> <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m
+<a name="line-198"></a>
+<a name="line-199"></a><a name="elementdecl"></a><font color=Blue>elementdecl</font> <font color=Red>::</font> ElementDecl <font color=Red>-&gt;</font> ByteString
+<a name="line-200"></a><font color=Blue>elementdecl</font> <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="line-201"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="line-202"></a><a name="contentspec"></a><font color=Blue>contentspec</font> <font color=Red>::</font> ContentSpec <font color=Red>-&gt;</font> ByteString
+<a name="line-203"></a><font color=Blue>contentspec</font> EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>
+<a name="line-204"></a><font color=Blue>contentspec</font> ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>
+<a name="line-205"></a><font color=Blue>contentspec</font> <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m
+<a name="line-206"></a><font color=Blue>contentspec</font> <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c
+<a name="line-207"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>
+<a name="line-208"></a><font color=Blue>cp</font> <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="line-209"></a><font color=Blue>cp</font> <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="line-210"></a>                           modifier m
+<a name="line-211"></a><font color=Blue>cp</font> <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="line-212"></a>                           modifier m
+<a name="line-213"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>
+<a name="line-214"></a><font color=Blue>modifier</font> <font color=Red>::</font> Modifier <font color=Red>-&gt;</font> ByteString
+<a name="line-215"></a><font color=Blue>modifier</font> None          <font color=Red>=</font> empty
+<a name="line-216"></a><font color=Blue>modifier</font> Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>
+<a name="line-217"></a><font color=Blue>modifier</font> Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>
+<a name="line-218"></a><font color=Blue>modifier</font> Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>
+<a name="line-219"></a><a name="mixed"></a><font color=Blue>mixed</font> <font color=Red>::</font> Mixed <font color=Red>-&gt;</font> ByteString
+<a name="line-220"></a><font color=Blue>mixed</font>  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>
+<a name="line-221"></a><font color=Blue>mixed</font> <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="line-222"></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="line-223"></a>                         text <font color=Magenta>")*"</font>
+<a name="line-224"></a>
+<a name="line-225"></a><a name="attlistdecl"></a><font color=Blue>attlistdecl</font> <font color=Red>::</font> AttListDecl <font color=Red>-&gt;</font> ByteString
+<a name="line-226"></a><font color=Blue>attlistdecl</font> <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="line-227"></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="line-228"></a><a name="attdef"></a><font color=Blue>attdef</font> <font color=Red>::</font> AttDef <font color=Red>-&gt;</font> ByteString
+<a name="line-229"></a><font color=Blue>attdef</font> <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="line-230"></a><a name="atttype"></a><font color=Blue>atttype</font> <font color=Red>::</font> AttType <font color=Red>-&gt;</font> ByteString
+<a name="line-231"></a><font color=Blue>atttype</font>  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>
+<a name="line-232"></a><font color=Blue>atttype</font> <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t
+<a name="line-233"></a><font color=Blue>atttype</font> <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t
+<a name="line-234"></a><a name="tokenizedtype"></a><font color=Blue>tokenizedtype</font> <font color=Red>::</font> TokenizedType <font color=Red>-&gt;</font> ByteString
+<a name="line-235"></a><font color=Blue>tokenizedtype</font> ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>
+<a name="line-236"></a><font color=Blue>tokenizedtype</font> IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>
+<a name="line-237"></a><font color=Blue>tokenizedtype</font> IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>
+<a name="line-238"></a><font color=Blue>tokenizedtype</font> ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>
+<a name="line-239"></a><font color=Blue>tokenizedtype</font> ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>
+<a name="line-240"></a><font color=Blue>tokenizedtype</font> NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>
+<a name="line-241"></a><font color=Blue>tokenizedtype</font> NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>
+<a name="line-242"></a><a name="enumeratedtype"></a><font color=Blue>enumeratedtype</font> <font color=Red>::</font> EnumeratedType <font color=Red>-&gt;</font> ByteString
+<a name="line-243"></a><font color=Blue>enumeratedtype</font> <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n
+<a name="line-244"></a><font color=Blue>enumeratedtype</font> <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e
+<a name="line-245"></a><a name="notationtype"></a><font color=Blue>notationtype</font> <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="line-246"></a><font color=Blue>notationtype</font> ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="line-247"></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="line-248"></a><a name="enumeration"></a><font color=Blue>enumeration</font> <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="line-249"></a><font color=Blue>enumeration</font> 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="line-250"></a><a name="defaultdecl"></a><font color=Blue>defaultdecl</font> <font color=Red>::</font> DefaultDecl <font color=Red>-&gt;</font> ByteString
+<a name="line-251"></a><font color=Blue>defaultdecl</font>  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>
+<a name="line-252"></a><font color=Blue>defaultdecl</font>  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>
+<a name="line-253"></a><font color=Blue>defaultdecl</font> <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="line-254"></a><a name="reference"></a><font color=Blue>--_ (IncludeSect i)= text "&lt;![INCLUDE [" &lt;+&gt;</font>
+<a name="line-255"></a><font color=Blue>--                                 vcat (Prelude.map extsubsetdecl i) &lt;+&gt; text "]]&gt;"</font>
+<a name="line-256"></a><font color=Blue>-- conditionalsect (IgnoreSect i) = text "&lt;![IGNORE [" &lt;+&gt;</font>
+<a name="line-257"></a><font color=Blue>--                                  fsep (Prelude.map ignoresectcontents i) &lt;+&gt; text "]]&gt;"</font>
+<a name="line-258"></a><font color=Blue>-- -- _ (Ignore)                = empty</font>
+<a name="line-259"></a><font color=Blue>-- ignoresectcontents :: IgnoreSectContents -&gt; ByteString</font>
+<a name="line-260"></a><font color=Blue>-- _ (IgnoreSectContents i is)</font>
+<a name="line-261"></a><font color=Blue>--                                = ignore i &lt;+&gt; vcat (Prelude.map internal is)</font>
+<a name="line-262"></a><font color=Blue>--                           where internal (ics,i) = text "&lt;![[" &lt;+&gt;</font>
+<a name="line-263"></a><font color=Blue>--                                                    ignoresectcontents ics &lt;+&gt;</font>
+<a name="line-264"></a><font color=Blue>--                                                    text "]]&gt;" &lt;+&gt; ignore i</font>
+<a name="line-265"></a><font color=Blue>reference</font> <font color=Red>::</font> Reference <font color=Red>-&gt;</font> ByteString
+<a name="line-266"></a><font color=Blue>reference</font> <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er
+<a name="line-267"></a><font color=Blue>reference</font> <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr
+<a name="line-268"></a><a name="entityref"></a><font color=Blue>entityref</font> <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString
+<a name="line-269"></a><font color=Blue>entityref</font> 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="line-270"></a><a name="charref"></a><font color=Blue>charref</font> <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="line-271"></a><font color=Blue>charref</font> 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="line-272"></a><a name="entitydecl"></a><font color=Blue>entitydecl</font> <font color=Red>::</font> EntityDecl <font color=Red>-&gt;</font> ByteString
+<a name="line-273"></a><font color=Blue>entitydecl</font> <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d
+<a name="line-274"></a><font color=Blue>entitydecl</font> <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d
+<a name="line-275"></a><a name="gedecl"></a><font color=Blue>gedecl</font> <font color=Red>::</font> GEDecl <font color=Red>-&gt;</font> ByteString
+<a name="line-276"></a><font color=Blue>gedecl</font> <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="line-277"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="line-278"></a><a name="pedecl"></a><font color=Blue>pedecl</font> <font color=Red>::</font> PEDecl <font color=Red>-&gt;</font> ByteString
+<a name="line-279"></a><font color=Blue>pedecl</font> <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="line-280"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="line-281"></a><a name="entitydef"></a><font color=Blue>entitydef</font> <font color=Red>::</font> EntityDef <font color=Red>-&gt;</font> ByteString
+<a name="line-282"></a><font color=Blue>entitydef</font> <font color=Cyan>(</font>DefEntityValue ew<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ew
+<a name="line-283"></a><font color=Blue>entitydef</font> <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="line-284"></a><a name="pedef"></a><font color=Blue>pedef</font> <font color=Red>::</font> PEDef <font color=Red>-&gt;</font> ByteString
+<a name="line-285"></a><font color=Blue>pedef</font> <font color=Cyan>(</font>PEDefEntityValue ew<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ew
+<a name="line-286"></a><font color=Blue>pedef</font> <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid
+<a name="line-287"></a><a name="externalid"></a><font color=Blue>externalid</font> <font color=Red>::</font> ExternalID <font color=Red>-&gt;</font> ByteString
+<a name="line-288"></a><font color=Blue>externalid</font> <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="line-289"></a><font color=Blue>externalid</font> <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="line-290"></a>                                 systemliteral sl
+<a name="line-291"></a><a name="ndatadecl"></a><font color=Blue>ndatadecl</font> <font color=Red>::</font> NDataDecl <font color=Red>-&gt;</font> ByteString
+<a name="line-292"></a><font color=Blue>ndatadecl</font> <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="line-293"></a><a name="notationdecl"></a><font color=Blue>-- _ (TextDecl vi ed)      = text "&lt;?xml" &lt;+&gt; maybe text vi &lt;+&gt;</font>
+<a name="line-294"></a><font color=Blue>--                                  encodingdecl ed &lt;&gt; text "?&gt;"</font>
+<a name="line-295"></a><font color=Blue>-- extparsedent :: ExtParsedEnt t -&gt; ByteString</font>
+<a name="line-296"></a><font color=Blue>-- _ (ExtParsedEnt t c)= maybe textdecl t &lt;+&gt; content c</font>
+<a name="line-297"></a><font color=Blue>-- _ (ExtPE t esd)            = maybe textdecl t &lt;+&gt;</font>
+<a name="line-298"></a><font color=Blue>--                                  vcat (Prelude.map extsubsetdecl esd)</font>
+<a name="line-299"></a><font color=Blue>notationdecl</font> <font color=Red>::</font> NotationDecl <font color=Red>-&gt;</font> ByteString
+<a name="line-300"></a><font color=Blue>notationdecl</font> <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="line-301"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>
+<a name="line-302"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="line-303"></a><a name="publicid"></a><font color=Blue>publicid</font> <font color=Red>::</font> PublicID <font color=Red>-&gt;</font> ByteString
+<a name="line-304"></a><font color=Blue>publicid</font> <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="line-305"></a><a name="encodingdecl"></a><font color=Blue>encodingdecl</font> <font color=Red>::</font> EncodingDecl <font color=Red>-&gt;</font> ByteString
+<a name="line-306"></a><font color=Blue>encodingdecl</font> <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="line-307"></a><a name="nmtoken"></a><font color=Blue>nmtoken</font> <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString
+<a name="line-308"></a><font color=Blue>nmtoken</font> s                      <font color=Red>=</font> text s
+<a name="line-309"></a><a name="attvalue"></a><font color=Blue>attvalue</font> <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> ByteString
+<a name="line-310"></a><font color=Blue>attvalue</font> <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="line-311"></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="line-312"></a>                                 text <font color=Magenta>"\""</font>
+<a name="line-313"></a><a name="entityvalue"></a><font color=Blue>entityvalue</font> <font color=Red>::</font> EntityValue <font color=Red>-&gt;</font> ByteString
+<a name="line-314"></a><font color=Blue>entityvalue</font> <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>
+<a name="line-315"></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="line-316"></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="line-317"></a><a name="ev"></a><font color=Blue>ev</font> <font color=Red>::</font> EV <font color=Red>-&gt;</font> ByteString
+<a name="line-318"></a><font color=Blue>ev</font> <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s
+<a name="line-319"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>
+<a name="line-320"></a><font color=Blue>ev</font> <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r
+<a name="line-321"></a><a name="pubidliteral"></a><font color=Blue>pubidliteral</font> <font color=Red>::</font> PubidLiteral <font color=Red>-&gt;</font> ByteString
+<a name="line-322"></a><font color=Blue>pubidliteral</font> <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>
+<a name="line-323"></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="line-324"></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="line-325"></a><a name="systemliteral"></a><font color=Blue>systemliteral</font> <font color=Red>::</font> SystemLiteral <font color=Red>-&gt;</font> ByteString
+<a name="line-326"></a><font color=Blue>systemliteral</font> <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>
+<a name="line-327"></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="line-328"></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="line-329"></a><a name="chardata"></a><font color=Blue>chardata</font><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="line-330"></a><font color=Blue>chardata</font> s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s
+<a name="line-331"></a><a name="cdsect"></a><font color=Blue>cdsect</font> 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="line-332"></a>
+<a name="line-333"></a><a name="toWord8"></a><font color=Blue>-- toWord8 :: Char -&gt; Word8</font>
+<a name="line-334"></a><font color=Blue>toWord8</font> <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="line-335"></a><font color=Blue>toWord8</font> <font color=Red>=</font> toEnum <font color=Cyan>.</font> fromEnum
+<a name="line-336"></a>
+<a name="line-337"></a><a name="containsDoubleQuote"></a><font color=Blue>containsDoubleQuote</font> <font color=Red>::</font> <font color=Red>[</font>EV<font color=Red>]</font> <font color=Red>-&gt;</font> Bool
+<a name="line-338"></a><font color=Blue>containsDoubleQuote</font> evs <font color=Red>=</font> any csq evs
+<a name="line-339"></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="line-340"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False
 </pre>
+</body>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Combinators.html b/docs/HaXml/src/Text/XML/HaXml/Combinators.html
--- a/docs/HaXml/src/Text/XML/HaXml/Combinators.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Combinators.html
@@ -1,428 +1,434 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>--------------------------------------------</font>
-<a name="(line2)"></a><font color=Blue>-- | This module defines the notion of filters and filter combinators</font>
-<a name="(line3)"></a><font color=Blue>--   for processing XML documents.</font>
-<a name="(line4)"></a><font color=Blue>--</font>
-<a name="(line5)"></a><font color=Blue>--   These XML transformation combinators are described in the paper</font>
-<a name="(line6)"></a><font color=Blue>--   ``Haskell and XML: Generic Combinators or Type-Based Translation?''</font>
-<a name="(line7)"></a><font color=Blue>--   Malcolm Wallace and Colin Runciman, Proceedings ICFP'99.</font>
-<a name="(line8)"></a><font color=Blue>--------------------------------------------</font>
-<a name="(line9)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators
-<a name="(line10)"></a>  <font color=Cyan>(</font><font color=Blue>-- * The content filter type.</font>
-<a name="(line11)"></a>    CFilter
-<a name="(line12)"></a>
-<a name="(line13)"></a>   <font color=Blue>-- * Simple filters.</font>
-<a name="(line14)"></a>   <font color=Blue>-- ** Selection filters.</font>
-<a name="(line15)"></a>   <font color=Blue>-- $selection</font>
-<a name="(line16)"></a>  <font color=Cyan>,</font> keep<font color=Cyan>,</font> none<font color=Cyan>,</font> children<font color=Cyan>,</font> position
-<a name="(line17)"></a>
-<a name="(line18)"></a>   <font color=Blue>-- ** Predicate filters.</font>
-<a name="(line19)"></a>   <font color=Blue>-- $pred</font>
-<a name="(line20)"></a>  <font color=Cyan>,</font> elm<font color=Cyan>,</font> txt<font color=Cyan>,</font> tag<font color=Cyan>,</font> attr<font color=Cyan>,</font> attrval<font color=Cyan>,</font> tagWith
-<a name="(line21)"></a>
-<a name="(line22)"></a>   <font color=Blue>-- ** Search filters.</font>
-<a name="(line23)"></a>  <font color=Cyan>,</font> find<font color=Cyan>,</font> iffind<font color=Cyan>,</font> ifTxt
-<a name="(line24)"></a>
-<a name="(line25)"></a>   <font color=Blue>-- * Filter combinators</font>
-<a name="(line26)"></a>   <font color=Blue>-- ** Basic combinators.</font>
-<a name="(line27)"></a>  <font color=Cyan>,</font> o<font color=Cyan>,</font> union<font color=Cyan>,</font> cat<font color=Cyan>,</font> andThen
-<a name="(line28)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>|&gt;|</font><font color=Cyan>)</font><font color=Cyan>,</font> with<font color=Cyan>,</font> without
-<a name="(line29)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>/&gt;</font><font color=Cyan>)</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>&lt;/</font><font color=Cyan>)</font><font color=Cyan>,</font> et
-<a name="(line30)"></a>  <font color=Cyan>,</font> path
-<a name="(line31)"></a>   <font color=Blue>-- ** Recursive search.</font>
-<a name="(line32)"></a>   <font color=Blue>-- $recursive</font>
-<a name="(line33)"></a>  <font color=Cyan>,</font> deep<font color=Cyan>,</font> deepest<font color=Cyan>,</font> multi
-<a name="(line34)"></a>   <font color=Blue>-- ** Interior editing.</font>
-<a name="(line35)"></a>  <font color=Cyan>,</font> when<font color=Cyan>,</font> guards<font color=Cyan>,</font> chip<font color=Cyan>,</font> inplace<font color=Cyan>,</font> foldXml
-<a name="(line36)"></a>   <font color=Blue>-- ** Constructive filters.</font>
-<a name="(line37)"></a>  <font color=Cyan>,</font> mkElem<font color=Cyan>,</font> mkElemAttr<font color=Cyan>,</font> literal<font color=Cyan>,</font> cdata<font color=Cyan>,</font> replaceTag<font color=Cyan>,</font> replaceAttrs
-<a name="(line38)"></a>
-<a name="(line39)"></a>   <font color=Blue>-- * C-like conditionals.</font>
-<a name="(line40)"></a>   <font color=Blue>-- $cond</font>
-<a name="(line41)"></a>  <font color=Cyan>,</font> ThenElse<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>?&gt;</font><font color=Cyan>)</font>
-<a name="(line42)"></a>
-<a name="(line43)"></a>   <font color=Blue>-- * Filters with labelled results.</font>
-<a name="(line44)"></a>  <font color=Cyan>,</font> LabelFilter
-<a name="(line45)"></a>   <font color=Blue>-- ** Using and combining labelled filters.</font>
-<a name="(line46)"></a>  <font color=Cyan>,</font> oo<font color=Cyan>,</font> x
-<a name="(line47)"></a>   <font color=Blue>-- ** Some label-generating filters.</font>
-<a name="(line48)"></a>  <font color=Cyan>,</font> numbered<font color=Cyan>,</font> interspersed<font color=Cyan>,</font> tagged<font color=Cyan>,</font> attributed<font color=Cyan>,</font> textlabelled<font color=Cyan>,</font> extracted
-<a name="(line49)"></a>
-<a name="(line50)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line51)"></a>
-<a name="(line52)"></a>
-<a name="(line53)"></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="(line54)"></a><font color=Green><u>import</u></font> Maybe <font color=Cyan>(</font>fromMaybe<font color=Cyan>)</font>
-<a name="(line55)"></a>
-<a name="(line56)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan>`with`</font><font color=Cyan>,</font> <font color=Cyan>`without`</font>
-<a name="(line57)"></a><font color=Green><u>infixr</u></font> <font color=Magenta>5</font> <font color=Cyan>`o`</font><font color=Cyan>,</font> <font color=Cyan>`oo`</font><font color=Cyan>,</font> <font color=Cyan>`union`</font><font color=Cyan>,</font> <font color=Cyan>`andThen`</font>		<font color=Blue>-- , `orelse`</font>
-<a name="(line58)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>5</font> <font color=Cyan>/&gt;</font><font color=Cyan>,</font> <font color=Cyan>&lt;/</font><font color=Cyan>,</font> <font color=Cyan>|&gt;|</font>
-<a name="(line59)"></a><font color=Green><u>infixr</u></font> <font color=Magenta>4</font> <font color=Cyan>`when`</font><font color=Cyan>,</font> <font color=Cyan>`guards`</font>
-<a name="(line60)"></a><font color=Green><u>infixr</u></font> <font color=Magenta>3</font> <font color=Cyan>?&gt;</font><font color=Cyan>,</font> <font color=Red><b>:&gt;</b></font>
-<a name="(line61)"></a>
-<a name="(line62)"></a>
-<a name="(line63)"></a>
-<a name="(line64)"></a><font color=Blue>-- THE CONTENT FILTER TYPE</font>
-<a name="(line65)"></a>
-<a name="(line66)"></a><a name="CFilter"></a><font color=Blue>-- | All document transformations are /content filters/.</font>
-<a name="(line67)"></a><a name="CFilter"></a><font color=Blue>--   A filter takes a single XML 'Content' value and returns a sequence</font>
-<a name="(line68)"></a><a name="CFilter"></a><font color=Blue>--   of 'Content' values, possibly empty.</font>
-<a name="(line69)"></a><a name="CFilter"></a><font color=Green><u>type</u></font> CFilter i  <font color=Red>=</font> Content i <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font>
-<a name="(line70)"></a>
-<a name="(line71)"></a>
-<a name="(line72)"></a>
-<a name="(line73)"></a><a name="keep"></a><font color=Blue>-- BASIC SELECTION FILTERS</font>
-<a name="(line74)"></a><font color=Blue>-- $selection</font>
-<a name="(line75)"></a><font color=Blue>-- In the algebra of combinators, @none@ is the zero, and @keep@ the identity.</font>
-<a name="(line76)"></a><font color=Blue>-- (They have a more general type than just CFilter.)</font>
-<a name="(line77)"></a>keep <font color=Red>::</font> a<font color=Red>-&gt;</font><font color=Red>[</font>a<font color=Red>]</font>
-<a name="(line78)"></a>keep <font color=Red>=</font> <font color=Red>\</font>x<font color=Red>-&gt;</font><font color=Red>[</font>x<font color=Red>]</font>
-<a name="(line79)"></a><a name="none"></a>none <font color=Red>::</font> a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font>
-<a name="(line80)"></a>none <font color=Red>=</font> <font color=Red>\</font>x<font color=Red>-&gt;</font>[]
-<a name="(line81)"></a>
-<a name="(line82)"></a><a name="children"></a><font color=Blue>-- | Throw away current node, keep just the (unprocessed) children.</font>
-<a name="(line83)"></a>children <font color=Red>::</font> CFilter i
-<a name="(line84)"></a>children <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> cs
-<a name="(line85)"></a>children <font color=Green><u>_</u></font> <font color=Red>=</font> []
-<a name="(line86)"></a>
-<a name="(line87)"></a><a name="position"></a><font color=Blue>-- | Select the @n@'th positional result of a filter.</font>
-<a name="(line88)"></a>position <font color=Red>::</font> Int <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line89)"></a>position n f <font color=Red>=</font> <font color=Cyan>(</font><font color=Red>\</font>cs<font color=Red>-&gt;</font> <font color=Red>[</font>cs<font color=Cyan>!!</font>n<font color=Red>]</font><font color=Cyan>)</font> <font color=Cyan>.</font> f
-<a name="(line90)"></a>
-<a name="(line91)"></a>
-<a name="(line92)"></a>
-<a name="(line93)"></a><font color=Blue>-- BASIC PREDICATE FILTERS</font>
-<a name="(line94)"></a><font color=Blue>-- $pred</font>
-<a name="(line95)"></a><font color=Blue>-- These filters either keep or throw away some content based on</font>
-<a name="(line96)"></a><font color=Blue>-- a simple test.  For instance, @elm@ keeps only a tagged element,</font>
-<a name="(line97)"></a><font color=Blue>-- @txt@ keeps only non-element text, @tag@ keeps only an element</font>
-<a name="(line98)"></a><font color=Blue>-- with the named tag, @attr@ keeps only an element with the named</font>
-<a name="(line99)"></a><font color=Blue>-- attribute, @attrval@ keeps only an element with the given</font>
-<a name="(line100)"></a><font color=Blue>-- attribute value, @tagWith@ keeps only an element whose tag name</font>
-<a name="(line101)"></a><font color=Blue>-- satisfies the given predicate.</font>
-<a name="(line102)"></a>
-<a name="(line103)"></a><a name="elm"></a>elm<font color=Cyan>,</font> txt   <font color=Red>::</font> CFilter i
-<a name="(line104)"></a><a name="tag"></a>tag        <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i
-<a name="(line105)"></a><a name="attr"></a>attr       <font color=Red>::</font> Name <font color=Red>-&gt;</font> CFilter i
-<a name="(line106)"></a><a name="attrval"></a>attrval    <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> CFilter i
-<a name="(line107)"></a><a name="tagWith"></a>tagWith    <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> CFilter i
-<a name="(line108)"></a>
-<a name="(line109)"></a>elm x<font color=Red>@</font><font color=Cyan>(</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>x<font color=Red>]</font>
-<a name="(line110)"></a>elm <font color=Green><u>_</u></font>             <font color=Red>=</font> []
-<a name="(line111)"></a>
-<a name="(line112)"></a><a name="txt"></a>txt x<font color=Red>@</font><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> <font color=Red>[</font>x<font color=Red>]</font>
-<a name="(line113)"></a>txt x<font color=Red>@</font><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> <font color=Red>[</font>x<font color=Red>]</font>
-<a name="(line114)"></a>txt <font color=Green><u>_</u></font>                 <font color=Red>=</font> []
-<a name="(line115)"></a>
-<a name="(line116)"></a>tag t x<font color=Red>@</font><font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem n <font color=Green><u>_</u></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> t<font color=Cyan>==</font>n  <font color=Red>=</font> <font color=Red>[</font>x<font color=Red>]</font>
-<a name="(line117)"></a>tag t <font color=Green><u>_</u></font>  <font color=Red>=</font> []
-<a name="(line118)"></a>
-<a name="(line119)"></a>tagWith p x<font color=Red>@</font><font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem n <font color=Green><u>_</u></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> p n  <font color=Red>=</font> <font color=Red>[</font>x<font color=Red>]</font>
-<a name="(line120)"></a>tagWith p <font color=Green><u>_</u></font>  <font color=Red>=</font> []
-<a name="(line121)"></a>
-<a name="(line122)"></a>attr n x<font color=Red>@</font><font color=Cyan>(</font>CElem <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=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>|</font> n <font color=Cyan>`elem`</font> <font color=Cyan>(</font>map fst <font color=Green><u>as</u></font><font color=Cyan>)</font>  <font color=Red>=</font> <font color=Red>[</font>x<font color=Red>]</font>
-<a name="(line123)"></a>attr n <font color=Green><u>_</u></font>  <font color=Red>=</font> []
-<a name="(line124)"></a>
-<a name="(line125)"></a>attrval av x<font color=Red>@</font><font color=Cyan>(</font>CElem <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=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>|</font> av <font color=Cyan>`elem`</font> <font color=Green><u>as</u></font>  <font color=Red>=</font> <font color=Red>[</font>x<font color=Red>]</font>
-<a name="(line126)"></a>attrval av <font color=Green><u>_</u></font>  <font color=Red>=</font> []
-<a name="(line127)"></a>
-<a name="(line128)"></a>
-<a name="(line129)"></a>
-<a name="(line130)"></a><font color=Blue>-- SEARCH FILTERS</font>
-<a name="(line131)"></a>
-<a name="(line132)"></a><a name="find"></a><font color=Blue>-- | For a mandatory attribute field, @find key cont@ looks up the value of</font>
-<a name="(line133)"></a><font color=Blue>--   the attribute name @key@, and applies the continuation @cont@ to</font>
-<a name="(line134)"></a><font color=Blue>--   the value.</font>
-<a name="(line135)"></a>find <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>CFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> CFilter i
-<a name="(line136)"></a>find key cont c<font color=Red>@</font><font color=Cyan>(</font>CElem <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=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> cont <font color=Cyan>(</font>show <font color=Cyan>(</font>lookfor key <font color=Green><u>as</u></font><font color=Cyan>)</font><font color=Cyan>)</font> c
-<a name="(line137)"></a>  <font color=Green><u>where</u></font> lookfor x <font color=Red>=</font> fromMaybe <font color=Cyan>(</font>error <font color=Cyan>(</font><font color=Magenta>"missing attribute: "</font><font color=Cyan>++</font>show x<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>.</font> lookup x
-<a name="(line138)"></a><font color=Blue>-- 'lookfor' has the more general type :: (Eq a,Show a) =&gt; a -&gt; [(a,b)] -&gt; b</font>
-<a name="(line139)"></a>
-<a name="(line140)"></a><a name="iffind"></a><font color=Blue>-- | When an attribute field may be absent, use @iffind key yes no@ to lookup</font>
-<a name="(line141)"></a><font color=Blue>--   its value.  If the attribute is absent, it acts as the @no@ filter,</font>
-<a name="(line142)"></a><font color=Blue>--   otherwise it applies the @yes@ filter.</font>
-<a name="(line143)"></a>iffind <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>CFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line144)"></a>iffind key yes no c<font color=Red>@</font><font color=Cyan>(</font>CElem <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=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line145)"></a>  <font color=Green><u>case</u></font> <font color=Cyan>(</font>lookup key <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Green><u>of</u></font>
-<a name="(line146)"></a>    Nothing  <font color=Red>-&gt;</font> no c
-<a name="(line147)"></a>    <font color=Cyan>(</font>Just 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>-&gt;</font> yes <font color=Cyan>(</font>show v<font color=Cyan>)</font> c
-<a name="(line148)"></a>iffind key yes no other <font color=Red>=</font> no other
-<a name="(line149)"></a>
-<a name="(line150)"></a><a name="ifTxt"></a><font color=Blue>-- | @ifTxt yes no@ processes any textual content with the @yes@ filter,</font>
-<a name="(line151)"></a><font color=Blue>--   but otherwise is the same as the @no@ filter.</font>
-<a name="(line152)"></a>ifTxt <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>CFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line153)"></a>ifTxt yes no c<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>=</font> yes s c
-<a name="(line154)"></a>ifTxt yes no c                 <font color=Red>=</font> no c
-<a name="(line155)"></a>
-<a name="(line156)"></a>
-<a name="(line157)"></a>
-<a name="(line158)"></a><font color=Blue>-- C-LIKE CONDITIONALS</font>
-<a name="(line159)"></a><font color=Blue>--</font>
-<a name="(line160)"></a><font color=Blue>-- $cond</font>
-<a name="(line161)"></a><font color=Blue>-- These definitions provide C-like conditionals, lifted to the filter level.</font>
-<a name="(line162)"></a><font color=Blue>--</font>
-<a name="(line163)"></a><font color=Blue>-- The @(cond ? yes : no)@ style in C becomes @(cond ?&gt; yes :&gt; no)@ in Haskell.</font>
-<a name="(line164)"></a>
-<a name="(line165)"></a><a name="ThenElse"></a><font color=Blue>-- | Conjoin the two branches of a conditional.</font>
-<a name="(line166)"></a><a name="ThenElse"></a><font color=Green><u>data</u></font> ThenElse a <font color=Red>=</font> a <font color=Red><b>:&gt;</b></font> a
-<a name="(line167)"></a>
-<a name="(line168)"></a><a name="?>"></a><font color=Blue>-- | Select between the two branches of a joined conditional.</font>
-<a name="(line169)"></a><font color=Cyan>(</font><font color=Cyan>?&gt;</font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> ThenElse <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line170)"></a><a name="p"></a>p <font color=Cyan>?&gt;</font> <font color=Cyan>(</font>f <font color=Red><b>:&gt;</b></font> g<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>\</font>c<font color=Red>-&gt;</font> <font color=Green><u>if</u></font> <font color=Cyan>(</font>not<font color=Cyan>.</font>null<font color=Cyan>.</font>p<font color=Cyan>)</font> c <font color=Green><u>then</u></font> f c <font color=Green><u>else</u></font> g c
-<a name="(line171)"></a>
-<a name="(line172)"></a>
-<a name="(line173)"></a>
-<a name="(line174)"></a><font color=Blue>-- FILTER COMBINATORS</font>
-<a name="(line175)"></a>
-<a name="(line176)"></a>
-<a name="(line177)"></a><a name="o"></a><font color=Blue>-- | Sequential (/Irish/,/backwards/) composition</font>
-<a name="(line178)"></a>o <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line179)"></a><a name="o"></a>f <font color=Cyan>`o`</font> g <font color=Red>=</font> concatMap f <font color=Cyan>.</font> g
-<a name="(line180)"></a>
-<a name="(line181)"></a><a name="union"></a><font color=Blue>-- | Binary parallel composition.  Each filter uses a copy of the input,</font>
-<a name="(line182)"></a><font color=Blue>-- rather than one filter using the result of the other.</font>
-<a name="(line183)"></a><font color=Blue>--   (Has a more general type than just CFilter.)</font>
-<a name="(line184)"></a>union <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line185)"></a>union <font color=Red>=</font> lift <font color=Cyan>(</font><font color=Cyan>++</font><font color=Cyan>)</font>		<font color=Blue>-- in Haskell 98:   union = lift List.union</font>
-<a name="(line186)"></a>  <font color=Green><u>where</u></font>
-<a name="(line187)"></a>    lift <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font>d<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>c<font color=Red>-&gt;</font>a<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>c<font color=Red>-&gt;</font>b<font color=Cyan>)</font> <font color=Red>-&gt;</font> c <font color=Red>-&gt;</font> d
-<a name="(line188)"></a>    lift f g h <font color=Red>=</font> <font color=Red>\</font>x<font color=Red>-&gt;</font> f <font color=Cyan>(</font>g x<font color=Cyan>)</font> <font color=Cyan>(</font>h x<font color=Cyan>)</font>
-<a name="(line189)"></a>
-<a name="(line190)"></a><a name="cat"></a><font color=Blue>-- | Glue a list of filters together.  (A list version of union;</font>
-<a name="(line191)"></a><font color=Blue>--   also has a more general type than just CFilter.)</font>
-<a name="(line192)"></a>cat <font color=Red>::</font> <font color=Red>[</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line193)"></a><font color=Blue>--   Specification: cat fs = \e-&gt; concat [ f e | f &lt;- fs ]</font>
-<a name="(line194)"></a><font color=Blue>--   more efficient implementation below:</font>
-<a name="(line195)"></a>cat [] <font color=Red>=</font> const []
-<a name="(line196)"></a>cat fs <font color=Red>=</font> foldr1 union fs
-<a name="(line197)"></a>
-<a name="(line198)"></a><a name="andThen"></a><font color=Blue>-- | A special form of filter composition where the second filter</font>
-<a name="(line199)"></a><font color=Blue>--   works over the same data as the first, but also uses the</font>
-<a name="(line200)"></a><font color=Blue>--   first's result.</font>
-<a name="(line201)"></a>andThen <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>c<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>c<font color=Red>-&gt;</font>a<font color=Red>-&gt;</font>b<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Cyan>)</font>
-<a name="(line202)"></a>andThen f g <font color=Red>=</font> <font color=Red>\</font>x<font color=Red>-&gt;</font> g <font color=Cyan>(</font>f x<font color=Cyan>)</font> x			<font color=Blue>-- lift g f id</font>
-<a name="(line203)"></a>
-<a name="(line204)"></a><a name="childrenBy"></a><font color=Blue>-- | Process children using specified filters.  /not exported/</font>
-<a name="(line205)"></a>childrenBy <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i 
-<a name="(line206)"></a>childrenBy f <font color=Red>=</font> f <font color=Cyan>`o`</font> children
-<a name="(line207)"></a>
-<a name="(line208)"></a><a name="|>|"></a><font color=Blue>-- | Directional choice:</font>
-<a name="(line209)"></a><font color=Blue>--   in @f |&gt;| g@ give g-productions only if no f-productions</font>
-<a name="(line210)"></a><font color=Cyan>(</font><font color=Cyan>|&gt;|</font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line211)"></a><a name="f"></a>f <font color=Cyan>|&gt;|</font> g <font color=Red>=</font> <font color=Red>\</font>x<font color=Red>-&gt;</font> <font color=Green><u>let</u></font> fx <font color=Red>=</font> f x <font color=Green><u>in</u></font> <font color=Green><u>if</u></font> null fx <font color=Green><u>then</u></font> g x <font color=Green><u>else</u></font> fx
-<a name="(line212)"></a><font color=Blue>--      f |&gt;| g  =  f ?&gt; f :&gt; g</font>
-<a name="(line213)"></a>
-<a name="(line214)"></a><a name="with"></a><font color=Blue>-- | Pruning: in @f `with` g@,</font>
-<a name="(line215)"></a><font color=Blue>--   keep only those f-productions which have at least one g-production</font>
-<a name="(line216)"></a>with <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line217)"></a><a name="with"></a>f <font color=Cyan>`with`</font> g <font color=Red>=</font> filter <font color=Cyan>(</font>not<font color=Cyan>.</font>null<font color=Cyan>.</font>g<font color=Cyan>)</font> <font color=Cyan>.</font> f
-<a name="(line218)"></a>
-<a name="(line219)"></a><a name="without"></a><font color=Blue>-- | Pruning: in @f `without` g@,</font>
-<a name="(line220)"></a><font color=Blue>--   keep only those f-productions which have no g-productions</font>
-<a name="(line221)"></a>without <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line222)"></a><a name="without"></a>f <font color=Cyan>`without`</font> g <font color=Red>=</font> filter <font color=Cyan>(</font>null<font color=Cyan>.</font>g<font color=Cyan>)</font> <font color=Cyan>.</font> f
-<a name="(line223)"></a>
-<a name="(line224)"></a><a name="/>"></a><font color=Blue>-- | Pronounced /slash/, @f \/&gt; g@ means g inside f</font>
-<a name="(line225)"></a><font color=Cyan>(</font><font color=Cyan>/&gt;</font><font color=Cyan>)</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line226)"></a>f <font color=Cyan>/&gt;</font> g <font color=Red>=</font> g <font color=Cyan>`o`</font> children <font color=Cyan>`o`</font> f
-<a name="(line227)"></a>
-<a name="(line228)"></a><a name="</"></a><font color=Blue>-- | Pronounced /outside/, @f \&lt;\/ g@ means f containing g</font>
-<a name="(line229)"></a><font color=Cyan>(</font><font color=Cyan>&lt;/</font><font color=Cyan>)</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line230)"></a>f <font color=Cyan>&lt;/</font> g <font color=Red>=</font> f <font color=Cyan>`with`</font> <font color=Cyan>(</font>g <font color=Cyan>`o`</font> children<font color=Cyan>)</font>
-<a name="(line231)"></a>
-<a name="(line232)"></a><a name="et"></a><font color=Blue>-- | Join an element-matching filter with a text-only filter</font>
-<a name="(line233)"></a>et <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>CFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line234)"></a>et f g <font color=Red>=</font> <font color=Cyan>(</font>f <font color=Cyan>`oo`</font> tagged elm<font color=Cyan>)</font>
-<a name="(line235)"></a>            <font color=Cyan>|&gt;|</font>
-<a name="(line236)"></a>         <font color=Cyan>(</font>g <font color=Cyan>`o`</font> txt<font color=Cyan>)</font>
-<a name="(line237)"></a>
-<a name="(line238)"></a><a name="path"></a><font color=Blue>-- | Express a list of filters like an XPath query, e.g.</font>
-<a name="(line239)"></a><font color=Blue>--   @path [children, tag \"name1\", attr \"attr1\", children, tag \"name2\"]@</font>
-<a name="(line240)"></a><font color=Blue>--   is like the XPath query @\/name1[\@attr1]\/name2@.</font>
-<a name="(line241)"></a>path <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i
-<a name="(line242)"></a>path fs <font color=Red>=</font> foldr <font color=Cyan>(</font>flip <font color=Cyan>(</font>o<font color=Cyan>)</font><font color=Cyan>)</font> keep fs
-<a name="(line243)"></a>
-<a name="(line244)"></a>
-<a name="(line245)"></a><a name="deep"></a><font color=Blue>-- RECURSIVE SEARCH</font>
-<a name="(line246)"></a><font color=Blue>-- $recursive</font>
-<a name="(line247)"></a><font color=Blue>-- Recursive search has three variants: @deep@ does a breadth-first</font>
-<a name="(line248)"></a><font color=Blue>-- search of the tree, @deepest@ does a depth-first search, @multi@ returns</font>
-<a name="(line249)"></a><font color=Blue>-- content at all tree-levels, even those strictly contained within results</font>
-<a name="(line250)"></a><font color=Blue>-- that have already been returned.</font>
-<a name="(line251)"></a>deep<font color=Cyan>,</font> deepest<font color=Cyan>,</font> multi <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line252)"></a>deep f     <font color=Red>=</font> f <font color=Cyan>|&gt;|</font> <font color=Cyan>(</font>deep f <font color=Cyan>`o`</font> children<font color=Cyan>)</font>
-<a name="(line253)"></a><a name="deepest"></a>deepest f  <font color=Red>=</font> <font color=Cyan>(</font>deepest f <font color=Cyan>`o`</font> children<font color=Cyan>)</font> <font color=Cyan>|&gt;|</font> f
-<a name="(line254)"></a><a name="multi"></a>multi f    <font color=Red>=</font> f <font color=Cyan>`union`</font> <font color=Cyan>(</font>multi f <font color=Cyan>`o`</font> children<font color=Cyan>)</font>
-<a name="(line255)"></a>
-<a name="(line256)"></a><a name="when"></a><font color=Blue>-- | Interior editing:</font>
-<a name="(line257)"></a><font color=Blue>--   @f `when` g@ applies @f@ only when the predicate @g@ succeeds,</font>
-<a name="(line258)"></a><font color=Blue>--   otherwise the content is unchanged.</font>
-<a name="(line259)"></a>when   <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line260)"></a><a name="guards"></a><font color=Blue>-- | Interior editing:</font>
-<a name="(line261)"></a><font color=Blue>--   @g `guards` f@ applies @f@ only when the predicate @g@ succeeds,</font>
-<a name="(line262)"></a><font color=Blue>--   otherwise the content is discarded.</font>
-<a name="(line263)"></a>guards <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line264)"></a><a name="when"></a>f <font color=Cyan>`when`</font> g       <font color=Red>=</font> g <font color=Cyan>?&gt;</font> f <font color=Red><b>:&gt;</b></font> keep
-<a name="(line265)"></a><a name="guards"></a>g <font color=Cyan>`guards`</font> f     <font color=Red>=</font> g <font color=Cyan>?&gt;</font> f <font color=Red><b>:&gt;</b></font> none	<font color=Blue>-- = f `o` (keep `with` g)</font>
-<a name="(line266)"></a>
-<a name="(line267)"></a><a name="chip"></a><font color=Blue>-- | Process CHildren In Place.  The filter is applied to any children</font>
-<a name="(line268)"></a><font color=Blue>--   of an element content, and the element rebuilt around the results.</font>
-<a name="(line269)"></a>chip <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line270)"></a>chip f <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> i<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font> CElem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> <font color=Cyan>(</font>concatMap f cs<font color=Cyan>)</font><font color=Cyan>)</font> i <font color=Red>]</font>
-<a name="(line271)"></a>chip f c <font color=Red>=</font> <font color=Red>[</font>c<font color=Red>]</font>
-<a name="(line272)"></a><font color=Blue>-- chip f = inplace (f `o` children)</font>
-<a name="(line273)"></a>
-<a name="(line274)"></a><a name="inplace"></a><font color=Blue>-- | Process an element In Place.  The filter is applied to the element</font>
-<a name="(line275)"></a><font color=Blue>--   itself, and then the original element rebuilt around the results.</font>
-<a name="(line276)"></a>inplace <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line277)"></a>inplace f c<font color=Red>@</font><font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem name <font color=Green><u>as</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> i<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font> CElem <font color=Cyan>(</font>Elem name <font color=Green><u>as</u></font> <font color=Cyan>(</font>f c<font color=Cyan>)</font><font color=Cyan>)</font> i <font color=Red>]</font>
-<a name="(line278)"></a>inplace f c <font color=Red>=</font> <font color=Red>[</font>c<font color=Red>]</font>
-<a name="(line279)"></a>
-<a name="(line280)"></a>
-<a name="(line281)"></a><a name="foldXml"></a><font color=Blue>-- | Recursive application of filters: a fold-like operator.  Defined</font>
-<a name="(line282)"></a><font color=Blue>--   as @f `o` chip (foldXml f)@.</font>
-<a name="(line283)"></a>foldXml <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line284)"></a>foldXml f <font color=Red>=</font> f <font color=Cyan>`o`</font> chip <font color=Cyan>(</font>foldXml f<font color=Cyan>)</font>
-<a name="(line285)"></a>
-<a name="(line286)"></a>
-<a name="(line287)"></a>
-<a name="(line288)"></a>
-<a name="(line289)"></a><font color=Blue>-- CONSTRUCTIVE CONTENT FILTERS</font>
-<a name="(line290)"></a>
-<a name="(line291)"></a><a name="mkElem"></a><font color=Blue>-- | Build an element with the given tag name - its content is the results</font>
-<a name="(line292)"></a><font color=Blue>--   of the given list of filters.</font>
-<a name="(line293)"></a>mkElem <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i
-<a name="(line294)"></a>mkElem h cfs <font color=Red>=</font> <font color=Red>\</font>t<font color=Red>-&gt;</font> <font color=Red>[</font> CElem <font color=Cyan>(</font>Elem h [] <font color=Cyan>(</font>cat cfs t<font color=Cyan>)</font><font color=Cyan>)</font> undefined <font color=Red>]</font>
-<a name="(line295)"></a>
-<a name="(line296)"></a><a name="mkElemAttr"></a><font color=Blue>-- | Build an element with the given name, attributes, and content.</font>
-<a name="(line297)"></a>mkElemAttr <font color=Red>::</font> String <font color=Red>-&gt;</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="(line298)"></a>mkElemAttr h <font color=Green><u>as</u></font> cfs <font color=Red>=</font> <font color=Red>\</font>t<font color=Red>-&gt;</font> <font color=Red>[</font> CElem <font color=Cyan>(</font>Elem h <font color=Cyan>(</font>map <font color=Cyan>(</font>attr t<font color=Cyan>)</font> <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>cat cfs t<font color=Cyan>)</font><font color=Cyan>)</font> undefined <font color=Red>]</font>
-<a name="(line299)"></a>  <font color=Green><u>where</u></font> attr t <font color=Cyan>(</font>n<font color=Cyan>,</font>vf<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line300)"></a>            <font color=Green><u>let</u></font> v <font color=Red>=</font> concat <font color=Red>[</font> s <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>&lt;-</font> <font color=Cyan>(</font>deep txt <font color=Cyan>`o`</font> vf<font color=Cyan>)</font> t <font color=Red>]</font>
-<a name="(line301)"></a>            <font color=Green><u>in</u></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="(line302)"></a>
-<a name="(line303)"></a><a name="literal"></a><font color=Blue>-- | Build some textual content.</font>
-<a name="(line304)"></a>literal <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i
-<a name="(line305)"></a>literal s <font color=Red>=</font> const <font color=Red>[</font>CString False s undefined<font color=Red>]</font>
-<a name="(line306)"></a>
-<a name="(line307)"></a><a name="cdata"></a><font color=Blue>-- | Build some CDATA content.</font>
-<a name="(line308)"></a>cdata <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i
-<a name="(line309)"></a>cdata s <font color=Red>=</font> const <font color=Red>[</font>CString True s undefined<font color=Red>]</font>
-<a name="(line310)"></a>
-<a name="(line311)"></a><a name="replaceTag"></a><font color=Blue>-- | Rename an element tag (leaving attributes in place).</font>
-<a name="(line312)"></a>replaceTag <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i
-<a name="(line313)"></a>replaceTag n <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> i<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> i<font color=Red>]</font>
-<a name="(line314)"></a>replaceTag n <font color=Green><u>_</u></font> <font color=Red>=</font> []
-<a name="(line315)"></a>
-<a name="(line316)"></a><a name="replaceAttrs"></a><font color=Blue>-- | Replace the attributes of an element (leaving tag the same).</font>
-<a name="(line317)"></a>replaceAttrs <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font>String<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i
-<a name="(line318)"></a>replaceAttrs <font color=Green><u>as</u></font> <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem n <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> i<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem n as' cs<font color=Cyan>)</font> i<font color=Red>]</font>
-<a name="(line319)"></a>    <font color=Green><u>where</u></font> as' <font color=Red>=</font> map <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font><font color=Red>-&gt;</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><font color=Cyan>)</font> <font color=Green><u>as</u></font>
-<a name="(line320)"></a>replaceAttrs <font color=Green><u>as</u></font> <font color=Green><u>_</u></font> <font color=Red>=</font> []
-<a name="(line321)"></a>
-<a name="(line322)"></a>
-<a name="(line323)"></a>
-<a name="(line324)"></a><font color=Blue>-- LABELLING</font>
-<a name="(line325)"></a>
-<a name="(line326)"></a><a name="LabelFilter"></a><font color=Blue>-- | A LabelFilter is like a CFilter except that it pairs up a polymorphic</font>
-<a name="(line327)"></a><a name="LabelFilter"></a><font color=Blue>--   value (label) with each of its results.</font>
-<a name="(line328)"></a><a name="LabelFilter"></a><font color=Green><u>type</u></font> LabelFilter i a <font color=Red>=</font> Content i <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>a<font color=Cyan>,</font>Content i<font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line329)"></a>
-<a name="(line330)"></a><a name="oo"></a><font color=Blue>-- | Compose a label-processing filter with a label-generating filter.</font>
-<a name="(line331)"></a>oo <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>CFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> LabelFilter i a <font color=Red>-&gt;</font> CFilter i
-<a name="(line332)"></a><a name="oo"></a>f <font color=Cyan>`oo`</font> g <font color=Red>=</font> concatMap <font color=Cyan>(</font>uncurry f<font color=Cyan>)</font> <font color=Cyan>.</font> g
-<a name="(line333)"></a>
-<a name="(line334)"></a><font color=Blue>{-
-<a name="(line335)"></a>-- | Process the information labels (very nearly monadic bind).
-<a name="(line336)"></a>oo :: (b -&gt; CFilter b c) -&gt; CFilter a b -&gt; CFilter a c
-<a name="(line337)"></a>f `oo` g = concatMap info . g
-<a name="(line338)"></a>    where info c@(CElem _ i)     = f i c
-<a name="(line339)"></a>          info c@(CString _ _ i) = f i c
-<a name="(line340)"></a>          info c@(CRef _ i)      = f i c
-<a name="(line341)"></a>          info c                 = [c]
-<a name="(line342)"></a>-}</font>
-<a name="(line343)"></a>
-<a name="(line344)"></a><a name="x"></a><font color=Blue>-- | Combine labels.  Think of this as a pair-wise zip on labels.</font>
-<a name="(line345)"></a><font color=Blue>--   e.g. @(numbered `x` tagged)@</font>
-<a name="(line346)"></a>x <font color=Red>::</font> <font color=Cyan>(</font>CFilter i<font color=Red>-&gt;</font>LabelFilter i a<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>CFilter i<font color=Red>-&gt;</font>LabelFilter i b<font color=Cyan>)</font> <font color=Red>-&gt;</font>
-<a name="(line347)"></a>       <font color=Cyan>(</font>CFilter i<font color=Red>-&gt;</font>LabelFilter i <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line348)"></a><a name="x"></a>f <font color=Cyan>`x`</font> g <font color=Red>=</font> <font color=Red>\</font>cf c<font color=Red>-&gt;</font> <font color=Green><u>let</u></font> gs <font color=Red>=</font> map fst <font color=Cyan>(</font>g cf c<font color=Cyan>)</font>
-<a name="(line349)"></a>                      fs <font color=Red>=</font> map fst <font color=Cyan>(</font>f cf c<font color=Cyan>)</font>
-<a name="(line350)"></a>                  <font color=Green><u>in</u></font> zip <font color=Cyan>(</font>zip fs gs<font color=Cyan>)</font> <font color=Cyan>(</font>cf c<font color=Cyan>)</font>
-<a name="(line351)"></a>
-<a name="(line352)"></a>
-<a name="(line353)"></a><font color=Blue>-- Some basic label-generating filters.</font>
-<a name="(line354)"></a>
-<a name="(line355)"></a><a name="numbered"></a><font color=Blue>-- | Number the results from 1 upwards.</font>
-<a name="(line356)"></a>numbered <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> LabelFilter i Int
-<a name="(line357)"></a>numbered f <font color=Red>=</font> zip <font color=Red>[</font><font color=Magenta>1</font><font color=Red>..</font><font color=Red>]</font> <font color=Cyan>.</font> f
-<a name="(line358)"></a>
-<a name="(line359)"></a><a name="interspersed"></a><font color=Blue>-- | In @interspersed a f b@, label each result of @f@ with the string @a@,</font>
-<a name="(line360)"></a><font color=Blue>--   except for the last one which is labelled with the string @b@.</font>
-<a name="(line361)"></a>interspersed <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> LabelFilter i String
-<a name="(line362)"></a>interspersed a f b <font color=Red>=</font>
-<a name="(line363)"></a>  <font color=Cyan>(</font><font color=Red>\</font>xs<font color=Red>-&gt;</font> zip <font color=Cyan>(</font>replicate <font color=Cyan>(</font>len xs<font color=Cyan>)</font> a <font color=Cyan>++</font> <font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font> xs<font color=Cyan>)</font> <font color=Cyan>.</font> f
-<a name="(line364)"></a>  <font color=Green><u>where</u></font>
-<a name="(line365)"></a>  len [] <font color=Red>=</font> <font color=Magenta>0</font>
-<a name="(line366)"></a>  len xs <font color=Red>=</font> length xs <font color=Blue>-</font> <font color=Magenta>1</font>
-<a name="(line367)"></a>
-<a name="(line368)"></a><a name="tagged"></a><font color=Blue>-- | Label each element in the result with its tag name.  Non-element</font>
-<a name="(line369)"></a><font color=Blue>--   results get an empty string label.</font>
-<a name="(line370)"></a>tagged <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> LabelFilter i String
-<a name="(line371)"></a>tagged f <font color=Red>=</font> extracted name f
-<a name="(line372)"></a>  <font color=Green><u>where</u></font> name <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem n <font color=Green><u>_</u></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> n
-<a name="(line373)"></a>        name <font color=Green><u>_</u></font>                      <font color=Red>=</font> <font color=Magenta>""</font>
-<a name="(line374)"></a>
-<a name="(line375)"></a><a name="attributed"></a><font color=Blue>-- | Label each element in the result with the value of the named attribute.</font>
-<a name="(line376)"></a><font color=Blue>--   Elements without the attribute, and non-element results, get an</font>
-<a name="(line377)"></a><font color=Blue>--   empty string label.</font>
-<a name="(line378)"></a>attributed <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> LabelFilter i String
-<a name="(line379)"></a>attributed key f <font color=Red>=</font> extracted att f
-<a name="(line380)"></a>  <font color=Green><u>where</u></font> att <font color=Cyan>(</font>CElem <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=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line381)"></a>            <font color=Green><u>case</u></font> <font color=Cyan>(</font>lookup key <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Green><u>of</u></font>
-<a name="(line382)"></a>              Nothing  <font color=Red>-&gt;</font> <font color=Magenta>""</font>
-<a name="(line383)"></a>              <font color=Cyan>(</font>Just 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>-&gt;</font> show v
-<a name="(line384)"></a>        att <font color=Green><u>_</u></font> <font color=Red>=</font> <font color=Magenta>""</font>
-<a name="(line385)"></a>
-<a name="(line386)"></a><a name="textlabelled"></a><font color=Blue>-- | Label each textual part of the result with its text.  Element</font>
-<a name="(line387)"></a><font color=Blue>--   results get an empty string label.</font>
-<a name="(line388)"></a>textlabelled <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> LabelFilter i <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>
-<a name="(line389)"></a>textlabelled f <font color=Red>=</font> extracted text f
-<a name="(line390)"></a>  <font color=Green><u>where</u></font> text <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>=</font> Just s
-<a name="(line391)"></a>        text <font color=Green><u>_</u></font>               <font color=Red>=</font> Nothing
-<a name="(line392)"></a>
-<a name="(line393)"></a><a name="extracted"></a><font color=Blue>-- | Label each content with some information extracted from itself.</font>
-<a name="(line394)"></a>extracted <font color=Red>::</font> <font color=Cyan>(</font>Content i<font color=Red>-&gt;</font>a<font color=Cyan>)</font> <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> LabelFilter i a
-<a name="(line395)"></a>extracted proj f <font color=Red>=</font> concatMap <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font><font color=Red>[</font><font color=Cyan>(</font>proj c<font color=Cyan>,</font> c<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Cyan>.</font> f
-<a name="(line396)"></a>                                                                                
-<a name="(line397)"></a>
-<a name="(line398)"></a>
-<a name="(line399)"></a><font color=Blue>{-
-<a name="(line400)"></a>-- MISC
-<a name="(line401)"></a>
-<a name="(line402)"></a>-- | I haven't yet remembered \/ worked out what this does.
-<a name="(line403)"></a>combine :: (Read a,Show a) =&gt; ([a]-&gt;a) -&gt; LabelFilter String -&gt; CFilter
-<a name="(line404)"></a>combine f lf = \c-&gt; [ CString False (show (f [ read l | (l,_) &lt;- lf c ])) ]
-<a name="(line405)"></a>-}</font>
-<a name="(line406)"></a>
-<a name="(line407)"></a>
-<a name="(line408)"></a><font color=Blue>{- OLD STUFF - OBSOLETE
-<a name="(line409)"></a>-- Keep an element by its numbered position (starting at 1).
-<a name="(line410)"></a>position :: Int -&gt; [Content] -&gt; [Content]
-<a name="(line411)"></a>position n | n&gt;0  = (:[]) . (!!(n-1))
-<a name="(line412)"></a>           | otherwise = const []
-<a name="(line413)"></a>
-<a name="(line414)"></a>-- Chop and remove the root portions of trees to depth n.
-<a name="(line415)"></a>layer :: Int -&gt; [Content] -&gt; [Content]
-<a name="(line416)"></a>layer n = apply n (concatMap lay)
-<a name="(line417)"></a>  where lay (CElem (Elem _ _ cs)) = cs
-<a name="(line418)"></a>        lay _ = []
-<a name="(line419)"></a>        apply 0 f xs = xs
-<a name="(line420)"></a>        apply n f xs = apply (n-1) f (f xs)
-<a name="(line421)"></a>
-<a name="(line422)"></a>combine :: (Read a, Show a) =&gt; ([a]-&gt;a) -&gt; [Content] -&gt; [Content]
-<a name="(line423)"></a>combine f = \cs-&gt; [ CString False (show (f [ read s | CString _ s &lt;- cs ])) ]
-<a name="(line424)"></a>-}</font>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Combinators.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>--------------------------------------------</font>
+<a name="line-2"></a><font color=Blue>-- | This module defines the notion of filters and filter combinators</font>
+<a name="line-3"></a><font color=Blue>--   for processing XML documents.</font>
+<a name="line-4"></a><font color=Blue>--</font>
+<a name="line-5"></a><font color=Blue>--   These XML transformation combinators are described in the paper</font>
+<a name="line-6"></a><font color=Blue>--   ``Haskell and XML: Generic Combinators or Type-Based Translation?''</font>
+<a name="line-7"></a><font color=Blue>--   Malcolm Wallace and Colin Runciman, Proceedings ICFP'99.</font>
+<a name="line-8"></a><font color=Blue>--------------------------------------------</font>
+<a name="line-9"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators
+<a name="line-10"></a>  <font color=Cyan>(</font><font color=Blue>-- * The content filter type.</font>
+<a name="line-11"></a>    CFilter
+<a name="line-12"></a>
+<a name="line-13"></a>   <font color=Blue>-- * Simple filters.</font>
+<a name="line-14"></a>   <font color=Blue>-- ** Selection filters.</font>
+<a name="line-15"></a>   <font color=Blue>-- $selection</font>
+<a name="line-16"></a>  <font color=Cyan>,</font> keep<font color=Cyan>,</font> none<font color=Cyan>,</font> children<font color=Cyan>,</font> position
+<a name="line-17"></a>
+<a name="line-18"></a>   <font color=Blue>-- ** Predicate filters.</font>
+<a name="line-19"></a>   <font color=Blue>-- $pred</font>
+<a name="line-20"></a>  <font color=Cyan>,</font> elm<font color=Cyan>,</font> txt<font color=Cyan>,</font> tag<font color=Cyan>,</font> attr<font color=Cyan>,</font> attrval<font color=Cyan>,</font> tagWith
+<a name="line-21"></a>
+<a name="line-22"></a>   <font color=Blue>-- ** Search filters.</font>
+<a name="line-23"></a>  <font color=Cyan>,</font> find<font color=Cyan>,</font> iffind<font color=Cyan>,</font> ifTxt
+<a name="line-24"></a>
+<a name="line-25"></a>   <font color=Blue>-- * Filter combinators</font>
+<a name="line-26"></a>   <font color=Blue>-- ** Basic combinators.</font>
+<a name="line-27"></a>  <font color=Cyan>,</font> o<font color=Cyan>,</font> union<font color=Cyan>,</font> cat<font color=Cyan>,</font> andThen
+<a name="line-28"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>|&gt;|</font><font color=Cyan>)</font><font color=Cyan>,</font> with<font color=Cyan>,</font> without
+<a name="line-29"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>/&gt;</font><font color=Cyan>)</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>&lt;/</font><font color=Cyan>)</font><font color=Cyan>,</font> et
+<a name="line-30"></a>  <font color=Cyan>,</font> path
+<a name="line-31"></a>   <font color=Blue>-- ** Recursive search.</font>
+<a name="line-32"></a>   <font color=Blue>-- $recursive</font>
+<a name="line-33"></a>  <font color=Cyan>,</font> deep<font color=Cyan>,</font> deepest<font color=Cyan>,</font> multi
+<a name="line-34"></a>   <font color=Blue>-- ** Interior editing.</font>
+<a name="line-35"></a>  <font color=Cyan>,</font> when<font color=Cyan>,</font> guards<font color=Cyan>,</font> chip<font color=Cyan>,</font> inplace<font color=Cyan>,</font> foldXml
+<a name="line-36"></a>   <font color=Blue>-- ** Constructive filters.</font>
+<a name="line-37"></a>  <font color=Cyan>,</font> mkElem<font color=Cyan>,</font> mkElemAttr<font color=Cyan>,</font> literal<font color=Cyan>,</font> cdata<font color=Cyan>,</font> replaceTag<font color=Cyan>,</font> replaceAttrs
+<a name="line-38"></a>
+<a name="line-39"></a>   <font color=Blue>-- * C-like conditionals.</font>
+<a name="line-40"></a>   <font color=Blue>-- $cond</font>
+<a name="line-41"></a>  <font color=Cyan>,</font> ThenElse<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>?&gt;</font><font color=Cyan>)</font>
+<a name="line-42"></a>
+<a name="line-43"></a>   <font color=Blue>-- * Filters with labelled results.</font>
+<a name="line-44"></a>  <font color=Cyan>,</font> LabelFilter
+<a name="line-45"></a>   <font color=Blue>-- ** Using and combining labelled filters.</font>
+<a name="line-46"></a>  <font color=Cyan>,</font> oo<font color=Cyan>,</font> x
+<a name="line-47"></a>   <font color=Blue>-- ** Some label-generating filters.</font>
+<a name="line-48"></a>  <font color=Cyan>,</font> numbered<font color=Cyan>,</font> interspersed<font color=Cyan>,</font> tagged<font color=Cyan>,</font> attributed<font color=Cyan>,</font> textlabelled<font color=Cyan>,</font> extracted
+<a name="line-49"></a>
+<a name="line-50"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-51"></a>
+<a name="line-52"></a>
+<a name="line-53"></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="line-54"></a><font color=Green><u>import</u></font> Maybe <font color=Cyan>(</font>fromMaybe<font color=Cyan>)</font>
+<a name="line-55"></a>
+<a name="line-56"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan>`with`</font><font color=Cyan>,</font> <font color=Cyan>`without`</font>
+<a name="line-57"></a><font color=Green><u>infixr</u></font> <font color=Magenta>5</font> <font color=Cyan>`o`</font><font color=Cyan>,</font> <font color=Cyan>`oo`</font><font color=Cyan>,</font> <font color=Cyan>`union`</font><font color=Cyan>,</font> <font color=Cyan>`andThen`</font>		<font color=Blue>-- , `orelse`</font>
+<a name="line-58"></a><font color=Green><u>infixl</u></font> <font color=Magenta>5</font> <font color=Cyan>/&gt;</font><font color=Cyan>,</font> <font color=Cyan>&lt;/</font><font color=Cyan>,</font> <font color=Cyan>|&gt;|</font>
+<a name="line-59"></a><font color=Green><u>infixr</u></font> <font color=Magenta>4</font> <font color=Cyan>`when`</font><font color=Cyan>,</font> <font color=Cyan>`guards`</font>
+<a name="line-60"></a><font color=Green><u>infixr</u></font> <font color=Magenta>3</font> <font color=Cyan>?&gt;</font><font color=Cyan>,</font> <font color=Red><b>:&gt;</b></font>
+<a name="line-61"></a>
+<a name="line-62"></a>
+<a name="line-63"></a>
+<a name="line-64"></a><font color=Blue>-- THE CONTENT FILTER TYPE</font>
+<a name="line-65"></a>
+<a name="line-66"></a><a name="CFilter"></a><font color=Blue>-- | All document transformations are /content filters/.</font>
+<a name="line-67"></a><a name="CFilter"></a><font color=Blue>--   A filter takes a single XML 'Content' value and returns a sequence</font>
+<a name="line-68"></a><a name="CFilter"></a><font color=Blue>--   of 'Content' values, possibly empty.</font>
+<a name="line-69"></a><a name="CFilter"></a><font color=Green><u>type</u></font> CFilter i  <font color=Red>=</font> Content i <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font>
+<a name="line-70"></a>
+<a name="line-71"></a>
+<a name="line-72"></a>
+<a name="line-73"></a><a name="keep"></a><font color=Blue>-- BASIC SELECTION FILTERS</font>
+<a name="line-74"></a><font color=Blue>-- $selection</font>
+<a name="line-75"></a><font color=Blue>-- In the algebra of combinators, @none@ is the zero, and @keep@ the identity.</font>
+<a name="line-76"></a><font color=Blue>-- (They have a more general type than just CFilter.)</font>
+<a name="line-77"></a><font color=Blue>keep</font> <font color=Red>::</font> a<font color=Red>-&gt;</font><font color=Red>[</font>a<font color=Red>]</font>
+<a name="line-78"></a><font color=Blue>keep</font> <font color=Red>=</font> <font color=Red>\</font>x<font color=Red>-&gt;</font><font color=Red>[</font>x<font color=Red>]</font>
+<a name="line-79"></a><a name="none"></a><font color=Blue>none</font> <font color=Red>::</font> a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font>
+<a name="line-80"></a><font color=Blue>none</font> <font color=Red>=</font> <font color=Red>\</font>x<font color=Red>-&gt;</font>[]
+<a name="line-81"></a>
+<a name="line-82"></a><a name="children"></a><font color=Blue>-- | Throw away current node, keep just the (unprocessed) children.</font>
+<a name="line-83"></a><font color=Blue>children</font> <font color=Red>::</font> CFilter i
+<a name="line-84"></a><font color=Blue>children</font> <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> cs
+<a name="line-85"></a><font color=Blue>children</font> <font color=Green><u>_</u></font> <font color=Red>=</font> []
+<a name="line-86"></a>
+<a name="line-87"></a><a name="position"></a><font color=Blue>-- | Select the @n@'th positional result of a filter.</font>
+<a name="line-88"></a><font color=Blue>position</font> <font color=Red>::</font> Int <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-89"></a><font color=Blue>position</font> n f <font color=Red>=</font> <font color=Cyan>(</font><font color=Red>\</font>cs<font color=Red>-&gt;</font> <font color=Red>[</font>cs<font color=Cyan>!!</font>n<font color=Red>]</font><font color=Cyan>)</font> <font color=Cyan>.</font> f
+<a name="line-90"></a>
+<a name="line-91"></a>
+<a name="line-92"></a>
+<a name="line-93"></a><font color=Blue>-- BASIC PREDICATE FILTERS</font>
+<a name="line-94"></a><font color=Blue>-- $pred</font>
+<a name="line-95"></a><font color=Blue>-- These filters either keep or throw away some content based on</font>
+<a name="line-96"></a><font color=Blue>-- a simple test.  For instance, @elm@ keeps only a tagged element,</font>
+<a name="line-97"></a><font color=Blue>-- @txt@ keeps only non-element text, @tag@ keeps only an element</font>
+<a name="line-98"></a><font color=Blue>-- with the named tag, @attr@ keeps only an element with the named</font>
+<a name="line-99"></a><font color=Blue>-- attribute, @attrval@ keeps only an element with the given</font>
+<a name="line-100"></a><font color=Blue>-- attribute value, @tagWith@ keeps only an element whose tag name</font>
+<a name="line-101"></a><font color=Blue>-- satisfies the given predicate.</font>
+<a name="line-102"></a>
+<a name="line-103"></a><a name="elm"></a><font color=Blue>elm</font><font color=Cyan>,</font> txt   <font color=Red>::</font> CFilter i
+<a name="line-104"></a><a name="tag"></a><font color=Blue>tag</font>        <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i
+<a name="line-105"></a><a name="attr"></a><font color=Blue>attr</font>       <font color=Red>::</font> Name <font color=Red>-&gt;</font> CFilter i
+<a name="line-106"></a><a name="attrval"></a><font color=Blue>attrval</font>    <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> CFilter i
+<a name="line-107"></a><a name="tagWith"></a><font color=Blue>tagWith</font>    <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> CFilter i
+<a name="line-108"></a>
+<a name="line-109"></a><font color=Blue>elm</font> x<font color=Red>@</font><font color=Cyan>(</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>x<font color=Red>]</font>
+<a name="line-110"></a><font color=Blue>elm</font> <font color=Green><u>_</u></font>             <font color=Red>=</font> []
+<a name="line-111"></a>
+<a name="line-112"></a><a name="txt"></a><font color=Blue>txt</font> x<font color=Red>@</font><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> <font color=Red>[</font>x<font color=Red>]</font>
+<a name="line-113"></a><font color=Blue>txt</font> x<font color=Red>@</font><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> <font color=Red>[</font>x<font color=Red>]</font>
+<a name="line-114"></a><font color=Blue>txt</font> <font color=Green><u>_</u></font>                 <font color=Red>=</font> []
+<a name="line-115"></a>
+<a name="line-116"></a><font color=Blue>tag</font> t x<font color=Red>@</font><font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem n <font color=Green><u>_</u></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> t<font color=Cyan>==</font>n  <font color=Red>=</font> <font color=Red>[</font>x<font color=Red>]</font>
+<a name="line-117"></a><font color=Blue>tag</font> t <font color=Green><u>_</u></font>  <font color=Red>=</font> []
+<a name="line-118"></a>
+<a name="line-119"></a><font color=Blue>tagWith</font> p x<font color=Red>@</font><font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem n <font color=Green><u>_</u></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> p n  <font color=Red>=</font> <font color=Red>[</font>x<font color=Red>]</font>
+<a name="line-120"></a><font color=Blue>tagWith</font> p <font color=Green><u>_</u></font>  <font color=Red>=</font> []
+<a name="line-121"></a>
+<a name="line-122"></a><font color=Blue>attr</font> n x<font color=Red>@</font><font color=Cyan>(</font>CElem <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=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>|</font> n <font color=Cyan>`elem`</font> <font color=Cyan>(</font>map fst <font color=Green><u>as</u></font><font color=Cyan>)</font>  <font color=Red>=</font> <font color=Red>[</font>x<font color=Red>]</font>
+<a name="line-123"></a><font color=Blue>attr</font> n <font color=Green><u>_</u></font>  <font color=Red>=</font> []
+<a name="line-124"></a>
+<a name="line-125"></a><font color=Blue>attrval</font> av x<font color=Red>@</font><font color=Cyan>(</font>CElem <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=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>|</font> av <font color=Cyan>`elem`</font> <font color=Green><u>as</u></font>  <font color=Red>=</font> <font color=Red>[</font>x<font color=Red>]</font>
+<a name="line-126"></a><font color=Blue>attrval</font> av <font color=Green><u>_</u></font>  <font color=Red>=</font> []
+<a name="line-127"></a>
+<a name="line-128"></a>
+<a name="line-129"></a>
+<a name="line-130"></a><font color=Blue>-- SEARCH FILTERS</font>
+<a name="line-131"></a>
+<a name="line-132"></a><a name="find"></a><font color=Blue>-- | For a mandatory attribute field, @find key cont@ looks up the value of</font>
+<a name="line-133"></a><font color=Blue>--   the attribute name @key@, and applies the continuation @cont@ to</font>
+<a name="line-134"></a><font color=Blue>--   the value.</font>
+<a name="line-135"></a><font color=Blue>find</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>CFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> CFilter i
+<a name="line-136"></a><font color=Blue>find</font> key cont c<font color=Red>@</font><font color=Cyan>(</font>CElem <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=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> cont <font color=Cyan>(</font>show <font color=Cyan>(</font>lookfor key <font color=Green><u>as</u></font><font color=Cyan>)</font><font color=Cyan>)</font> c
+<a name="line-137"></a>  <font color=Green><u>where</u></font> lookfor x <font color=Red>=</font> fromMaybe <font color=Cyan>(</font>error <font color=Cyan>(</font><font color=Magenta>"missing attribute: "</font><font color=Cyan>++</font>show x<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>.</font> lookup x
+<a name="line-138"></a><font color=Blue>-- 'lookfor' has the more general type :: (Eq a,Show a) =&gt; a -&gt; [(a,b)] -&gt; b</font>
+<a name="line-139"></a>
+<a name="line-140"></a><a name="iffind"></a><font color=Blue>-- | When an attribute field may be absent, use @iffind key yes no@ to lookup</font>
+<a name="line-141"></a><font color=Blue>--   its value.  If the attribute is absent, it acts as the @no@ filter,</font>
+<a name="line-142"></a><font color=Blue>--   otherwise it applies the @yes@ filter.</font>
+<a name="line-143"></a><font color=Blue>iffind</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>CFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-144"></a><font color=Blue>iffind</font> key yes no c<font color=Red>@</font><font color=Cyan>(</font>CElem <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=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-145"></a>  <font color=Green><u>case</u></font> <font color=Cyan>(</font>lookup key <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Green><u>of</u></font>
+<a name="line-146"></a>    Nothing  <font color=Red>-&gt;</font> no c
+<a name="line-147"></a>    <font color=Cyan>(</font>Just 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>-&gt;</font> yes <font color=Cyan>(</font>show v<font color=Cyan>)</font> c
+<a name="line-148"></a><font color=Blue>iffind</font> key yes no other <font color=Red>=</font> no other
+<a name="line-149"></a>
+<a name="line-150"></a><a name="ifTxt"></a><font color=Blue>-- | @ifTxt yes no@ processes any textual content with the @yes@ filter,</font>
+<a name="line-151"></a><font color=Blue>--   but otherwise is the same as the @no@ filter.</font>
+<a name="line-152"></a><font color=Blue>ifTxt</font> <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>CFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-153"></a><font color=Blue>ifTxt</font> yes no c<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>=</font> yes s c
+<a name="line-154"></a><font color=Blue>ifTxt</font> yes no c                 <font color=Red>=</font> no c
+<a name="line-155"></a>
+<a name="line-156"></a>
+<a name="line-157"></a>
+<a name="line-158"></a><font color=Blue>-- C-LIKE CONDITIONALS</font>
+<a name="line-159"></a><font color=Blue>--</font>
+<a name="line-160"></a><font color=Blue>-- $cond</font>
+<a name="line-161"></a><font color=Blue>-- These definitions provide C-like conditionals, lifted to the filter level.</font>
+<a name="line-162"></a><font color=Blue>--</font>
+<a name="line-163"></a><font color=Blue>-- The @(cond ? yes : no)@ style in C becomes @(cond ?&gt; yes :&gt; no)@ in Haskell.</font>
+<a name="line-164"></a>
+<a name="line-165"></a><a name="ThenElse"></a><font color=Blue>-- | Conjoin the two branches of a conditional.</font>
+<a name="line-166"></a><a name="ThenElse"></a><font color=Green><u>data</u></font> ThenElse a <font color=Red>=</font> a <font color=Red><b>:&gt;</b></font> a
+<a name="line-167"></a>
+<a name="line-168"></a><a name="?>"></a><font color=Blue>-- | Select between the two branches of a joined conditional.</font>
+<a name="line-169"></a><font color=Cyan>(</font><font color=Cyan>?&gt;</font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> ThenElse <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-170"></a><a name="p"></a><font color=Blue>p</font> <font color=Cyan>?&gt;</font> <font color=Cyan>(</font>f <font color=Red><b>:&gt;</b></font> g<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>\</font>c<font color=Red>-&gt;</font> <font color=Green><u>if</u></font> <font color=Cyan>(</font>not<font color=Cyan>.</font>null<font color=Cyan>.</font>p<font color=Cyan>)</font> c <font color=Green><u>then</u></font> f c <font color=Green><u>else</u></font> g c
+<a name="line-171"></a>
+<a name="line-172"></a>
+<a name="line-173"></a>
+<a name="line-174"></a><font color=Blue>-- FILTER COMBINATORS</font>
+<a name="line-175"></a>
+<a name="line-176"></a>
+<a name="line-177"></a><a name="o"></a><font color=Blue>-- | Sequential (/Irish/,/backwards/) composition</font>
+<a name="line-178"></a><font color=Blue>o</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-179"></a><a name="o"></a><font color=Blue>f</font> <font color=Cyan>`o`</font> g <font color=Red>=</font> concatMap f <font color=Cyan>.</font> g
+<a name="line-180"></a>
+<a name="line-181"></a><a name="union"></a><font color=Blue>-- | Binary parallel composition.  Each filter uses a copy of the input,</font>
+<a name="line-182"></a><font color=Blue>-- rather than one filter using the result of the other.</font>
+<a name="line-183"></a><font color=Blue>--   (Has a more general type than just CFilter.)</font>
+<a name="line-184"></a><font color=Blue>union</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-185"></a><font color=Blue>union</font> <font color=Red>=</font> lift <font color=Cyan>(</font><font color=Cyan>++</font><font color=Cyan>)</font>		<font color=Blue>-- in Haskell 98:   union = lift List.union</font>
+<a name="line-186"></a>  <font color=Green><u>where</u></font>
+<a name="line-187"></a>    lift <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font>d<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>c<font color=Red>-&gt;</font>a<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>c<font color=Red>-&gt;</font>b<font color=Cyan>)</font> <font color=Red>-&gt;</font> c <font color=Red>-&gt;</font> d
+<a name="line-188"></a>    lift f g h <font color=Red>=</font> <font color=Red>\</font>x<font color=Red>-&gt;</font> f <font color=Cyan>(</font>g x<font color=Cyan>)</font> <font color=Cyan>(</font>h x<font color=Cyan>)</font>
+<a name="line-189"></a>
+<a name="line-190"></a><a name="cat"></a><font color=Blue>-- | Glue a list of filters together.  (A list version of union;</font>
+<a name="line-191"></a><font color=Blue>--   also has a more general type than just CFilter.)</font>
+<a name="line-192"></a><font color=Blue>cat</font> <font color=Red>::</font> <font color=Red>[</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-193"></a><font color=Blue>--   Specification: cat fs = \e-&gt; concat [ f e | f &lt;- fs ]</font>
+<a name="line-194"></a><font color=Blue>--   more efficient implementation below:</font>
+<a name="line-195"></a><font color=Blue>cat</font> [] <font color=Red>=</font> const []
+<a name="line-196"></a><font color=Blue>cat</font> fs <font color=Red>=</font> foldr1 union fs
+<a name="line-197"></a>
+<a name="line-198"></a><a name="andThen"></a><font color=Blue>-- | A special form of filter composition where the second filter</font>
+<a name="line-199"></a><font color=Blue>--   works over the same data as the first, but also uses the</font>
+<a name="line-200"></a><font color=Blue>--   first's result.</font>
+<a name="line-201"></a><font color=Blue>andThen</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>c<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>c<font color=Red>-&gt;</font>a<font color=Red>-&gt;</font>b<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Cyan>)</font>
+<a name="line-202"></a><font color=Blue>andThen</font> f g <font color=Red>=</font> <font color=Red>\</font>x<font color=Red>-&gt;</font> g <font color=Cyan>(</font>f x<font color=Cyan>)</font> x			<font color=Blue>-- lift g f id</font>
+<a name="line-203"></a>
+<a name="line-204"></a><a name="childrenBy"></a><font color=Blue>-- | Process children using specified filters.  /not exported/</font>
+<a name="line-205"></a><font color=Blue>childrenBy</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i 
+<a name="line-206"></a><font color=Blue>childrenBy</font> f <font color=Red>=</font> f <font color=Cyan>`o`</font> children
+<a name="line-207"></a>
+<a name="line-208"></a><a name="|>|"></a><font color=Blue>-- | Directional choice:</font>
+<a name="line-209"></a><font color=Blue>--   in @f |&gt;| g@ give g-productions only if no f-productions</font>
+<a name="line-210"></a><font color=Cyan>(</font><font color=Cyan>|&gt;|</font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-211"></a><a name="f"></a><font color=Blue>f</font> <font color=Cyan>|&gt;|</font> g <font color=Red>=</font> <font color=Red>\</font>x<font color=Red>-&gt;</font> <font color=Green><u>let</u></font> fx <font color=Red>=</font> f x <font color=Green><u>in</u></font> <font color=Green><u>if</u></font> null fx <font color=Green><u>then</u></font> g x <font color=Green><u>else</u></font> fx
+<a name="line-212"></a><font color=Blue>--      f |&gt;| g  =  f ?&gt; f :&gt; g</font>
+<a name="line-213"></a>
+<a name="line-214"></a><a name="with"></a><font color=Blue>-- | Pruning: in @f `with` g@,</font>
+<a name="line-215"></a><font color=Blue>--   keep only those f-productions which have at least one g-production</font>
+<a name="line-216"></a><font color=Blue>with</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-217"></a><a name="with"></a><font color=Blue>f</font> <font color=Cyan>`with`</font> g <font color=Red>=</font> filter <font color=Cyan>(</font>not<font color=Cyan>.</font>null<font color=Cyan>.</font>g<font color=Cyan>)</font> <font color=Cyan>.</font> f
+<a name="line-218"></a>
+<a name="line-219"></a><a name="without"></a><font color=Blue>-- | Pruning: in @f `without` g@,</font>
+<a name="line-220"></a><font color=Blue>--   keep only those f-productions which have no g-productions</font>
+<a name="line-221"></a><font color=Blue>without</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-222"></a><a name="without"></a><font color=Blue>f</font> <font color=Cyan>`without`</font> g <font color=Red>=</font> filter <font color=Cyan>(</font>null<font color=Cyan>.</font>g<font color=Cyan>)</font> <font color=Cyan>.</font> f
+<a name="line-223"></a>
+<a name="line-224"></a><a name="/>"></a><font color=Blue>-- | Pronounced /slash/, @f \/&gt; g@ means g inside f</font>
+<a name="line-225"></a><font color=Cyan>(</font><font color=Cyan>/&gt;</font><font color=Cyan>)</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-226"></a><font color=Blue>f</font> <font color=Cyan>/&gt;</font> g <font color=Red>=</font> g <font color=Cyan>`o`</font> children <font color=Cyan>`o`</font> f
+<a name="line-227"></a>
+<a name="line-228"></a><a name="</"></a><font color=Blue>-- | Pronounced /outside/, @f \&lt;\/ g@ means f containing g</font>
+<a name="line-229"></a><font color=Cyan>(</font><font color=Cyan>&lt;/</font><font color=Cyan>)</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-230"></a><font color=Blue>f</font> <font color=Cyan>&lt;/</font> g <font color=Red>=</font> f <font color=Cyan>`with`</font> <font color=Cyan>(</font>g <font color=Cyan>`o`</font> children<font color=Cyan>)</font>
+<a name="line-231"></a>
+<a name="line-232"></a><a name="et"></a><font color=Blue>-- | Join an element-matching filter with a text-only filter</font>
+<a name="line-233"></a><font color=Blue>et</font> <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>CFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-234"></a><font color=Blue>et</font> f g <font color=Red>=</font> <font color=Cyan>(</font>f <font color=Cyan>`oo`</font> tagged elm<font color=Cyan>)</font>
+<a name="line-235"></a>            <font color=Cyan>|&gt;|</font>
+<a name="line-236"></a>         <font color=Cyan>(</font>g <font color=Cyan>`o`</font> txt<font color=Cyan>)</font>
+<a name="line-237"></a>
+<a name="line-238"></a><a name="path"></a><font color=Blue>-- | Express a list of filters like an XPath query, e.g.</font>
+<a name="line-239"></a><font color=Blue>--   @path [children, tag \"name1\", attr \"attr1\", children, tag \"name2\"]@</font>
+<a name="line-240"></a><font color=Blue>--   is like the XPath query @\/name1[\@attr1]\/name2@.</font>
+<a name="line-241"></a><font color=Blue>path</font> <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i
+<a name="line-242"></a><font color=Blue>path</font> fs <font color=Red>=</font> foldr <font color=Cyan>(</font>flip <font color=Cyan>(</font>o<font color=Cyan>)</font><font color=Cyan>)</font> keep fs
+<a name="line-243"></a>
+<a name="line-244"></a>
+<a name="line-245"></a><a name="deep"></a><font color=Blue>-- RECURSIVE SEARCH</font>
+<a name="line-246"></a><font color=Blue>-- $recursive</font>
+<a name="line-247"></a><font color=Blue>-- Recursive search has three variants: @deep@ does a breadth-first</font>
+<a name="line-248"></a><font color=Blue>-- search of the tree, @deepest@ does a depth-first search, @multi@ returns</font>
+<a name="line-249"></a><font color=Blue>-- content at all tree-levels, even those strictly contained within results</font>
+<a name="line-250"></a><font color=Blue>-- that have already been returned.</font>
+<a name="line-251"></a><font color=Blue>deep</font><font color=Cyan>,</font> deepest<font color=Cyan>,</font> multi <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-252"></a><font color=Blue>deep</font> f     <font color=Red>=</font> f <font color=Cyan>|&gt;|</font> <font color=Cyan>(</font>deep f <font color=Cyan>`o`</font> children<font color=Cyan>)</font>
+<a name="line-253"></a><a name="deepest"></a><font color=Blue>deepest</font> f  <font color=Red>=</font> <font color=Cyan>(</font>deepest f <font color=Cyan>`o`</font> children<font color=Cyan>)</font> <font color=Cyan>|&gt;|</font> f
+<a name="line-254"></a><a name="multi"></a><font color=Blue>multi</font> f    <font color=Red>=</font> f <font color=Cyan>`union`</font> <font color=Cyan>(</font>multi f <font color=Cyan>`o`</font> children<font color=Cyan>)</font>
+<a name="line-255"></a>
+<a name="line-256"></a><a name="when"></a><font color=Blue>-- | Interior editing:</font>
+<a name="line-257"></a><font color=Blue>--   @f `when` g@ applies @f@ only when the predicate @g@ succeeds,</font>
+<a name="line-258"></a><font color=Blue>--   otherwise the content is unchanged.</font>
+<a name="line-259"></a><font color=Blue>when</font>   <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-260"></a><a name="guards"></a><font color=Blue>-- | Interior editing:</font>
+<a name="line-261"></a><font color=Blue>--   @g `guards` f@ applies @f@ only when the predicate @g@ succeeds,</font>
+<a name="line-262"></a><font color=Blue>--   otherwise the content is discarded.</font>
+<a name="line-263"></a><font color=Blue>guards</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-264"></a><a name="when"></a><font color=Blue>f</font> <font color=Cyan>`when`</font> g       <font color=Red>=</font> g <font color=Cyan>?&gt;</font> f <font color=Red><b>:&gt;</b></font> keep
+<a name="line-265"></a><a name="guards"></a><font color=Blue>g</font> <font color=Cyan>`guards`</font> f     <font color=Red>=</font> g <font color=Cyan>?&gt;</font> f <font color=Red><b>:&gt;</b></font> none	<font color=Blue>-- = f `o` (keep `with` g)</font>
+<a name="line-266"></a>
+<a name="line-267"></a><a name="chip"></a><font color=Blue>-- | Process CHildren In Place.  The filter is applied to any children</font>
+<a name="line-268"></a><font color=Blue>--   of an element content, and the element rebuilt around the results.</font>
+<a name="line-269"></a><font color=Blue>chip</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-270"></a><font color=Blue>chip</font> f <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> i<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font> CElem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> <font color=Cyan>(</font>concatMap f cs<font color=Cyan>)</font><font color=Cyan>)</font> i <font color=Red>]</font>
+<a name="line-271"></a><font color=Blue>chip</font> f c <font color=Red>=</font> <font color=Red>[</font>c<font color=Red>]</font>
+<a name="line-272"></a><font color=Blue>-- chip f = inplace (f `o` children)</font>
+<a name="line-273"></a>
+<a name="line-274"></a><a name="inplace"></a><font color=Blue>-- | Process an element In Place.  The filter is applied to the element</font>
+<a name="line-275"></a><font color=Blue>--   itself, and then the original element rebuilt around the results.</font>
+<a name="line-276"></a><font color=Blue>inplace</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-277"></a><font color=Blue>inplace</font> f c<font color=Red>@</font><font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem name <font color=Green><u>as</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> i<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font> CElem <font color=Cyan>(</font>Elem name <font color=Green><u>as</u></font> <font color=Cyan>(</font>f c<font color=Cyan>)</font><font color=Cyan>)</font> i <font color=Red>]</font>
+<a name="line-278"></a><font color=Blue>inplace</font> f c <font color=Red>=</font> <font color=Red>[</font>c<font color=Red>]</font>
+<a name="line-279"></a>
+<a name="line-280"></a>
+<a name="line-281"></a><a name="foldXml"></a><font color=Blue>-- | Recursive application of filters: a fold-like operator.  Defined</font>
+<a name="line-282"></a><font color=Blue>--   as @f `o` chip (foldXml f)@.</font>
+<a name="line-283"></a><font color=Blue>foldXml</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-284"></a><font color=Blue>foldXml</font> f <font color=Red>=</font> f <font color=Cyan>`o`</font> chip <font color=Cyan>(</font>foldXml f<font color=Cyan>)</font>
+<a name="line-285"></a>
+<a name="line-286"></a>
+<a name="line-287"></a>
+<a name="line-288"></a>
+<a name="line-289"></a><font color=Blue>-- CONSTRUCTIVE CONTENT FILTERS</font>
+<a name="line-290"></a>
+<a name="line-291"></a><a name="mkElem"></a><font color=Blue>-- | Build an element with the given tag name - its content is the results</font>
+<a name="line-292"></a><font color=Blue>--   of the given list of filters.</font>
+<a name="line-293"></a><font color=Blue>mkElem</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i
+<a name="line-294"></a><font color=Blue>mkElem</font> h cfs <font color=Red>=</font> <font color=Red>\</font>t<font color=Red>-&gt;</font> <font color=Red>[</font> CElem <font color=Cyan>(</font>Elem h [] <font color=Cyan>(</font>cat cfs t<font color=Cyan>)</font><font color=Cyan>)</font> undefined <font color=Red>]</font>
+<a name="line-295"></a>
+<a name="line-296"></a><a name="mkElemAttr"></a><font color=Blue>-- | Build an element with the given name, attributes, and content.</font>
+<a name="line-297"></a><font color=Blue>mkElemAttr</font> <font color=Red>::</font> String <font color=Red>-&gt;</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="line-298"></a><font color=Blue>mkElemAttr</font> h <font color=Green><u>as</u></font> cfs <font color=Red>=</font> <font color=Red>\</font>t<font color=Red>-&gt;</font> <font color=Red>[</font> CElem <font color=Cyan>(</font>Elem h <font color=Cyan>(</font>map <font color=Cyan>(</font>attr t<font color=Cyan>)</font> <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>cat cfs t<font color=Cyan>)</font><font color=Cyan>)</font> undefined <font color=Red>]</font>
+<a name="line-299"></a>  <font color=Green><u>where</u></font> attr t <font color=Cyan>(</font>n<font color=Cyan>,</font>vf<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-300"></a>            <font color=Green><u>let</u></font> v <font color=Red>=</font> concat <font color=Red>[</font> s <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>&lt;-</font> <font color=Cyan>(</font>deep txt <font color=Cyan>`o`</font> vf<font color=Cyan>)</font> t <font color=Red>]</font>
+<a name="line-301"></a>            <font color=Green><u>in</u></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="line-302"></a>
+<a name="line-303"></a><a name="literal"></a><font color=Blue>-- | Build some textual content.</font>
+<a name="line-304"></a><font color=Blue>literal</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i
+<a name="line-305"></a><font color=Blue>literal</font> s <font color=Red>=</font> const <font color=Red>[</font>CString False s undefined<font color=Red>]</font>
+<a name="line-306"></a>
+<a name="line-307"></a><a name="cdata"></a><font color=Blue>-- | Build some CDATA content.</font>
+<a name="line-308"></a><font color=Blue>cdata</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i
+<a name="line-309"></a><font color=Blue>cdata</font> s <font color=Red>=</font> const <font color=Red>[</font>CString True s undefined<font color=Red>]</font>
+<a name="line-310"></a>
+<a name="line-311"></a><a name="replaceTag"></a><font color=Blue>-- | Rename an element tag (leaving attributes in place).</font>
+<a name="line-312"></a><font color=Blue>replaceTag</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i
+<a name="line-313"></a><font color=Blue>replaceTag</font> n <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> i<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> i<font color=Red>]</font>
+<a name="line-314"></a><font color=Blue>replaceTag</font> n <font color=Green><u>_</u></font> <font color=Red>=</font> []
+<a name="line-315"></a>
+<a name="line-316"></a><a name="replaceAttrs"></a><font color=Blue>-- | Replace the attributes of an element (leaving tag the same).</font>
+<a name="line-317"></a><font color=Blue>replaceAttrs</font> <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font>String<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i
+<a name="line-318"></a><font color=Blue>replaceAttrs</font> <font color=Green><u>as</u></font> <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem n <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> i<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem n as' cs<font color=Cyan>)</font> i<font color=Red>]</font>
+<a name="line-319"></a>    <font color=Green><u>where</u></font> as' <font color=Red>=</font> map <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font><font color=Red>-&gt;</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><font color=Cyan>)</font> <font color=Green><u>as</u></font>
+<a name="line-320"></a><font color=Blue>replaceAttrs</font> <font color=Green><u>as</u></font> <font color=Green><u>_</u></font> <font color=Red>=</font> []
+<a name="line-321"></a>
+<a name="line-322"></a>
+<a name="line-323"></a>
+<a name="line-324"></a><font color=Blue>-- LABELLING</font>
+<a name="line-325"></a>
+<a name="line-326"></a><a name="LabelFilter"></a><font color=Blue>-- | A LabelFilter is like a CFilter except that it pairs up a polymorphic</font>
+<a name="line-327"></a><a name="LabelFilter"></a><font color=Blue>--   value (label) with each of its results.</font>
+<a name="line-328"></a><a name="LabelFilter"></a><font color=Green><u>type</u></font> LabelFilter i a <font color=Red>=</font> Content i <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>a<font color=Cyan>,</font>Content i<font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-329"></a>
+<a name="line-330"></a><a name="oo"></a><font color=Blue>-- | Compose a label-processing filter with a label-generating filter.</font>
+<a name="line-331"></a><font color=Blue>oo</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>CFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> LabelFilter i a <font color=Red>-&gt;</font> CFilter i
+<a name="line-332"></a><a name="oo"></a><font color=Blue>f</font> <font color=Cyan>`oo`</font> g <font color=Red>=</font> concatMap <font color=Cyan>(</font>uncurry f<font color=Cyan>)</font> <font color=Cyan>.</font> g
+<a name="line-333"></a>
+<a name="line-334"></a><font color=Blue>{-
+<a name="line-335"></a>-- | Process the information labels (very nearly monadic bind).
+<a name="line-336"></a>oo :: (b -&gt; CFilter b c) -&gt; CFilter a b -&gt; CFilter a c
+<a name="line-337"></a>f `oo` g = concatMap info . g
+<a name="line-338"></a>    where info c@(CElem _ i)     = f i c
+<a name="line-339"></a>          info c@(CString _ _ i) = f i c
+<a name="line-340"></a>          info c@(CRef _ i)      = f i c
+<a name="line-341"></a>          info c                 = [c]
+<a name="line-342"></a>-}</font>
+<a name="line-343"></a>
+<a name="line-344"></a><a name="x"></a><font color=Blue>-- | Combine labels.  Think of this as a pair-wise zip on labels.</font>
+<a name="line-345"></a><font color=Blue>--   e.g. @(numbered `x` tagged)@</font>
+<a name="line-346"></a><font color=Blue>x</font> <font color=Red>::</font> <font color=Cyan>(</font>CFilter i<font color=Red>-&gt;</font>LabelFilter i a<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>CFilter i<font color=Red>-&gt;</font>LabelFilter i b<font color=Cyan>)</font> <font color=Red>-&gt;</font>
+<a name="line-347"></a>       <font color=Cyan>(</font>CFilter i<font color=Red>-&gt;</font>LabelFilter i <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-348"></a><a name="x"></a><font color=Blue>f</font> <font color=Cyan>`x`</font> g <font color=Red>=</font> <font color=Red>\</font>cf c<font color=Red>-&gt;</font> <font color=Green><u>let</u></font> gs <font color=Red>=</font> map fst <font color=Cyan>(</font>g cf c<font color=Cyan>)</font>
+<a name="line-349"></a>                      fs <font color=Red>=</font> map fst <font color=Cyan>(</font>f cf c<font color=Cyan>)</font>
+<a name="line-350"></a>                  <font color=Green><u>in</u></font> zip <font color=Cyan>(</font>zip fs gs<font color=Cyan>)</font> <font color=Cyan>(</font>cf c<font color=Cyan>)</font>
+<a name="line-351"></a>
+<a name="line-352"></a>
+<a name="line-353"></a><font color=Blue>-- Some basic label-generating filters.</font>
+<a name="line-354"></a>
+<a name="line-355"></a><a name="numbered"></a><font color=Blue>-- | Number the results from 1 upwards.</font>
+<a name="line-356"></a><font color=Blue>numbered</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> LabelFilter i Int
+<a name="line-357"></a><font color=Blue>numbered</font> f <font color=Red>=</font> zip <font color=Red>[</font><font color=Magenta>1</font><font color=Red>..</font><font color=Red>]</font> <font color=Cyan>.</font> f
+<a name="line-358"></a>
+<a name="line-359"></a><a name="interspersed"></a><font color=Blue>-- | In @interspersed a f b@, label each result of @f@ with the string @a@,</font>
+<a name="line-360"></a><font color=Blue>--   except for the last one which is labelled with the string @b@.</font>
+<a name="line-361"></a><font color=Blue>interspersed</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> LabelFilter i String
+<a name="line-362"></a><font color=Blue>interspersed</font> a f b <font color=Red>=</font>
+<a name="line-363"></a>  <font color=Cyan>(</font><font color=Red>\</font>xs<font color=Red>-&gt;</font> zip <font color=Cyan>(</font>replicate <font color=Cyan>(</font>len xs<font color=Cyan>)</font> a <font color=Cyan>++</font> <font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>)</font> xs<font color=Cyan>)</font> <font color=Cyan>.</font> f
+<a name="line-364"></a>  <font color=Green><u>where</u></font>
+<a name="line-365"></a>  len [] <font color=Red>=</font> <font color=Magenta>0</font>
+<a name="line-366"></a>  len xs <font color=Red>=</font> length xs <font color=Blue>-</font> <font color=Magenta>1</font>
+<a name="line-367"></a>
+<a name="line-368"></a><a name="tagged"></a><font color=Blue>-- | Label each element in the result with its tag name.  Non-element</font>
+<a name="line-369"></a><font color=Blue>--   results get an empty string label.</font>
+<a name="line-370"></a><font color=Blue>tagged</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> LabelFilter i String
+<a name="line-371"></a><font color=Blue>tagged</font> f <font color=Red>=</font> extracted name f
+<a name="line-372"></a>  <font color=Green><u>where</u></font> name <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem n <font color=Green><u>_</u></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> n
+<a name="line-373"></a>        name <font color=Green><u>_</u></font>                      <font color=Red>=</font> <font color=Magenta>""</font>
+<a name="line-374"></a>
+<a name="line-375"></a><a name="attributed"></a><font color=Blue>-- | Label each element in the result with the value of the named attribute.</font>
+<a name="line-376"></a><font color=Blue>--   Elements without the attribute, and non-element results, get an</font>
+<a name="line-377"></a><font color=Blue>--   empty string label.</font>
+<a name="line-378"></a><font color=Blue>attributed</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> LabelFilter i String
+<a name="line-379"></a><font color=Blue>attributed</font> key f <font color=Red>=</font> extracted att f
+<a name="line-380"></a>  <font color=Green><u>where</u></font> att <font color=Cyan>(</font>CElem <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=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-381"></a>            <font color=Green><u>case</u></font> <font color=Cyan>(</font>lookup key <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Green><u>of</u></font>
+<a name="line-382"></a>              Nothing  <font color=Red>-&gt;</font> <font color=Magenta>""</font>
+<a name="line-383"></a>              <font color=Cyan>(</font>Just 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>-&gt;</font> show v
+<a name="line-384"></a>        att <font color=Green><u>_</u></font> <font color=Red>=</font> <font color=Magenta>""</font>
+<a name="line-385"></a>
+<a name="line-386"></a><a name="textlabelled"></a><font color=Blue>-- | Label each textual part of the result with its text.  Element</font>
+<a name="line-387"></a><font color=Blue>--   results get an empty string label.</font>
+<a name="line-388"></a><font color=Blue>textlabelled</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> LabelFilter i <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>
+<a name="line-389"></a><font color=Blue>textlabelled</font> f <font color=Red>=</font> extracted text f
+<a name="line-390"></a>  <font color=Green><u>where</u></font> text <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>=</font> Just s
+<a name="line-391"></a>        text <font color=Green><u>_</u></font>               <font color=Red>=</font> Nothing
+<a name="line-392"></a>
+<a name="line-393"></a><a name="extracted"></a><font color=Blue>-- | Label each content with some information extracted from itself.</font>
+<a name="line-394"></a><font color=Blue>extracted</font> <font color=Red>::</font> <font color=Cyan>(</font>Content i<font color=Red>-&gt;</font>a<font color=Cyan>)</font> <font color=Red>-&gt;</font> CFilter i <font color=Red>-&gt;</font> LabelFilter i a
+<a name="line-395"></a><font color=Blue>extracted</font> proj f <font color=Red>=</font> concatMap <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font><font color=Red>[</font><font color=Cyan>(</font>proj c<font color=Cyan>,</font> c<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Cyan>.</font> f
+<a name="line-396"></a>                                                                                
+<a name="line-397"></a>
+<a name="line-398"></a>
+<a name="line-399"></a><font color=Blue>{-
+<a name="line-400"></a>-- MISC
+<a name="line-401"></a>
+<a name="line-402"></a>-- | I haven't yet remembered \/ worked out what this does.
+<a name="line-403"></a>combine :: (Read a,Show a) =&gt; ([a]-&gt;a) -&gt; LabelFilter String -&gt; CFilter
+<a name="line-404"></a>combine f lf = \c-&gt; [ CString False (show (f [ read l | (l,_) &lt;- lf c ])) ]
+<a name="line-405"></a>-}</font>
+<a name="line-406"></a>
+<a name="line-407"></a>
+<a name="line-408"></a><font color=Blue>{- OLD STUFF - OBSOLETE
+<a name="line-409"></a>-- Keep an element by its numbered position (starting at 1).
+<a name="line-410"></a>position :: Int -&gt; [Content] -&gt; [Content]
+<a name="line-411"></a>position n | n&gt;0  = (:[]) . (!!(n-1))
+<a name="line-412"></a>           | otherwise = const []
+<a name="line-413"></a>
+<a name="line-414"></a>-- Chop and remove the root portions of trees to depth n.
+<a name="line-415"></a>layer :: Int -&gt; [Content] -&gt; [Content]
+<a name="line-416"></a>layer n = apply n (concatMap lay)
+<a name="line-417"></a>  where lay (CElem (Elem _ _ cs)) = cs
+<a name="line-418"></a>        lay _ = []
+<a name="line-419"></a>        apply 0 f xs = xs
+<a name="line-420"></a>        apply n f xs = apply (n-1) f (f xs)
+<a name="line-421"></a>
+<a name="line-422"></a>combine :: (Read a, Show a) =&gt; ([a]-&gt;a) -&gt; [Content] -&gt; [Content]
+<a name="line-423"></a>combine f = \cs-&gt; [ CString False (show (f [ read s | CString _ s &lt;- cs ])) ]
+<a name="line-424"></a>-}</font>
 </pre>
+</body>
 </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
@@ -1,131 +1,137 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | This module performs the translation of a parsed XML DTD into the</font>
-<a name="(line2)"></a><font color=Blue>--   internal representation of corresponding Haskell data\/newtypes.</font>
-<a name="(line3)"></a>
-<a name="(line4)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>DtdToHaskell<font color=Cyan>.</font>Convert
-<a name="(line5)"></a>  <font color=Cyan>(</font> dtd2TypeDef
-<a name="(line6)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line7)"></a>
-<a name="(line8)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font>
-<a name="(line9)"></a>
-<a name="(line10)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types hiding <font color=Cyan>(</font>Name<font color=Cyan>)</font>
-<a name="(line11)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>DtdToHaskell<font color=Cyan>.</font>TypeDef
-<a name="(line12)"></a>
-<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><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>
-<a name="(line20)"></a><font color=Blue>---- (Done in two steps because we need to merge ELEMENT and ATTLIST decls.)</font>
-<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="(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
-<a name="(line28)"></a>  database db <font color=Cyan>(</font>m<font color=Red><b>:</b></font>ms<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line29)"></a>      <font color=Green><u>case</u></font> m <font color=Green><u>of</u></font>
-<a name="(line30)"></a>        <font color=Cyan>(</font>Element <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font>
-<a name="(line31)"></a>          <font color=Green><u>case</u></font> lookup n db <font color=Green><u>of</u></font>
-<a name="(line32)"></a>            Nothing <font color=Red>-&gt;</font> database <font color=Cyan>(</font><font color=Cyan>(</font>n<font color=Cyan>,</font> R [] cs<font color=Cyan>)</font><font color=Red><b>:</b></font>db<font color=Cyan>)</font> ms
-<a name="(line33)"></a>            <font color=Cyan>(</font>Just <font color=Cyan>(</font>R <font color=Green><u>as</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> database <font color=Cyan>(</font>replace n <font color=Cyan>(</font>R <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> db<font color=Cyan>)</font> ms
-<a name="(line34)"></a>        <font color=Cyan>(</font>AttList <font color=Cyan>(</font>AttListDecl n <font color=Green><u>as</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font>
-<a name="(line35)"></a>          <font color=Green><u>case</u></font> lookup n db <font color=Green><u>of</u></font>
-<a name="(line36)"></a>            Nothing <font color=Red>-&gt;</font> database <font color=Cyan>(</font><font color=Cyan>(</font>n<font color=Cyan>,</font> R <font color=Green><u>as</u></font> EMPTY<font color=Cyan>)</font><font color=Red><b>:</b></font>db<font color=Cyan>)</font> ms
-<a name="(line37)"></a>            <font color=Cyan>(</font>Just <font color=Cyan>(</font>R a cs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> database <font color=Cyan>(</font>replace n <font color=Cyan>(</font>R <font color=Cyan>(</font>a<font color=Cyan>++</font><font color=Green><u>as</u></font><font color=Cyan>)</font> cs<font color=Cyan>)</font> db<font color=Cyan>)</font> ms
-<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 <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
-<a name="(line45)"></a>
-<a name="(line46)"></a>
-<a name="(line47)"></a>
-<a name="(line48)"></a><a name="convert"></a><font color=Blue>---- Convert DTD record to typedef ----</font>
-<a name="(line49)"></a>convert <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Cyan>,</font> Record<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>TypeDef<font color=Red>]</font>
-<a name="(line50)"></a>convert <font color=Cyan>(</font>n<font color=Cyan>,</font> R <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line51)"></a>    <font color=Green><u>case</u></font> cs <font color=Green><u>of</u></font>
-<a name="(line52)"></a>      EMPTY                   <font color=Red>-&gt;</font> modifier None []
-<a name="(line53)"></a>      ANY                     <font color=Red>-&gt;</font> modifier None <font color=Red>[</font><font color=Red>[</font>Any<font color=Red>]</font><font color=Red>]</font>
-<a name="(line54)"></a>                                 <font color=Blue>--error "NYI: contentspec of ANY"</font>
-<a name="(line55)"></a>      <font color=Cyan>(</font>Mixed PCDATA<font color=Cyan>)</font>          <font color=Red>-&gt;</font> modifier None <font color=Red>[</font><font color=Red>[</font>String<font color=Red>]</font><font color=Red>]</font>
-<a name="(line56)"></a>      <font color=Cyan>(</font>Mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> modifier Star <font color=Cyan>(</font><font color=Red>[</font>String<font color=Red>]</font><font color=Red><b>:</b></font> map <font color=Cyan>(</font><font color=Cyan>(</font><font color=Red><b>:</b></font>[]<font color=Cyan>)</font> <font color=Cyan>.</font> Defined <font color=Cyan>.</font> name<font color=Cyan>)</font> ns<font color=Cyan>)</font>
-<a name="(line57)"></a>      <font color=Cyan>(</font>ContentSpec cp<font color=Cyan>)</font>        <font color=Red>-&gt;</font>
-<a name="(line58)"></a>          <font color=Green><u>case</u></font> cp <font color=Green><u>of</u></font>
-<a name="(line59)"></a>            <font color=Cyan>(</font>TagName n' m<font color=Cyan>)</font> <font color=Red>-&gt;</font> modifier m <font color=Red>[</font><font color=Red>[</font>Defined <font color=Cyan>(</font>name n'<font color=Cyan>)</font><font color=Red>]</font><font color=Red>]</font>
-<a name="(line60)"></a>            <font color=Cyan>(</font>Choice cps m<font color=Cyan>)</font> <font color=Red>-&gt;</font> modifier m <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Cyan>(</font><font color=Red><b>:</b></font>[]<font color=Cyan>)</font><font color=Cyan>.</font>inner<font color=Cyan>)</font> cps<font color=Cyan>)</font>
-<a name="(line61)"></a>            <font color=Cyan>(</font>Seq cps m<font color=Cyan>)</font>    <font color=Red>-&gt;</font> modifier m <font color=Red>[</font>map inner cps<font color=Red>]</font>
-<a name="(line62)"></a>    <font color=Cyan>++</font> concatMap <font color=Cyan>(</font>mkAttrDef n<font color=Cyan>)</font> <font color=Green><u>as</u></font>
-<a name="(line63)"></a>  <font color=Green><u>where</u></font>
-<a name="(line64)"></a>    attrs    <font color=Red>::</font> AttrFields
-<a name="(line65)"></a>    attrs     <font color=Red>=</font> map <font color=Cyan>(</font>mkAttrField n<font color=Cyan>)</font> <font color=Green><u>as</u></font>
-<a name="(line66)"></a>
-<a name="(line67)"></a>    modifier None sts   <font color=Red>=</font> mkData sts            attrs False <font color=Cyan>(</font>name n<font color=Cyan>)</font>
-<a name="(line68)"></a>    modifier m   <font color=Red>[</font><font color=Red>[</font>st<font color=Red>]</font><font color=Red>]</font> <font color=Red>=</font> mkData <font color=Red>[</font><font color=Red>[</font>modf m st<font color=Red>]</font><font color=Red>]</font>  attrs False <font color=Cyan>(</font>name n<font color=Cyan>)</font>
-<a name="(line69)"></a>    modifier m    sts   <font color=Red>=</font> mkData <font color=Red>[</font><font color=Red>[</font>modf m <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name_ n<font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font><font color=Red>]</font>
-<a name="(line70)"></a>                                                attrs False <font color=Cyan>(</font>name n<font color=Cyan>)</font> <font color=Cyan>++</font>
-<a name="(line71)"></a>                          mkData sts            []    True  <font color=Cyan>(</font>name_ n<font color=Cyan>)</font>
-<a name="(line72)"></a>
-<a name="(line73)"></a>    inner <font color=Red>::</font> CP <font color=Red>-&gt;</font> StructType
-<a name="(line74)"></a>    inner <font color=Cyan>(</font>TagName n' m<font color=Cyan>)</font> <font color=Red>=</font> modf m <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name n'<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line75)"></a>    inner <font color=Cyan>(</font>Choice cps m<font color=Cyan>)</font> <font color=Red>=</font> modf m <font color=Cyan>(</font>OneOf <font color=Cyan>(</font>map inner cps<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line76)"></a>    inner <font color=Cyan>(</font>Seq cps None<font color=Cyan>)</font> <font color=Red>=</font> Tuple <font color=Cyan>(</font>map inner cps<font color=Cyan>)</font>
-<a name="(line77)"></a>    inner <font color=Cyan>(</font>Seq cps m<font color=Cyan>)</font>    <font color=Red>=</font> modf m <font color=Cyan>(</font>Tuple <font color=Cyan>(</font>map inner cps<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line78)"></a>
-<a name="(line79)"></a>    modf None x  <font color=Red>=</font> x
-<a name="(line80)"></a>    modf Query x <font color=Red>=</font> Maybe x
-<a name="(line81)"></a>    modf Star x  <font color=Red>=</font> List x
-<a name="(line82)"></a>    modf Plus x  <font color=Red>=</font> List1 x
-<a name="(line83)"></a>
-<a name="(line84)"></a><a name="mkData"></a>mkData <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> AttrFields <font color=Red>-&gt;</font> Bool <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> <font color=Red>[</font>TypeDef<font color=Red>]</font>
-<a name="(line85)"></a>mkData []   fs aux n  <font color=Red>=</font> <font color=Red>[</font>DataDef aux n fs []<font color=Red>]</font>
-<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 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
-<a name="(line94)"></a>    flatten <font color=Cyan>(</font>Tuple sts<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Blue>{-"Tuple" ++ show (length sts) ++ "_" ++ -}</font>
-<a name="(line95)"></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="(line96)"></a>    flatten String       <font color=Red>=</font> <font color=Magenta>"Str"</font>
-<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> 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 <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>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/DtdToHaskell/Convert.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | This module performs the translation of a parsed XML DTD into the</font>
+<a name="line-2"></a><font color=Blue>--   internal representation of corresponding Haskell data\/newtypes.</font>
+<a name="line-3"></a>
+<a name="line-4"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>DtdToHaskell<font color=Cyan>.</font>Convert
+<a name="line-5"></a>  <font color=Cyan>(</font> dtd2TypeDef
+<a name="line-6"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-7"></a>
+<a name="line-8"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>,</font>nub<font color=Cyan>)</font>
+<a name="line-9"></a>
+<a name="line-10"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types hiding <font color=Cyan>(</font>Name<font color=Cyan>)</font>
+<a name="line-11"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>DtdToHaskell<font color=Cyan>.</font>TypeDef
+<a name="line-12"></a>
+<a name="line-13"></a>
+<a name="line-14"></a><a name="Record"></a><font color=Blue>---- Internal representation for database of DTD decls ----</font>
+<a name="line-15"></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="line-16"></a><font color=Blue>-- type Db = [(String,Record)]</font>
+<a name="line-17"></a>
+<a name="line-18"></a>
+<a name="line-19"></a><a name="dtd2TypeDef"></a><font color=Blue>---- Build a database of DTD decls then convert them to typedefs ----</font>
+<a name="line-20"></a><font color=Blue>---- (Done in two steps because we need to merge ELEMENT and ATTLIST decls.)</font>
+<a name="line-21"></a><font color=Blue>---- Apparently multiple ATTLIST decls for the same element are permitted,</font>
+<a name="line-22"></a><font color=Blue>---- although only one ELEMENT decl for it is allowed.</font>
+<a name="line-23"></a><font color=Blue>dtd2TypeDef</font> <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="line-24"></a><font color=Blue>dtd2TypeDef</font> mds <font color=Red>=</font>
+<a name="line-25"></a>  <font color=Cyan>(</font>concatMap convert <font color=Cyan>.</font> reverse <font color=Cyan>.</font> database []<font color=Cyan>)</font> mds
+<a name="line-26"></a>  <font color=Green><u>where</u></font>
+<a name="line-27"></a>  database db [] <font color=Red>=</font> db
+<a name="line-28"></a>  database db <font color=Cyan>(</font>m<font color=Red><b>:</b></font>ms<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-29"></a>      <font color=Green><u>case</u></font> m <font color=Green><u>of</u></font>
+<a name="line-30"></a>        <font color=Cyan>(</font>Element <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font>
+<a name="line-31"></a>          <font color=Green><u>case</u></font> lookup n db <font color=Green><u>of</u></font>
+<a name="line-32"></a>            Nothing <font color=Red>-&gt;</font> database <font color=Cyan>(</font><font color=Cyan>(</font>n<font color=Cyan>,</font> R [] cs<font color=Cyan>)</font><font color=Red><b>:</b></font>db<font color=Cyan>)</font> ms
+<a name="line-33"></a>            <font color=Cyan>(</font>Just <font color=Cyan>(</font>R <font color=Green><u>as</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> database <font color=Cyan>(</font>replace n <font color=Cyan>(</font>R <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> db<font color=Cyan>)</font> ms
+<a name="line-34"></a>        <font color=Cyan>(</font>AttList <font color=Cyan>(</font>AttListDecl n <font color=Green><u>as</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font>
+<a name="line-35"></a>          <font color=Green><u>case</u></font> lookup n db <font color=Green><u>of</u></font>
+<a name="line-36"></a>            Nothing <font color=Red>-&gt;</font> database <font color=Cyan>(</font><font color=Cyan>(</font>n<font color=Cyan>,</font> R <font color=Green><u>as</u></font> EMPTY<font color=Cyan>)</font><font color=Red><b>:</b></font>db<font color=Cyan>)</font> ms
+<a name="line-37"></a>            <font color=Cyan>(</font>Just <font color=Cyan>(</font>R a cs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> database <font color=Cyan>(</font>replace n <font color=Cyan>(</font>R <font color=Cyan>(</font>nub <font color=Cyan>(</font>a<font color=Cyan>++</font><font color=Green><u>as</u></font><font color=Cyan>)</font><font color=Cyan>)</font> cs<font color=Cyan>)</font> db<font color=Cyan>)</font> ms
+<a name="line-38"></a>    <font color=Blue>--  (MarkupPE _ m') -&gt; database db (m':ms)</font>
+<a name="line-39"></a>        <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> database db ms
+<a name="line-40"></a>
+<a name="line-41"></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="line-42"></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="line-43"></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="line-44"></a>      <font color=Red>|</font> otherwise <font color=Red>=</font> x<font color=Red><b>:</b></font> replace n v db
+<a name="line-45"></a>
+<a name="line-46"></a>
+<a name="line-47"></a>
+<a name="line-48"></a><a name="convert"></a><font color=Blue>---- Convert DTD record to typedef ----</font>
+<a name="line-49"></a><font color=Blue>convert</font> <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Cyan>,</font> Record<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>TypeDef<font color=Red>]</font>
+<a name="line-50"></a><font color=Blue>convert</font> <font color=Cyan>(</font>n<font color=Cyan>,</font> R <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-51"></a>    <font color=Green><u>case</u></font> cs <font color=Green><u>of</u></font>
+<a name="line-52"></a>      EMPTY                   <font color=Red>-&gt;</font> modifier None []
+<a name="line-53"></a>      ANY                     <font color=Red>-&gt;</font> modifier None <font color=Red>[</font><font color=Red>[</font>Any<font color=Red>]</font><font color=Red>]</font>
+<a name="line-54"></a>                                 <font color=Blue>--error "NYI: contentspec of ANY"</font>
+<a name="line-55"></a>      <font color=Cyan>(</font>Mixed PCDATA<font color=Cyan>)</font>          <font color=Red>-&gt;</font> modifier None <font color=Red>[</font><font color=Red>[</font>String<font color=Red>]</font><font color=Red>]</font>
+<a name="line-56"></a>      <font color=Cyan>(</font>Mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> modifier Star <font color=Cyan>(</font><font color=Red>[</font>String<font color=Red>]</font><font color=Red><b>:</b></font> map <font color=Cyan>(</font><font color=Cyan>(</font><font color=Red><b>:</b></font>[]<font color=Cyan>)</font> <font color=Cyan>.</font> Defined <font color=Cyan>.</font> name<font color=Cyan>)</font> ns<font color=Cyan>)</font>
+<a name="line-57"></a>      <font color=Cyan>(</font>ContentSpec cp<font color=Cyan>)</font>        <font color=Red>-&gt;</font>
+<a name="line-58"></a>          <font color=Green><u>case</u></font> cp <font color=Green><u>of</u></font>
+<a name="line-59"></a>            <font color=Cyan>(</font>TagName n' m<font color=Cyan>)</font> <font color=Red>-&gt;</font> modifier m <font color=Red>[</font><font color=Red>[</font>Defined <font color=Cyan>(</font>name n'<font color=Cyan>)</font><font color=Red>]</font><font color=Red>]</font>
+<a name="line-60"></a>            <font color=Cyan>(</font>Choice cps m<font color=Cyan>)</font> <font color=Red>-&gt;</font> modifier m <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Cyan>(</font><font color=Red><b>:</b></font>[]<font color=Cyan>)</font><font color=Cyan>.</font>inner<font color=Cyan>)</font> cps<font color=Cyan>)</font>
+<a name="line-61"></a>            <font color=Cyan>(</font>Seq cps m<font color=Cyan>)</font>    <font color=Red>-&gt;</font> modifier m <font color=Red>[</font>map inner cps<font color=Red>]</font>
+<a name="line-62"></a>    <font color=Cyan>++</font> concatMap <font color=Cyan>(</font>mkAttrDef n<font color=Cyan>)</font> <font color=Green><u>as</u></font>
+<a name="line-63"></a>  <font color=Green><u>where</u></font>
+<a name="line-64"></a>    attrs    <font color=Red>::</font> AttrFields
+<a name="line-65"></a>    attrs     <font color=Red>=</font> map <font color=Cyan>(</font>mkAttrField n<font color=Cyan>)</font> <font color=Green><u>as</u></font>
+<a name="line-66"></a>
+<a name="line-67"></a>    modifier None sts   <font color=Red>=</font> mkData sts            attrs False <font color=Cyan>(</font>name n<font color=Cyan>)</font>
+<a name="line-68"></a>    modifier m   <font color=Red>[</font><font color=Red>[</font>st<font color=Red>]</font><font color=Red>]</font> <font color=Red>=</font> mkData <font color=Red>[</font><font color=Red>[</font>modf m st<font color=Red>]</font><font color=Red>]</font>  attrs False <font color=Cyan>(</font>name n<font color=Cyan>)</font>
+<a name="line-69"></a>    modifier m    sts   <font color=Red>=</font> mkData <font color=Red>[</font><font color=Red>[</font>modf m <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name_ n<font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font><font color=Red>]</font>
+<a name="line-70"></a>                                                attrs False <font color=Cyan>(</font>name n<font color=Cyan>)</font> <font color=Cyan>++</font>
+<a name="line-71"></a>                          mkData sts            []    True  <font color=Cyan>(</font>name_ n<font color=Cyan>)</font>
+<a name="line-72"></a>
+<a name="line-73"></a>    inner <font color=Red>::</font> CP <font color=Red>-&gt;</font> StructType
+<a name="line-74"></a>    inner <font color=Cyan>(</font>TagName n' m<font color=Cyan>)</font> <font color=Red>=</font> modf m <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name n'<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-75"></a>    inner <font color=Cyan>(</font>Choice cps m<font color=Cyan>)</font> <font color=Red>=</font> modf m <font color=Cyan>(</font>OneOf <font color=Cyan>(</font>map inner cps<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-76"></a>    inner <font color=Cyan>(</font>Seq cps None<font color=Cyan>)</font> <font color=Red>=</font> Tuple <font color=Cyan>(</font>map inner cps<font color=Cyan>)</font>
+<a name="line-77"></a>    inner <font color=Cyan>(</font>Seq cps m<font color=Cyan>)</font>    <font color=Red>=</font> modf m <font color=Cyan>(</font>Tuple <font color=Cyan>(</font>map inner cps<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-78"></a>
+<a name="line-79"></a>    modf None x  <font color=Red>=</font> x
+<a name="line-80"></a>    modf Query x <font color=Red>=</font> Maybe x
+<a name="line-81"></a>    modf Star x  <font color=Red>=</font> List x
+<a name="line-82"></a>    modf Plus x  <font color=Red>=</font> List1 x
+<a name="line-83"></a>
+<a name="line-84"></a><a name="mkData"></a><font color=Blue>mkData</font> <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> AttrFields <font color=Red>-&gt;</font> Bool <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> <font color=Red>[</font>TypeDef<font color=Red>]</font>
+<a name="line-85"></a><font color=Blue>mkData</font> []   fs aux n  <font color=Red>=</font> <font color=Red>[</font>DataDef aux n fs []<font color=Red>]</font>
+<a name="line-86"></a><font color=Blue>mkData</font> <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="line-87"></a><font color=Blue>mkData</font> 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="line-88"></a>  <font color=Green><u>where</u></font>
+<a name="line-89"></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="line-90"></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="line-91"></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="line-92"></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="line-93"></a>    flatten <font color=Cyan>(</font>List1 st<font color=Cyan>)</font>   <font color=Red>=</font> <font color=Blue>{-"List1_" ++ -}</font> flatten st
+<a name="line-94"></a>    flatten <font color=Cyan>(</font>Tuple sts<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Blue>{-"Tuple" ++ show (length sts) ++ "_" ++ -}</font>
+<a name="line-95"></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="line-96"></a>    flatten String       <font color=Red>=</font> <font color=Magenta>"Str"</font>
+<a name="line-97"></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="line-98"></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="line-99"></a>    flatten Any          <font color=Red>=</font> <font color=Magenta>"Any"</font>
+<a name="line-100"></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="line-101"></a>
+<a name="line-102"></a><a name="mkAttrDef"></a><font color=Blue>mkAttrDef</font> <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="line-103"></a><font color=Blue>mkAttrDef</font> <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="line-104"></a>    []
+<a name="line-105"></a><font color=Blue>mkAttrDef</font> <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="line-106"></a>    [] <font color=Blue>-- mkData [[String]] [] False (name n)</font>
+<a name="line-107"></a><font color=Blue>mkAttrDef</font> 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="line-108"></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="line-109"></a><font color=Blue>mkAttrDef</font> 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="line-110"></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="line-111"></a>        <font color=Blue>-- Default attribute values not handled here</font>
+<a name="line-112"></a>
+<a name="line-113"></a><a name="mkAttrField"></a><font color=Blue>mkAttrField</font> <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="line-114"></a><font color=Blue>mkAttrField</font> 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="line-115"></a>  <font color=Green><u>where</u></font>
+<a name="line-116"></a>    mkType StringType REQUIRED <font color=Red>=</font> String
+<a name="line-117"></a>    mkType StringType IMPLIED  <font color=Red>=</font> Maybe String
+<a name="line-118"></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="line-119"></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="line-120"></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="line-121"></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="line-122"></a>                                                        Defaultable String <font color=Cyan>(</font>show v<font color=Cyan>)</font>
+<a name="line-123"></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="line-124"></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="line-125"></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="line-126"></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="line-127"></a>
 </pre>
+</body>
 </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
@@ -1,397 +1,405 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<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>DtdToHaskell<font color=Cyan>.</font>Instance
-<a name="(line2)"></a>  <font color=Cyan>(</font> mkInstance
-<a name="(line3)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line4)"></a>
-<a name="(line5)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font>
-<a name="(line6)"></a>
-<a name="(line7)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>DtdToHaskell<font color=Cyan>.</font>TypeDef
-<a name="(line8)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ
-<a name="(line9)"></a>
-<a name="(line10)"></a><a name="mkInstance"></a><font color=Blue>-- | Convert typedef to appropriate instance declaration, either @XmlContent@,</font>
-<a name="(line11)"></a><font color=Blue>--   @XmlAttributes@, or @XmlAttrType@.</font>
-<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 <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>
-<a name="(line20)"></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="(line21)"></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>
-<a name="(line22)"></a>    <font color=Cyan>$$</font>
-<a name="(line23)"></a>    text <font color=Magenta>"instance XmlContent"</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="(line24)"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font>
-<a name="(line25)"></a>             text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> topatval <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>$$</font>
-<a name="(line26)"></a>             nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"[CElem (Elem \""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
-<a name="(line27)"></a>                          <font color=Cyan>&lt;+&gt;</font> toattr <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"[]) ()]"</font><font color=Cyan>)</font>
-<a name="(line28)"></a>           <font color=Cyan>$$</font>
-<a name="(line29)"></a>             text <font color=Magenta>"parseContents = do"</font> <font color=Cyan>$$</font>
-<a name="(line30)"></a>             nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"{ (Elem _ as []) &lt;- element [\""</font>
-<a name="(line31)"></a>                             <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\"]"</font> <font color=Cyan>$$</font>
-<a name="(line32)"></a>                     text <font color=Magenta>"; return"</font> <font color=Cyan>&lt;+&gt;</font> frretval <font color=Cyan>$$</font>
-<a name="(line33)"></a>                     text <font color=Magenta>"} `adjustErr` (\"in &lt;"</font> <font color=Cyan>&lt;&gt;</font> ppXName n
-<a name="(line34)"></a>                                                  <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;, \"++)"</font>
-<a name="(line35)"></a>                    <font color=Cyan>)</font>
-<a name="(line36)"></a>           <font color=Cyan>)</font>
-<a name="(line37)"></a>    <font color=Cyan>$$</font>
-<a name="(line38)"></a>    mkInstanceAttrs Same n fs
-<a name="(line39)"></a>
-<a name="(line40)"></a><font color=Blue>-- single constructor, "real" (non-auxiliary) type</font>
-<a name="(line41)"></a>mkInstance <font color=Cyan>(</font>DataDef False n fs <font color=Red>[</font><font color=Cyan>(</font>n0<font color=Cyan>,</font>sts<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line42)"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts
-<a name="(line43)"></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="(line44)"></a>    <font color=Green><u>in</u></font>
-<a name="(line45)"></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="(line46)"></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>
-<a name="(line47)"></a>    <font color=Cyan>$$</font>
-<a name="(line48)"></a>    text <font color=Magenta>"instance XmlContent"</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="(line49)"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font>
-<a name="(line50)"></a>             text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkCpat n0 topat vs<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>$$</font>
-<a name="(line51)"></a>             nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"[CElem (Elem \""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
-<a name="(line52)"></a>                          <font color=Cyan>&lt;+&gt;</font> toattr <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkToElem sts vs<font color=Cyan>)</font>
-<a name="(line53)"></a>                          <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>") ()]"</font><font color=Cyan>)</font>
-<a name="(line54)"></a>           <font color=Cyan>$$</font>
-<a name="(line55)"></a>             text <font color=Magenta>"parseContents = do"</font> <font color=Cyan>$$</font>
-<a name="(line56)"></a>             nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"{ e@(Elem _"</font><font color=Cyan>&lt;+&gt;</font> frpat <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"_) &lt;- element [\""</font>
-<a name="(line57)"></a>                             <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\"]"</font>
-<a name="(line58)"></a>                     <font color=Cyan>$$</font> text <font color=Magenta>"; interior e $"</font>
-<a name="(line59)"></a>                           <font color=Cyan>&lt;+&gt;</font> <font color=Cyan>(</font>mkParseConstr frattr <font color=Cyan>(</font>n0<font color=Cyan>,</font>sts<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line60)"></a>                     <font color=Cyan>$$</font> text <font color=Magenta>"} `adjustErr` (\"in &lt;"</font> <font color=Cyan>&lt;&gt;</font> ppXName n
-<a name="(line61)"></a>                                                     <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;, \"++)"</font><font color=Cyan>)</font>
-<a name="(line62)"></a>           <font color=Cyan>)</font>
-<a name="(line63)"></a>    <font color=Cyan>$$</font>
-<a name="(line64)"></a>    mkInstanceAttrs Extended n fs
-<a name="(line65)"></a>
-<a name="(line66)"></a><font color=Blue>-- single constructor, auxiliary type (i.e. no corresponding element tag)</font>
-<a name="(line67)"></a><font color=Blue>--   cannot be attributes here?</font>
-<a name="(line68)"></a>mkInstance <font color=Cyan>(</font>DataDef True n [] <font color=Red>[</font><font color=Cyan>(</font>n0<font color=Cyan>,</font>sts<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line69)"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts
-<a name="(line70)"></a>    <font color=Green><u>in</u></font>
-<a name="(line71)"></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="(line72)"></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>
-<a name="(line73)"></a>    <font color=Cyan>$$</font>
-<a name="(line74)"></a>    text <font color=Magenta>"instance XmlContent"</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="(line75)"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkCpat n0 empty vs<font color=Cyan>)</font>
-<a name="(line76)"></a>                               <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font>
-<a name="(line77)"></a>                               <font color=Cyan>$$</font>  nest <font color=Magenta>4</font> <font color=Cyan>(</font>parens <font color=Cyan>(</font>mkToElem sts vs<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line78)"></a>           <font color=Cyan>$$</font>
-<a name="(line79)"></a>             text <font color=Magenta>"parseContents ="</font> <font color=Cyan>&lt;+&gt;</font> mkParseConstr empty <font color=Cyan>(</font>n0<font color=Cyan>,</font>sts<font color=Cyan>)</font>
-<a name="(line80)"></a>           <font color=Cyan>)</font>
-<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> <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>        <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>
-<a name="(line90)"></a>    <font color=Cyan>$$</font>
-<a name="(line91)"></a>    text <font color=Magenta>"instance XmlContent"</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="(line92)"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font> vcat <font color=Cyan>(</font>map <font color=Cyan>(</font>mkToMult n topat toattr<font color=Cyan>)</font> cs<font color=Cyan>)</font>
-<a name="(line93)"></a>           <font color=Cyan>$$</font> text <font color=Magenta>"parseContents = do "</font>
-<a name="(line94)"></a>           <font color=Cyan>$$</font> nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"{ e@(Elem _"</font><font color=Cyan>&lt;+&gt;</font> frpat <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"_) &lt;- element [\""</font>
-<a name="(line95)"></a>                                                  <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\"]"</font>
-<a name="(line96)"></a>                     <font color=Cyan>$$</font> text <font color=Magenta>"; interior e $ oneOf"</font>
-<a name="(line97)"></a>                     <font color=Cyan>$$</font> nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"["</font> <font color=Cyan>&lt;+&gt;</font> mkParseConstr frattr <font color=Cyan>(</font>head cs<font color=Cyan>)</font>
-<a name="(line98)"></a>                               <font color=Cyan>$$</font> 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> mkParseConstr frattr c<font color=Cyan>)</font>
-<a name="(line99)"></a>                                            <font color=Cyan>(</font>tail cs<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line100)"></a>                               <font color=Cyan>$$</font> text <font color=Magenta>"] `adjustErr` (\"in &lt;"</font> <font color=Cyan>&lt;&gt;</font> ppXName n
-<a name="(line101)"></a>                                                             <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;, \"++)"</font>
-<a name="(line102)"></a>                               <font color=Cyan>)</font>
-<a name="(line103)"></a>                     <font color=Cyan>$$</font> text <font color=Magenta>"}"</font>
-<a name="(line104)"></a>                     <font color=Cyan>)</font>
-<a name="(line105)"></a>           <font color=Cyan>)</font>
-<a name="(line106)"></a>    <font color=Cyan>$$</font>
-<a name="(line107)"></a>    mkInstanceAttrs Extended n fs
-<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> <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>
-<a name="(line116)"></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>
-<a name="(line117)"></a>    <font color=Cyan>$$</font>
-<a name="(line118)"></a>    text <font color=Magenta>"instance XmlContent"</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="(line119)"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font> vcat <font color=Cyan>(</font>map <font color=Cyan>(</font>mkToAux mixattrs<font color=Cyan>)</font> cs<font color=Cyan>)</font>
-<a name="(line120)"></a>           <font color=Cyan>$$</font> text <font color=Magenta>"parseContents = oneOf"</font>
-<a name="(line121)"></a>           <font color=Cyan>$$</font> nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"["</font> <font color=Cyan>&lt;+&gt;</font> mkParseConstr frattr <font color=Cyan>(</font>head cs<font color=Cyan>)</font>
-<a name="(line122)"></a>                     <font color=Cyan>$$</font> 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> mkParseConstr frattr c<font color=Cyan>)</font>
-<a name="(line123)"></a>                                  <font color=Cyan>(</font>tail cs<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line124)"></a>                     <font color=Cyan>$$</font> text <font color=Magenta>"] `adjustErr` (\"in &lt;"</font> <font color=Cyan>&lt;&gt;</font> ppXName n
-<a name="(line125)"></a>                                                     <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;, \"++)"</font>
-<a name="(line126)"></a>                     <font color=Cyan>)</font>
-<a name="(line127)"></a>           <font color=Cyan>)</font>
-<a name="(line128)"></a>    <font color=Cyan>$$</font>
-<a name="(line129)"></a>    mkInstanceAttrs Extended n fs
-<a name="(line130)"></a>
-<a name="(line131)"></a><font color=Blue>-- enumeration of attribute values</font>
-<a name="(line132)"></a>mkInstance <font color=Cyan>(</font>EnumDef n es<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line133)"></a>    text <font color=Magenta>"instance XmlAttrType"</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="(line134)"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"fromAttrToTyp n (n',v)"</font> <font color=Cyan>$$</font>
-<a name="(line135)"></a>             nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"| n==n'     = translate (attr2str v)"</font> <font color=Cyan>$$</font>
-<a name="(line136)"></a>                     text <font color=Magenta>"| otherwise = Nothing"</font><font color=Cyan>)</font> <font color=Cyan>$$</font>
-<a name="(line137)"></a>             nest <font color=Magenta>2</font> <font color=Cyan>(</font>text <font color=Magenta>"where"</font> <font color=Cyan>&lt;+&gt;</font> mkTranslate es<font color=Cyan>)</font>
-<a name="(line138)"></a>           <font color=Cyan>$$</font>
-<a name="(line139)"></a>             vcat <font color=Cyan>(</font>map mkToAttr es<font color=Cyan>)</font>
-<a name="(line140)"></a>           <font color=Cyan>)</font>
-<a name="(line141)"></a>
-<a name="(line142)"></a>
-<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 <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>
-<a name="(line150)"></a>    text <font color=Magenta>"instance XmlAttributes"</font> <font color=Cyan>&lt;+&gt;</font> ppName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"where"</font> <font color=Cyan>$$</font>
-<a name="(line151)"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"fromAttrs as ="</font> <font color=Cyan>$$</font>
-<a name="(line152)"></a>             nest <font color=Magenta>4</font> <font color=Cyan>(</font> ppName n <font color=Cyan>$$</font>
-<a name="(line153)"></a>                      nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat <font color=Cyan>(</font><font color=Cyan>(</font>text <font color=Magenta>"{"</font> <font color=Cyan>&lt;+&gt;</font> mkFrFld n <font color=Cyan>(</font>head fs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font>
-<a name="(line154)"></a>                                     map <font color=Cyan>(</font><font color=Red>\</font>x<font color=Red>-&gt;</font> comma <font color=Cyan>&lt;+&gt;</font> mkFrFld n x<font color=Cyan>)</font> <font color=Cyan>(</font>tail fs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>$$</font>
-<a name="(line155)"></a>                              text <font color=Magenta>"}"</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line156)"></a>           <font color=Cyan>$$</font>
-<a name="(line157)"></a>             text <font color=Magenta>"toAttrs v = catMaybes "</font> <font color=Cyan>$$</font>
-<a name="(line158)"></a>             nest <font color=Magenta>4</font> <font color=Cyan>(</font>vcat <font color=Cyan>(</font><font color=Cyan>(</font>text <font color=Magenta>"["</font> <font color=Cyan>&lt;+&gt;</font> mkToFld <font color=Cyan>(</font>head fs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font>
-<a name="(line159)"></a>                           map <font color=Cyan>(</font><font color=Red>\</font>x<font color=Red>-&gt;</font> comma <font color=Cyan>&lt;+&gt;</font> mkToFld x<font color=Cyan>)</font> <font color=Cyan>(</font>tail fs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>$$</font>
-<a name="(line160)"></a>                     text <font color=Magenta>"]"</font><font color=Cyan>)</font>
-<a name="(line161)"></a>           <font color=Cyan>)</font>
-<a name="(line162)"></a>
-<a name="(line163)"></a>
-<a name="(line164)"></a><a name="attrpats"></a><font color=Blue>--                  respectively (frpat,frattr,topat,toattr)</font>
-<a name="(line165)"></a>attrpats <font color=Red>::</font> AttrFields <font color=Red>-&gt;</font> <font color=Cyan>(</font>Doc<font color=Cyan>,</font>Doc<font color=Cyan>,</font>Doc<font color=Cyan>,</font>Doc<font color=Cyan>)</font>
-<a name="(line166)"></a>attrpats fs <font color=Red>=</font>
-<a name="(line167)"></a>  <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> <font color=Cyan>(</font>text <font color=Magenta>"[]"</font><font color=Cyan>,</font> empty<font color=Cyan>,</font> empty<font color=Cyan>,</font> text <font color=Magenta>"[]"</font><font color=Cyan>)</font>
-<a name="(line168)"></a>  <font color=Green><u>else</u></font> <font color=Cyan>(</font>text <font color=Magenta>"as"</font><font color=Cyan>,</font> parens <font color=Cyan>(</font>text <font color=Magenta>"fromAttrs as"</font><font color=Cyan>)</font><font color=Cyan>,</font> text <font color=Magenta>"as"</font><font color=Cyan>,</font> parens <font color=Cyan>(</font>text <font color=Magenta>"toAttrs as"</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line169)"></a>
-<a name="(line170)"></a>
-<a name="(line171)"></a>
-<a name="(line172)"></a>
-<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><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 =
-<a name="(line216)"></a>    foldr (frElem n) inner (zip3 sts vs cvs)
-<a name="(line217)"></a>  where
-<a name="(line218)"></a>    cvs = let ns = nameSupply2 vs
-<a name="(line219)"></a>          in zip ns (text "c0": init ns)
-<a name="(line220)"></a>    frElem n (st,v,(cvi,cvo)) inner =
-<a name="(line221)"></a>        parens (text "\\" &lt;&gt; parens (v&lt;&gt;comma&lt;&gt;cvi) &lt;&gt; text "-&gt;" $$
-<a name="(line222)"></a>                nest 2 inner) $$
-<a name="(line223)"></a>        parens (
-<a name="(line224)"></a>          )
-<a name="(line225)"></a>-}</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 <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>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/DtdToHaskell/Instance.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>DtdToHaskell<font color=Cyan>.</font>Instance
+<a name="line-2"></a>  <font color=Cyan>(</font> mkInstance
+<a name="line-3"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-4"></a>
+<a name="line-5"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font>
+<a name="line-6"></a>
+<a name="line-7"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>DtdToHaskell<font color=Cyan>.</font>TypeDef
+<a name="line-8"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ
+<a name="line-9"></a>
+<a name="line-10"></a><a name="mkInstance"></a><font color=Blue>-- | Convert typedef to appropriate instance declaration, either @XmlContent@,</font>
+<a name="line-11"></a><font color=Blue>--   @XmlAttributes@, or @XmlAttrType@.</font>
+<a name="line-12"></a><font color=Blue>mkInstance</font> <font color=Red>::</font> TypeDef <font color=Red>-&gt;</font> Doc
+<a name="line-13"></a>
+<a name="line-14"></a><font color=Blue>-- no constructors - represents an element with empty content but attributes.</font>
+<a name="line-15"></a><font color=Blue>mkInstance</font> <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n fs []<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-16"></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="line-17"></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="line-18"></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="line-19"></a>    <font color=Green><u>in</u></font>
+<a name="line-20"></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="line-21"></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>
+<a name="line-22"></a>    <font color=Cyan>$$</font>
+<a name="line-23"></a>    text <font color=Magenta>"instance XmlContent"</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="line-24"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font>
+<a name="line-25"></a>             text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> topatval <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>$$</font>
+<a name="line-26"></a>             nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"[CElem (Elem \""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
+<a name="line-27"></a>                          <font color=Cyan>&lt;+&gt;</font> toattr <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"[]) ()]"</font><font color=Cyan>)</font>
+<a name="line-28"></a>           <font color=Cyan>$$</font>
+<a name="line-29"></a>             text <font color=Magenta>"parseContents = do"</font> <font color=Cyan>$$</font>
+<a name="line-30"></a>             nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"{ (Elem _ as []) &lt;- element [\""</font>
+<a name="line-31"></a>                             <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\"]"</font> <font color=Cyan>$$</font>
+<a name="line-32"></a>                     text <font color=Magenta>"; return"</font> <font color=Cyan>&lt;+&gt;</font> frretval <font color=Cyan>$$</font>
+<a name="line-33"></a>                     text <font color=Magenta>"} `adjustErr` (\"in &lt;"</font> <font color=Cyan>&lt;&gt;</font> ppXName n
+<a name="line-34"></a>                                                  <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;, \"++)"</font>
+<a name="line-35"></a>                    <font color=Cyan>)</font>
+<a name="line-36"></a>           <font color=Cyan>)</font>
+<a name="line-37"></a>    <font color=Cyan>$$</font>
+<a name="line-38"></a>    mkInstanceAttrs Same n fs
+<a name="line-39"></a>
+<a name="line-40"></a><font color=Blue>-- single constructor, "real" (non-auxiliary) type</font>
+<a name="line-41"></a><font color=Blue>mkInstance</font> <font color=Cyan>(</font>DataDef False n fs <font color=Red>[</font><font color=Cyan>(</font>n0<font color=Cyan>,</font>sts<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-42"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts
+<a name="line-43"></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="line-44"></a>    <font color=Green><u>in</u></font>
+<a name="line-45"></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="line-46"></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>
+<a name="line-47"></a>    <font color=Cyan>$$</font>
+<a name="line-48"></a>    text <font color=Magenta>"instance XmlContent"</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="line-49"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font>
+<a name="line-50"></a>             text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkCpat n0 topat vs<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>$$</font>
+<a name="line-51"></a>             nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"[CElem (Elem \""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>
+<a name="line-52"></a>                          <font color=Cyan>&lt;+&gt;</font> toattr <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkToElem sts vs<font color=Cyan>)</font>
+<a name="line-53"></a>                          <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>") ()]"</font><font color=Cyan>)</font>
+<a name="line-54"></a>           <font color=Cyan>$$</font>
+<a name="line-55"></a>             text <font color=Magenta>"parseContents = do"</font> <font color=Cyan>$$</font>
+<a name="line-56"></a>             nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"{ e@(Elem _"</font><font color=Cyan>&lt;+&gt;</font> frpat <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"_) &lt;- element [\""</font>
+<a name="line-57"></a>                             <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\"]"</font>
+<a name="line-58"></a>                     <font color=Cyan>$$</font> text <font color=Magenta>"; interior e $"</font>
+<a name="line-59"></a>                           <font color=Cyan>&lt;+&gt;</font> <font color=Cyan>(</font>mkParseConstr frattr <font color=Cyan>(</font>n0<font color=Cyan>,</font>sts<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-60"></a>                     <font color=Cyan>$$</font> text <font color=Magenta>"} `adjustErr` (\"in &lt;"</font> <font color=Cyan>&lt;&gt;</font> ppXName n
+<a name="line-61"></a>                                                     <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;, \"++)"</font><font color=Cyan>)</font>
+<a name="line-62"></a>           <font color=Cyan>)</font>
+<a name="line-63"></a>    <font color=Cyan>$$</font>
+<a name="line-64"></a>    mkInstanceAttrs Extended n fs
+<a name="line-65"></a>
+<a name="line-66"></a><font color=Blue>-- single constructor, auxiliary type (i.e. no corresponding element tag)</font>
+<a name="line-67"></a><font color=Blue>--   cannot be attributes here?</font>
+<a name="line-68"></a><font color=Blue>mkInstance</font> <font color=Cyan>(</font>DataDef True n [] <font color=Red>[</font><font color=Cyan>(</font>n0<font color=Cyan>,</font>sts<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-69"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts
+<a name="line-70"></a>    <font color=Green><u>in</u></font>
+<a name="line-71"></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="line-72"></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>
+<a name="line-73"></a>    <font color=Cyan>$$</font>
+<a name="line-74"></a>    text <font color=Magenta>"instance XmlContent"</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="line-75"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkCpat n0 empty vs<font color=Cyan>)</font>
+<a name="line-76"></a>                               <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font>
+<a name="line-77"></a>                               <font color=Cyan>$$</font>  nest <font color=Magenta>4</font> <font color=Cyan>(</font>parens <font color=Cyan>(</font>mkToElem sts vs<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-78"></a>           <font color=Cyan>$$</font>
+<a name="line-79"></a>             text <font color=Magenta>"parseContents ="</font> <font color=Cyan>&lt;+&gt;</font> mkParseConstr empty <font color=Cyan>(</font>n0<font color=Cyan>,</font>sts<font color=Cyan>)</font>
+<a name="line-80"></a>           <font color=Cyan>)</font>
+<a name="line-81"></a>
+<a name="line-82"></a><font color=Blue>-- multiple constructors (real)</font>
+<a name="line-83"></a><font color=Blue>mkInstance</font> <font color=Cyan>(</font>DataDef False n fs cs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-84"></a>    <font color=Green><u>let</u></font> <font color=Green><u>_</u></font> <font color=Red>=</font> nameSupply cs
+<a name="line-85"></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="line-86"></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="line-87"></a>    <font color=Green><u>in</u></font>
+<a name="line-88"></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="line-89"></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>
+<a name="line-90"></a>    <font color=Cyan>$$</font>
+<a name="line-91"></a>    text <font color=Magenta>"instance XmlContent"</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="line-92"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font> vcat <font color=Cyan>(</font>map <font color=Cyan>(</font>mkToMult n topat toattr<font color=Cyan>)</font> cs<font color=Cyan>)</font>
+<a name="line-93"></a>           <font color=Cyan>$$</font> text <font color=Magenta>"parseContents = do "</font>
+<a name="line-94"></a>           <font color=Cyan>$$</font> nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"{ e@(Elem _"</font><font color=Cyan>&lt;+&gt;</font> frpat <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"_) &lt;- element [\""</font>
+<a name="line-95"></a>                                                  <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\"]"</font>
+<a name="line-96"></a>                     <font color=Cyan>$$</font> text <font color=Magenta>"; interior e $ oneOf"</font>
+<a name="line-97"></a>                     <font color=Cyan>$$</font> nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"["</font> <font color=Cyan>&lt;+&gt;</font> mkParseConstr frattr <font color=Cyan>(</font>head cs<font color=Cyan>)</font>
+<a name="line-98"></a>                               <font color=Cyan>$$</font> 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> mkParseConstr frattr c<font color=Cyan>)</font>
+<a name="line-99"></a>                                            <font color=Cyan>(</font>tail cs<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-100"></a>                               <font color=Cyan>$$</font> text <font color=Magenta>"] `adjustErr` (\"in &lt;"</font> <font color=Cyan>&lt;&gt;</font> ppXName n
+<a name="line-101"></a>                                                             <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;, \"++)"</font>
+<a name="line-102"></a>                               <font color=Cyan>)</font>
+<a name="line-103"></a>                     <font color=Cyan>$$</font> text <font color=Magenta>"}"</font>
+<a name="line-104"></a>                     <font color=Cyan>)</font>
+<a name="line-105"></a>           <font color=Cyan>)</font>
+<a name="line-106"></a>    <font color=Cyan>$$</font>
+<a name="line-107"></a>    mkInstanceAttrs Extended n fs
+<a name="line-108"></a>
+<a name="line-109"></a><font color=Blue>-- multiple constructors (auxiliary)</font>
+<a name="line-110"></a><font color=Blue>mkInstance</font> <font color=Cyan>(</font>DataDef True n fs cs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-111"></a>    <font color=Green><u>let</u></font> <font color=Green><u>_</u></font> <font color=Red>=</font> nameSupply cs
+<a name="line-112"></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="line-113"></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="line-114"></a>    <font color=Green><u>in</u></font>
+<a name="line-115"></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="line-116"></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>
+<a name="line-117"></a>    <font color=Cyan>$$</font>
+<a name="line-118"></a>    text <font color=Magenta>"instance XmlContent"</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="line-119"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font> vcat <font color=Cyan>(</font>map <font color=Cyan>(</font>mkToAux mixattrs<font color=Cyan>)</font> cs<font color=Cyan>)</font>
+<a name="line-120"></a>           <font color=Cyan>$$</font> text <font color=Magenta>"parseContents = oneOf"</font>
+<a name="line-121"></a>           <font color=Cyan>$$</font> nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"["</font> <font color=Cyan>&lt;+&gt;</font> mkParseConstr frattr <font color=Cyan>(</font>head cs<font color=Cyan>)</font>
+<a name="line-122"></a>                     <font color=Cyan>$$</font> 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> mkParseConstr frattr c<font color=Cyan>)</font>
+<a name="line-123"></a>                                  <font color=Cyan>(</font>tail cs<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-124"></a>                     <font color=Cyan>$$</font> text <font color=Magenta>"] `adjustErr` (\"in &lt;"</font> <font color=Cyan>&lt;&gt;</font> ppXName n
+<a name="line-125"></a>                                                     <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;, \"++)"</font>
+<a name="line-126"></a>                     <font color=Cyan>)</font>
+<a name="line-127"></a>           <font color=Cyan>)</font>
+<a name="line-128"></a>    <font color=Cyan>$$</font>
+<a name="line-129"></a>    mkInstanceAttrs Extended n fs
+<a name="line-130"></a>
+<a name="line-131"></a><font color=Blue>-- enumeration of attribute values</font>
+<a name="line-132"></a><font color=Blue>mkInstance</font> <font color=Cyan>(</font>EnumDef n es<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-133"></a>    text <font color=Magenta>"instance XmlAttrType"</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="line-134"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"fromAttrToTyp n (n',v)"</font> <font color=Cyan>$$</font>
+<a name="line-135"></a>             nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"| n==n'     = translate (attr2str v)"</font> <font color=Cyan>$$</font>
+<a name="line-136"></a>                     text <font color=Magenta>"| otherwise = Nothing"</font><font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="line-137"></a>             nest <font color=Magenta>2</font> <font color=Cyan>(</font>text <font color=Magenta>"where"</font> <font color=Cyan>&lt;+&gt;</font> mkTranslate es<font color=Cyan>)</font>
+<a name="line-138"></a>           <font color=Cyan>$$</font>
+<a name="line-139"></a>             vcat <font color=Cyan>(</font>map mkToAttr es<font color=Cyan>)</font>
+<a name="line-140"></a>           <font color=Cyan>)</font>
+<a name="line-141"></a>
+<a name="line-142"></a>
+<a name="line-143"></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="line-144"></a>
+<a name="line-145"></a><a name="mkInstanceAttrs"></a><font color=Blue>mkInstanceAttrs</font>        <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="line-146"></a><font color=Blue>mkInstanceAttrs</font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> []  <font color=Red>=</font> empty
+<a name="line-147"></a><font color=Blue>mkInstanceAttrs</font> s n fs  <font color=Red>=</font>
+<a name="line-148"></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="line-149"></a>    <font color=Green><u>in</u></font>
+<a name="line-150"></a>    text <font color=Magenta>"instance XmlAttributes"</font> <font color=Cyan>&lt;+&gt;</font> ppName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"where"</font> <font color=Cyan>$$</font>
+<a name="line-151"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"fromAttrs as ="</font> <font color=Cyan>$$</font>
+<a name="line-152"></a>             nest <font color=Magenta>4</font> <font color=Cyan>(</font> ppName n <font color=Cyan>$$</font>
+<a name="line-153"></a>                      nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat <font color=Cyan>(</font><font color=Cyan>(</font>text <font color=Magenta>"{"</font> <font color=Cyan>&lt;+&gt;</font> mkFrFld n <font color=Cyan>(</font>head fs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font>
+<a name="line-154"></a>                                     map <font color=Cyan>(</font><font color=Red>\</font>x<font color=Red>-&gt;</font> comma <font color=Cyan>&lt;+&gt;</font> mkFrFld n x<font color=Cyan>)</font> <font color=Cyan>(</font>tail fs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="line-155"></a>                              text <font color=Magenta>"}"</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-156"></a>           <font color=Cyan>$$</font>
+<a name="line-157"></a>             text <font color=Magenta>"toAttrs v = catMaybes "</font> <font color=Cyan>$$</font>
+<a name="line-158"></a>             nest <font color=Magenta>4</font> <font color=Cyan>(</font>vcat <font color=Cyan>(</font><font color=Cyan>(</font>text <font color=Magenta>"["</font> <font color=Cyan>&lt;+&gt;</font> mkToFld <font color=Cyan>(</font>head fs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font>
+<a name="line-159"></a>                           map <font color=Cyan>(</font><font color=Red>\</font>x<font color=Red>-&gt;</font> comma <font color=Cyan>&lt;+&gt;</font> mkToFld x<font color=Cyan>)</font> <font color=Cyan>(</font>tail fs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="line-160"></a>                     text <font color=Magenta>"]"</font><font color=Cyan>)</font>
+<a name="line-161"></a>           <font color=Cyan>)</font>
+<a name="line-162"></a>
+<a name="line-163"></a>
+<a name="line-164"></a><a name="attrpats"></a><font color=Blue>--                  respectively (frpat,frattr,topat,toattr)</font>
+<a name="line-165"></a><font color=Blue>attrpats</font> <font color=Red>::</font> AttrFields <font color=Red>-&gt;</font> <font color=Cyan>(</font>Doc<font color=Cyan>,</font>Doc<font color=Cyan>,</font>Doc<font color=Cyan>,</font>Doc<font color=Cyan>)</font>
+<a name="line-166"></a><font color=Blue>attrpats</font> fs <font color=Red>=</font>
+<a name="line-167"></a>  <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> <font color=Cyan>(</font>text <font color=Magenta>"[]"</font><font color=Cyan>,</font> empty<font color=Cyan>,</font> empty<font color=Cyan>,</font> text <font color=Magenta>"[]"</font><font color=Cyan>)</font>
+<a name="line-168"></a>  <font color=Green><u>else</u></font> <font color=Cyan>(</font>text <font color=Magenta>"as"</font><font color=Cyan>,</font> parens <font color=Cyan>(</font>text <font color=Magenta>"fromAttrs as"</font><font color=Cyan>)</font><font color=Cyan>,</font> text <font color=Magenta>"as"</font><font color=Cyan>,</font> parens <font color=Cyan>(</font>text <font color=Magenta>"toAttrs as"</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-169"></a>
+<a name="line-170"></a>
+<a name="line-171"></a>
+<a name="line-172"></a>
+<a name="line-173"></a><font color=Blue>-- mkFrElem :: Name -&gt; [StructType] -&gt; [Doc] -&gt; Doc -&gt; Doc</font>
+<a name="line-174"></a><font color=Blue>-- mkFrElem n sts vs inner =</font>
+<a name="line-175"></a><font color=Blue>--     foldr (frElem n) inner (zip3 sts vs cvs)</font>
+<a name="line-176"></a><font color=Blue>--   where</font>
+<a name="line-177"></a><font color=Blue>--     cvs = let ns = nameSupply2 vs</font>
+<a name="line-178"></a><font color=Blue>--           in zip ns (text "c0": init ns)</font>
+<a name="line-179"></a><font color=Blue>--     frElem _ (st,v,(cvi,cvo)) inner =</font>
+<a name="line-180"></a><font color=Blue>--         parens (text "\\" &lt;&gt; parens (v&lt;&gt;comma&lt;&gt;cvi) &lt;&gt; text "-&gt;" $$</font>
+<a name="line-181"></a><font color=Blue>--                 nest 2 inner) $$</font>
+<a name="line-182"></a><font color=Blue>--         parens (</font>
+<a name="line-183"></a><font color=Blue>--           case st of</font>
+<a name="line-184"></a><font color=Blue>--             (Maybe String)  -&gt; text "fromText" &lt;+&gt; cvo</font>
+<a name="line-185"></a><font color=Blue>--             (Maybe _)       -&gt; text "fromElem" &lt;+&gt; cvo</font>
+<a name="line-186"></a><font color=Blue>--             (List String)   -&gt; text "many fromText" &lt;+&gt; cvo</font>
+<a name="line-187"></a><font color=Blue>--             (List _)        -&gt; text "many fromElem" &lt;+&gt; cvo</font>
+<a name="line-188"></a><font color=Blue>--             (List1 s)       -&gt; text "definite fromElem"</font>
+<a name="line-189"></a><font color=Blue>--                                &lt;+&gt; text "\"" &lt;&gt; text (show s)&lt;&gt; text "+\""</font>
+<a name="line-190"></a><font color=Blue>--                                &lt;+&gt; text "\"" &lt;&gt; ppXName n &lt;&gt; text "\""</font>
+<a name="line-191"></a><font color=Blue>--                                &lt;+&gt; cvo</font>
+<a name="line-192"></a><font color=Blue>--             (Tuple ss)  -&gt; text "definite fromElem"</font>
+<a name="line-193"></a><font color=Blue>--                            &lt;+&gt; text "\"(" &lt;&gt; hcat (intersperse (text ",")</font>
+<a name="line-194"></a><font color=Blue>--                                                            (map (text.show) ss))</font>
+<a name="line-195"></a><font color=Blue>--                                           &lt;&gt; text ")\""</font>
+<a name="line-196"></a><font color=Blue>--                            &lt;+&gt; text "\"" &lt;&gt; ppXName n &lt;&gt; text "\""</font>
+<a name="line-197"></a><font color=Blue>--                            &lt;+&gt; cvo</font>
+<a name="line-198"></a><font color=Blue>--             (OneOf _)  -&gt; text "definite fromElem"</font>
+<a name="line-199"></a><font color=Blue>--                            &lt;+&gt; text "\"OneOf\""</font>
+<a name="line-200"></a><font color=Blue>--                            &lt;+&gt; text "\"" &lt;&gt; ppXName n &lt;&gt; text "\""</font>
+<a name="line-201"></a><font color=Blue>--                            &lt;+&gt; cvo</font>
+<a name="line-202"></a><font color=Blue>--             (String)    -&gt; text "definite fromText" &lt;+&gt; text "\"text\" \"" &lt;&gt;</font>
+<a name="line-203"></a><font color=Blue>--                                                  ppXName n &lt;&gt; text "\"" &lt;+&gt; cvo</font>
+<a name="line-204"></a><font color=Blue>--             (Any)       -&gt; text "definite fromElem" &lt;+&gt; text "\"ANY\" \"" &lt;&gt;</font>
+<a name="line-205"></a><font color=Blue>--                                                  ppXName n &lt;&gt; text "\"" &lt;+&gt; cvo</font>
+<a name="line-206"></a><font color=Blue>--             (Defined m) -&gt; text "definite fromElem" &lt;+&gt;</font>
+<a name="line-207"></a><font color=Blue>--                                  text "\"&lt;" &lt;&gt; ppXName m &lt;&gt; text "&gt;\" \"" &lt;&gt;</font>
+<a name="line-208"></a><font color=Blue>--                                                  ppXName m &lt;&gt; text "\"" &lt;+&gt; cvo</font>
+<a name="line-209"></a><font color=Blue>--             (Defaultable _ _)  -&gt; text "nyi_fromElem_Defaultable" &lt;+&gt; cvo</font>
+<a name="line-210"></a><font color=Blue>--           )</font>
+<a name="line-211"></a>
+<a name="line-212"></a><a name="mkParseConstr"></a><font color=Blue>--</font>
+<a name="line-213"></a><font color=Blue>{-
+<a name="line-214"></a>mkParseContents :: Name -&gt; [StructType] -&gt; [Doc] -&gt; Doc -&gt; Doc
+<a name="line-215"></a>mkParseContents n sts vs inner =
+<a name="line-216"></a>    foldr (frElem n) inner (zip3 sts vs cvs)
+<a name="line-217"></a>  where
+<a name="line-218"></a>    cvs = let ns = nameSupply2 vs
+<a name="line-219"></a>          in zip ns (text "c0": init ns)
+<a name="line-220"></a>    frElem n (st,v,(cvi,cvo)) inner =
+<a name="line-221"></a>        parens (text "\\" &lt;&gt; parens (v&lt;&gt;comma&lt;&gt;cvi) &lt;&gt; text "-&gt;" $$
+<a name="line-222"></a>                nest 2 inner) $$
+<a name="line-223"></a>        parens (
+<a name="line-224"></a>          )
+<a name="line-225"></a>-}</font>
+<a name="line-226"></a><font color=Blue>mkParseConstr</font> <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="line-227"></a><font color=Blue>mkParseConstr</font> frattr <font color=Cyan>(</font>c<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-228"></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="line-229"></a>             <font color=Red><b>:</b></font> map mkParseContents sts<font color=Cyan>)</font>
+<a name="line-230"></a>
+<a name="line-231"></a><a name="mkParseContents"></a><font color=Blue>mkParseContents</font> <font color=Red>::</font> StructType <font color=Red>-&gt;</font> Doc
+<a name="line-232"></a><font color=Blue>mkParseContents</font> st <font color=Red>=</font>
+<a name="line-233"></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="line-234"></a>          <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
+<a name="line-235"></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="line-236"></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="line-237"></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="line-238"></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="line-239"></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="line-240"></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="line-241"></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="line-242"></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="line-243"></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="line-244"></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="line-245"></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="line-246"></a>
+<a name="line-247"></a><a name="mkToElem"></a><font color=Blue>--</font>
+<a name="line-248"></a><font color=Blue>mkToElem</font> <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="line-249"></a><font color=Blue>mkToElem</font> []  [] <font color=Red>=</font> text <font color=Magenta>"[]"</font>
+<a name="line-250"></a><font color=Blue>mkToElem</font> sts vs <font color=Red>=</font>
+<a name="line-251"></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="line-252"></a>  <font color=Green><u>where</u></font>
+<a name="line-253"></a>    toElem st v <font color=Red>=</font>
+<a name="line-254"></a>      <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
+<a name="line-255"></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="line-256"></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="line-257"></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="line-258"></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="line-259"></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="line-260"></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="line-261"></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="line-262"></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="line-263"></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="line-264"></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="line-265"></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="line-266"></a>
+<a name="line-267"></a><font color=Blue>-- mkRpat :: [Doc] -&gt; Doc</font>
+<a name="line-268"></a><font color=Blue>-- mkRpat [v] = v</font>
+<a name="line-269"></a><font color=Blue>-- mkRpat vs  = (parens . hcat . intersperse comma) vs</font>
+<a name="line-270"></a>
+<a name="line-271"></a><a name="mkCpat"></a><font color=Blue>mkCpat</font> <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="line-272"></a><font color=Blue>mkCpat</font> 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="line-273"></a>
+<a name="line-274"></a><a name="nameSupply"></a><font color=Blue>nameSupply</font> <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="line-275"></a><font color=Blue>nameSupply</font>  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=Magenta>'z'</font><font color=Red>]</font>
+<a name="line-276"></a>                                  <font color=Cyan>++</font> map text <font color=Red>[</font> a<font color=Red><b>:</b></font>n<font color=Red><b>:</b></font>[] <font color=Red>|</font> n <font color=Red>&lt;-</font> <font color=Red>[</font><font color=Magenta>'0'</font><font color=Red>..</font><font color=Magenta>'9'</font><font color=Red>]</font>
+<a name="line-277"></a>                                                       <font color=Cyan>,</font> a <font color=Red>&lt;-</font> <font color=Red>[</font><font color=Magenta>'a'</font><font color=Red>..</font><font color=Magenta>'z'</font><font color=Red>]</font> <font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-278"></a><font color=Blue>-- nameSupply2 ss = take (length ss) [ text ('c':v:[]) | v &lt;- ['a'..]]</font>
+<a name="line-279"></a>
+<a name="line-280"></a><a name="mkTranslate"></a><font color=Blue>mkTranslate</font> <font color=Red>::</font> <font color=Red>[</font>Name<font color=Red>]</font> <font color=Red>-&gt;</font> Doc
+<a name="line-281"></a><font color=Blue>mkTranslate</font> es <font color=Red>=</font>
+<a name="line-282"></a>    vcat <font color=Cyan>(</font>map trans es<font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="line-283"></a>    text <font color=Magenta>"translate _ = Nothing"</font>
+<a name="line-284"></a>  <font color=Green><u>where</u></font>
+<a name="line-285"></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="line-286"></a>              text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n
+<a name="line-287"></a>
+<a name="line-288"></a><a name="mkToAttr"></a><font color=Blue>mkToAttr</font> <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc
+<a name="line-289"></a><font color=Blue>mkToAttr</font> 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="line-290"></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="line-291"></a>
+<a name="line-292"></a><a name="mkFrFld"></a><font color=Blue>mkFrFld</font> <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="line-293"></a><font color=Blue>mkFrFld</font> tag <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-294"></a>    ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="line-295"></a>    <font color=Cyan>(</font> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
+<a name="line-296"></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="line-297"></a>                                                 doubleQuotes <font color=Cyan>(</font>text s<font color=Cyan>)</font>
+<a name="line-298"></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="line-299"></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="line-300"></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="line-301"></a>        String                 <font color=Red>-&gt;</font> text <font color=Magenta>"definiteA fromAttrToStr"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="line-302"></a>                                                 doubleQuotes <font color=Cyan>(</font>ppXName tag<font color=Cyan>)</font>
+<a name="line-303"></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="line-304"></a>                                                 doubleQuotes <font color=Cyan>(</font>ppXName tag<font color=Cyan>)</font>
+<a name="line-305"></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="line-306"></a>
+<a name="line-307"></a><a name="mkToFld"></a><font color=Blue>mkToFld</font> <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="line-308"></a><font color=Blue>mkToFld</font> <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-309"></a>    <font color=Cyan>(</font> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>
+<a name="line-310"></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="line-311"></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="line-312"></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="line-313"></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="line-314"></a>        String                 <font color=Red>-&gt;</font> text <font color=Magenta>"toAttrFrStr"</font>
+<a name="line-315"></a>        <font color=Green><u>_</u></font>                      <font color=Red>-&gt;</font> text <font color=Magenta>"toAttrFrTyp"</font>
+<a name="line-316"></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="line-317"></a>
+<a name="line-318"></a><font color=Blue>-- mkFrAux :: Bool -&gt; Doc -&gt; [(Name,[StructType])] -&gt; Doc</font>
+<a name="line-319"></a><font color=Blue>-- mkFrAux keeprest attrs cs = foldr frAux inner cs</font>
+<a name="line-320"></a><font color=Blue>--   where</font>
+<a name="line-321"></a><font color=Blue>--     inner = text "(Nothing, c0)"</font>
+<a name="line-322"></a><font color=Blue>--     rest  = if keeprest then text "rest" else text "_"</font>
+<a name="line-323"></a><font color=Blue>--     frAux (n,sts) innr =</font>
+<a name="line-324"></a><font color=Blue>--         let vs  = nameSupply sts in</font>
+<a name="line-325"></a><font color=Blue>--         nest 4 (text "case" &lt;+&gt; blah sts vs &lt;+&gt; text "of" $$</font>
+<a name="line-326"></a><font color=Blue>--                 succpat sts vs &lt;+&gt; text "-&gt; (Just" &lt;+&gt;</font>
+<a name="line-327"></a><font color=Blue>--                                    parens (mkCpat n attrs vs) &lt;&gt; text ", rest)"</font>
+<a name="line-328"></a><font color=Blue>--                 $$</font>
+<a name="line-329"></a><font color=Blue>--                 failpat sts &lt;+&gt; text "-&gt;" $$ nest 4 innr</font>
+<a name="line-330"></a><font color=Blue>--                )</font>
+<a name="line-331"></a><font color=Blue>--     blah [st] [_] =</font>
+<a name="line-332"></a><font color=Blue>--         blahblahblah st (text "c0")</font>
+<a name="line-333"></a><font color=Blue>--     blah sts vs =</font>
+<a name="line-334"></a><font color=Blue>--         let ns = nameSupply2 vs</font>
+<a name="line-335"></a><font color=Blue>--             cvs = zip ns (text "c0": init ns)</font>
+<a name="line-336"></a><font color=Blue>--             blahblah (st,v,(cvi,cvo)) innr =</font>
+<a name="line-337"></a><font color=Blue>--                 parens (text "\\" &lt;&gt; parens (v&lt;&gt;comma&lt;&gt;cvi) &lt;&gt; text "-&gt;" $$</font>
+<a name="line-338"></a><font color=Blue>--                         nest 2 innr) $$</font>
+<a name="line-339"></a><font color=Blue>--                 blahblahblah st cvo</font>
+<a name="line-340"></a><font color=Blue>--         in</font>
+<a name="line-341"></a><font color=Blue>--         foldr blahblah (mkRpat (vs++[last ns])) (zip3 sts vs cvs)</font>
+<a name="line-342"></a><font color=Blue>--     blahblahblah st cvo = parens (</font>
+<a name="line-343"></a><font color=Blue>--         case st of</font>
+<a name="line-344"></a><font color=Blue>--           (Maybe String) -&gt; text "fromText" &lt;+&gt; cvo</font>
+<a name="line-345"></a><font color=Blue>--           (Maybe _)      -&gt; text "fromElem" &lt;+&gt; cvo</font>
+<a name="line-346"></a><font color=Blue>--           (List String)  -&gt; text "many fromText" &lt;+&gt; cvo</font>
+<a name="line-347"></a><font color=Blue>--           (List _)       -&gt; text "many fromElem" &lt;+&gt; cvo</font>
+<a name="line-348"></a><font color=Blue>--           (List1 _)      -&gt; text "fromElem" &lt;+&gt; cvo</font>
+<a name="line-349"></a><font color=Blue>--           (Tuple _)     -&gt; text "fromElem" &lt;+&gt; cvo      -- ??</font>
+<a name="line-350"></a><font color=Blue>--           (OneOf _)     -&gt; text "fromElem" &lt;+&gt; cvo</font>
+<a name="line-351"></a><font color=Blue>--           (String)       -&gt; text "fromText" &lt;+&gt; cvo</font>
+<a name="line-352"></a><font color=Blue>--           (Any)          -&gt; text "fromElem" &lt;+&gt; cvo</font>
+<a name="line-353"></a><font color=Blue>--           (Defined _)    -&gt; text "fromElem" &lt;+&gt; cvo</font>
+<a name="line-354"></a><font color=Blue>--         )</font>
+<a name="line-355"></a><font color=Blue>--     failpat sts =</font>
+<a name="line-356"></a><font color=Blue>--         let fp st =</font>
+<a name="line-357"></a><font color=Blue>--                 case st of</font>
+<a name="line-358"></a><font color=Blue>--                   (Maybe _)   -&gt; text "Nothing"</font>
+<a name="line-359"></a><font color=Blue>--                   (List _)    -&gt; text "[]"</font>
+<a name="line-360"></a><font color=Blue>--                   (List1 _)   -&gt; text "_"</font>
+<a name="line-361"></a><font color=Blue>--                   (Tuple _)  -&gt; text "_"</font>
+<a name="line-362"></a><font color=Blue>--                   (OneOf _)  -&gt; text "_"</font>
+<a name="line-363"></a><font color=Blue>--                   (String)    -&gt; text "_"</font>
+<a name="line-364"></a><font color=Blue>--                   (Any)       -&gt; text "_"</font>
+<a name="line-365"></a><font color=Blue>--                   (Defined _) -&gt; text "_"</font>
+<a name="line-366"></a><font color=Blue>--         in parens (hcat (intersperse comma (map fp sts++[text "_"])))</font>
+<a name="line-367"></a><font color=Blue>--     succpat sts vs =</font>
+<a name="line-368"></a><font color=Blue>--         let sp st v =</font>
+<a name="line-369"></a><font color=Blue>--                 case st of</font>
+<a name="line-370"></a><font color=Blue>--                   (Maybe _)   -&gt; v</font>
+<a name="line-371"></a><font color=Blue>--                   (List _)    -&gt; v</font>
+<a name="line-372"></a><font color=Blue>--                   (List1 _)   -&gt; text "Just" &lt;+&gt; v</font>
+<a name="line-373"></a><font color=Blue>--                   (Tuple _)  -&gt; text "Just" &lt;+&gt; v</font>
+<a name="line-374"></a><font color=Blue>--                   (OneOf _)  -&gt; text "Just" &lt;+&gt; v</font>
+<a name="line-375"></a><font color=Blue>--                   (String)    -&gt; text "Just" &lt;+&gt; v</font>
+<a name="line-376"></a><font color=Blue>--                   (Any)       -&gt; text "Just" &lt;+&gt; v</font>
+<a name="line-377"></a><font color=Blue>--                   (Defined _) -&gt; text "Just" &lt;+&gt; v</font>
+<a name="line-378"></a><font color=Blue>--         in parens (hcat (intersperse comma (zipWith sp sts vs++[rest])))</font>
+<a name="line-379"></a>
+<a name="line-380"></a><a name="mkToAux"></a><font color=Blue>mkToAux</font> <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="line-381"></a><font color=Blue>mkToAux</font> mixattrs <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-382"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts
+<a name="line-383"></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="line-384"></a>    <font color=Green><u>in</u></font>
+<a name="line-385"></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="line-386"></a>    mkToElem sts vs
+<a name="line-387"></a>
+<a name="line-388"></a><a name="mkToMult"></a><font color=Blue>mkToMult</font> <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="line-389"></a><font color=Blue>mkToMult</font> tag attrpat attrexp <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-390"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts
+<a name="line-391"></a>    <font color=Green><u>in</u></font>
+<a name="line-392"></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="line-393"></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="line-394"></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="line-395"></a>
 </pre>
+</body>
 </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
@@ -1,252 +1,258 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | Defines an internal representation of Haskell data\/newtype definitions</font>
-<a name="(line2)"></a><font color=Blue>--   that correspond to the XML DTD types, and provides pretty-printers to</font>
-<a name="(line3)"></a><font color=Blue>--   convert these types into the 'Doc' type of "Text.PrettyPrint.HughesPJ".</font>
-<a name="(line4)"></a>
-<a name="(line5)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>DtdToHaskell<font color=Cyan>.</font>TypeDef
-<a name="(line6)"></a>  <font color=Cyan>(</font> <font color=Blue>-- * Internal representation of types</font>
-<a name="(line7)"></a>    TypeDef<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line8)"></a>  <font color=Cyan>,</font> Constructors
-<a name="(line9)"></a>  <font color=Cyan>,</font> AttrFields
-<a name="(line10)"></a>  <font color=Cyan>,</font> StructType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line11)"></a>  <font color=Blue>-- * Pretty-print a TypeDef</font>
-<a name="(line12)"></a>  <font color=Cyan>,</font> ppTypeDef
-<a name="(line13)"></a>  <font color=Cyan>,</font> ppHName
-<a name="(line14)"></a>  <font color=Cyan>,</font> ppXName
-<a name="(line15)"></a>  <font color=Cyan>,</font> ppAName
-<a name="(line16)"></a>  <font color=Blue>-- * Name mangling</font>
-<a name="(line17)"></a>  <font color=Cyan>,</font> Name<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line18)"></a>  <font color=Cyan>,</font> name<font color=Cyan>,</font> name_<font color=Cyan>,</font> name_a<font color=Cyan>,</font> name_ac<font color=Cyan>,</font> name_f<font color=Cyan>,</font> mangle<font color=Cyan>,</font> manglef
-<a name="(line19)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line20)"></a>
-<a name="(line21)"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>isLower<font color=Cyan>,</font> isUpper<font color=Cyan>,</font> toLower<font color=Cyan>,</font> toUpper<font color=Cyan>,</font> isDigit<font color=Cyan>)</font>
-<a name="(line22)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font>
-<a name="(line23)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ
-<a name="(line24)"></a>
-<a name="(line25)"></a>
-<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="(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="(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="(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="(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="(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
-<a name="(line51)"></a>
-<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 <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 <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 <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 <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="(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> 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="(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="(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="(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> 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="(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>
-<a name="(line102)"></a>           <font color=Cyan>(</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> ppAC attr <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Cyan>$$</font>
-<a name="(line103)"></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> ppAC attr 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="(line104)"></a>             derives <font color=Cyan>)</font>  <font color=Cyan>$$</font>
-<a name="(line105)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> attr <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> attr <font color=Cyan>$$</font>
-<a name="(line106)"></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="(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="(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>
-<a name="(line114)"></a>      fsep <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>" | "</font><font color=Cyan>)</font> <font color=Cyan>(</font>map ppHName es<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line115)"></a>    <font color=Cyan>$$</font> derives <font color=Cyan>)</font>
-<a name="(line116)"></a>
-<a name="(line117)"></a>
-<a name="(line118)"></a><a name="ppST"></a>ppST <font color=Red>::</font> StructType <font color=Red>-&gt;</font> Doc
-<a name="(line119)"></a>ppST <font color=Cyan>(</font>Defaultable st <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> parens <font color=Cyan>(</font>text <font color=Magenta>"Defaultable"</font> <font color=Cyan>&lt;+&gt;</font> ppST st<font color=Cyan>)</font>
-<a name="(line120)"></a>ppST <font color=Cyan>(</font>Maybe st<font color=Cyan>)</font>  <font color=Red>=</font> parens <font color=Cyan>(</font>text <font color=Magenta>"Maybe"</font> <font color=Cyan>&lt;+&gt;</font> ppST st<font color=Cyan>)</font>
-<a name="(line121)"></a>ppST <font color=Cyan>(</font>List st<font color=Cyan>)</font>   <font color=Red>=</font> text <font color=Magenta>"["</font> <font color=Cyan>&lt;&gt;</font> ppST st <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"]"</font>
-<a name="(line122)"></a>ppST <font color=Cyan>(</font>List1 st<font color=Cyan>)</font>  <font color=Red>=</font> parens <font color=Cyan>(</font>text <font color=Magenta>"List1"</font> <font color=Cyan>&lt;+&gt;</font> ppST st<font color=Cyan>)</font>
-<a name="(line123)"></a>ppST <font color=Cyan>(</font>Tuple sts<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>commaList <font color=Cyan>(</font>map ppST sts<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line124)"></a>ppST <font color=Cyan>(</font>OneOf sts<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>text <font color=Magenta>"OneOf"</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show <font color=Cyan>(</font>length sts<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font>
-<a name="(line125)"></a>                           hsep <font color=Cyan>(</font>map ppST sts<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line126)"></a>ppST  String     <font color=Red>=</font> text <font color=Magenta>"String"</font>
-<a name="(line127)"></a>ppST  Any        <font color=Red>=</font> text <font color=Magenta>"ANYContent"</font>
-<a name="(line128)"></a>ppST <font color=Cyan>(</font>Defined n<font color=Cyan>)</font> <font color=Red>=</font> ppHName n
-<a name="(line129)"></a>
-<a name="(line130)"></a><a name="ppC"></a><font color=Blue>-- constructor and components</font>
-<a name="(line131)"></a>ppC <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>-&gt;</font> Doc
-<a name="(line132)"></a>ppC <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font> ppHName n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map ppST sts<font color=Cyan>)</font>
-<a name="(line133)"></a>
-<a name="(line134)"></a><a name="ppF"></a><font color=Blue>-- attribute (fieldname and type)</font>
-<a name="(line135)"></a>ppF <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="(line136)"></a>ppF <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font> ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"::"</font> <font color=Cyan>&lt;+&gt;</font> ppST st
-<a name="(line137)"></a>
-<a name="(line138)"></a><a name="ppAC"></a><font color=Blue>-- constructor and components with initial attr-type</font>
-<a name="(line139)"></a>ppAC <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="(line140)"></a>ppAC atype <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font> ppHName n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>atype<font color=Red><b>:</b></font> map ppST sts<font color=Cyan>)</font>
-<a name="(line141)"></a>
-<a name="(line142)"></a><a name="ppHName"></a><font color=Blue>-- | Pretty print Haskell name.</font>
-<a name="(line143)"></a>ppHName <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc
-<a name="(line144)"></a>ppHName <font color=Cyan>(</font>Name <font color=Green><u>_</u></font> s<font color=Cyan>)</font> <font color=Red>=</font> text s
-<a name="(line145)"></a><a name="ppXName"></a><font color=Blue>-- | Pretty print XML name.</font>
-<a name="(line146)"></a>ppXName <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc
-<a name="(line147)"></a>ppXName <font color=Cyan>(</font>Name s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> text s
-<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> 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>
-<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>"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>"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>"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>
-<a name="(line234)"></a>manglef <font color=Red>::</font> String <font color=Red>-&gt;</font> String
-<a name="(line235)"></a>manglef <font color=Cyan>(</font>n<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
-<a name="(line236)"></a>    <font color=Red>|</font> isUpper n   <font color=Red>=</font> toLower n<font color=Red><b>:</b></font> map decolonify ns
-<a name="(line237)"></a>    <font color=Red>|</font> isDigit n   <font color=Red>=</font> <font color=Magenta>'_'</font><font color=Red><b>:</b></font> n<font color=Red><b>:</b></font> map decolonify ns
-<a name="(line238)"></a>    <font color=Red>|</font> otherwise   <font color=Red>=</font> n<font color=Red><b>:</b></font> map decolonify ns
-<a name="(line239)"></a>
-<a name="(line240)"></a><a name="decolonify"></a><font color=Blue>-- | Convert colon to prime, hyphen to underscore.</font>
-<a name="(line241)"></a>decolonify <font color=Red>::</font> Char <font color=Red>-&gt;</font> Char
-<a name="(line242)"></a>decolonify <font color=Magenta>':'</font> <font color=Red>=</font> <font color=Magenta>'\''</font>   <font color=Blue>-- TODO: turn namespaces into qualified identifiers</font>
-<a name="(line243)"></a>decolonify <font color=Magenta>'-'</font> <font color=Red>=</font> <font color=Magenta>'_'</font>
-<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> <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
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/DtdToHaskell/TypeDef.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | Defines an internal representation of Haskell data\/newtype definitions</font>
+<a name="line-2"></a><font color=Blue>--   that correspond to the XML DTD types, and provides pretty-printers to</font>
+<a name="line-3"></a><font color=Blue>--   convert these types into the 'Doc' type of "Text.PrettyPrint.HughesPJ".</font>
+<a name="line-4"></a>
+<a name="line-5"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>DtdToHaskell<font color=Cyan>.</font>TypeDef
+<a name="line-6"></a>  <font color=Cyan>(</font> <font color=Blue>-- * Internal representation of types</font>
+<a name="line-7"></a>    TypeDef<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-8"></a>  <font color=Cyan>,</font> Constructors
+<a name="line-9"></a>  <font color=Cyan>,</font> AttrFields
+<a name="line-10"></a>  <font color=Cyan>,</font> StructType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-11"></a>  <font color=Blue>-- * Pretty-print a TypeDef</font>
+<a name="line-12"></a>  <font color=Cyan>,</font> ppTypeDef
+<a name="line-13"></a>  <font color=Cyan>,</font> ppHName
+<a name="line-14"></a>  <font color=Cyan>,</font> ppXName
+<a name="line-15"></a>  <font color=Cyan>,</font> ppAName
+<a name="line-16"></a>  <font color=Blue>-- * Name mangling</font>
+<a name="line-17"></a>  <font color=Cyan>,</font> Name<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-18"></a>  <font color=Cyan>,</font> name<font color=Cyan>,</font> name_<font color=Cyan>,</font> name_a<font color=Cyan>,</font> name_ac<font color=Cyan>,</font> name_f<font color=Cyan>,</font> mangle<font color=Cyan>,</font> manglef
+<a name="line-19"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-20"></a>
+<a name="line-21"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>isLower<font color=Cyan>,</font> isUpper<font color=Cyan>,</font> toLower<font color=Cyan>,</font> toUpper<font color=Cyan>,</font> isDigit<font color=Cyan>)</font>
+<a name="line-22"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font>
+<a name="line-23"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ
+<a name="line-24"></a>
+<a name="line-25"></a>
+<a name="line-26"></a><font color=Blue>---- Internal representation for typedefs ----</font>
+<a name="line-27"></a>
+<a name="line-28"></a><a name="Name"></a><font color=Blue>-- | Need to keep both the XML and Haskell versions of a name.</font>
+<a name="line-29"></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="line-30"></a>                 <font color=Cyan>,</font> hName <font color=Red>::</font> String       <font color=Blue>-- ^ mangled Haskell name</font>
+<a name="line-31"></a>                 <font color=Cyan>}</font>
+<a name="line-32"></a>          <font color=Green><u>deriving</u></font> Eq
+<a name="line-33"></a>
+<a name="line-34"></a><a name="TypeDef"></a><font color=Green><u>data</u></font> TypeDef <font color=Red>=</font>
+<a name="line-35"></a>      DataDef Bool Name AttrFields Constructors <font color=Blue>-- ^ Bool for main\/aux.</font>
+<a name="line-36"></a>    <font color=Red>|</font> EnumDef Name <font color=Red>[</font>Name<font color=Red>]</font>
+<a name="line-37"></a>    <font color=Green><u>deriving</u></font> Eq
+<a name="line-38"></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="line-39"></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="line-40"></a><a name="StructType"></a><font color=Green><u>data</u></font> StructType <font color=Red>=</font>
+<a name="line-41"></a>      Maybe StructType
+<a name="line-42"></a>    <font color=Red>|</font> Defaultable StructType String     <font color=Blue>-- ^ String holds default value.</font>
+<a name="line-43"></a>    <font color=Red>|</font> List StructType
+<a name="line-44"></a>    <font color=Red>|</font> List1 StructType                  <font color=Blue>-- ^ Non-empty lists.</font>
+<a name="line-45"></a>    <font color=Red>|</font> Tuple <font color=Red>[</font>StructType<font color=Red>]</font>
+<a name="line-46"></a>    <font color=Red>|</font> OneOf <font color=Red>[</font>StructType<font color=Red>]</font>
+<a name="line-47"></a>    <font color=Red>|</font> Any                               <font color=Blue>-- ^ XML's contentspec allows ANY</font>
+<a name="line-48"></a>    <font color=Red>|</font> String
+<a name="line-49"></a>    <font color=Red>|</font> Defined Name
+<a name="line-50"></a>    <font color=Green><u>deriving</u></font> Eq
+<a name="line-51"></a>
+<a name="line-52"></a><font color=Blue>-- used for converting StructType (roughly) back to an XML content model</font>
+<a name="line-53"></a><font color=Green><u>instance</u></font> Show StructType <font color=Green><u>where</u></font>
+<a name="line-54"></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="line-55"></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="line-56"></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="line-57"></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="line-58"></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="line-59"></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="line-60"></a>                                                              <font color=Cyan>(</font>map shows ss<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-61"></a>                                    <font color=Cyan>.</font> showChar <font color=Magenta>')'</font>
+<a name="line-62"></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="line-63"></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="line-64"></a>                                                              <font color=Cyan>(</font>map shows ss<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-65"></a>                                    <font color=Cyan>.</font> showChar <font color=Magenta>')'</font>
+<a name="line-66"></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="line-67"></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="line-68"></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="line-69"></a>
+<a name="line-70"></a>
+<a name="line-71"></a><a name="ppTypeDef"></a><font color=Blue>---- Pretty-printing typedefs ----</font>
+<a name="line-72"></a><font color=Blue>ppTypeDef</font> <font color=Red>::</font> TypeDef <font color=Red>-&gt;</font> Doc
+<a name="line-73"></a>
+<a name="line-74"></a><font color=Blue>--      no attrs, no constructors</font>
+<a name="line-75"></a><font color=Blue>ppTypeDef</font> <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n [] []<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-76"></a>    <font color=Green><u>let</u></font> nme <font color=Red>=</font> ppHName n <font color=Green><u>in</u></font>
+<a name="line-77"></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="line-78"></a>
+<a name="line-79"></a><font color=Blue>--      no attrs, single constructor</font>
+<a name="line-80"></a><font color=Blue>ppTypeDef</font> <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="line-81"></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="line-82"></a>
+<a name="line-83"></a><font color=Blue>--      no attrs, multiple constrs</font>
+<a name="line-84"></a><font color=Blue>ppTypeDef</font> <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n [] cs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-85"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font>
+<a name="line-86"></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="line-87"></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="line-88"></a>             derives <font color=Cyan>)</font>
+<a name="line-89"></a>
+<a name="line-90"></a><font color=Blue>--      nonzero attrs, no constructors</font>
+<a name="line-91"></a><font color=Blue>ppTypeDef</font> <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n fs []<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-92"></a>    <font color=Green><u>let</u></font> nme <font color=Red>=</font> ppHName n <font color=Green><u>in</u></font>
+<a name="line-93"></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="line-94"></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="line-95"></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="line-96"></a>             text <font color=Magenta>"}"</font> <font color=Cyan>&lt;+&gt;</font> derives <font color=Cyan>)</font>
+<a name="line-97"></a>
+<a name="line-98"></a><font color=Blue>--      nonzero attrs, one or more constrs</font>
+<a name="line-99"></a><font color=Blue>ppTypeDef</font> <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n fs cs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-100"></a>    <font color=Green><u>let</u></font> attr <font color=Red>=</font> ppAName n <font color=Green><u>in</u></font>
+<a name="line-101"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font>
+<a name="line-102"></a>           <font color=Cyan>(</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> ppAC attr <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="line-103"></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> ppAC attr 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="line-104"></a>             derives <font color=Cyan>)</font>  <font color=Cyan>$$</font>
+<a name="line-105"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> attr <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> attr <font color=Cyan>$$</font>
+<a name="line-106"></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="line-107"></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="line-108"></a>             text <font color=Magenta>"}"</font> <font color=Cyan>&lt;+&gt;</font> derives <font color=Cyan>)</font>
+<a name="line-109"></a>
+<a name="line-110"></a><font color=Blue>--      enumerations (of attribute values)</font>
+<a name="line-111"></a><font color=Blue>ppTypeDef</font> <font color=Cyan>(</font>EnumDef n es<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-112"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font>
+<a name="line-113"></a>    <font color=Cyan>(</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="line-114"></a>      fsep <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>" | "</font><font color=Cyan>)</font> <font color=Cyan>(</font>map ppHName es<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-115"></a>    <font color=Cyan>$$</font> derives <font color=Cyan>)</font>
+<a name="line-116"></a>
+<a name="line-117"></a>
+<a name="line-118"></a><a name="ppST"></a><font color=Blue>ppST</font> <font color=Red>::</font> StructType <font color=Red>-&gt;</font> Doc
+<a name="line-119"></a><font color=Blue>ppST</font> <font color=Cyan>(</font>Defaultable st <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> parens <font color=Cyan>(</font>text <font color=Magenta>"Defaultable"</font> <font color=Cyan>&lt;+&gt;</font> ppST st<font color=Cyan>)</font>
+<a name="line-120"></a><font color=Blue>ppST</font> <font color=Cyan>(</font>Maybe st<font color=Cyan>)</font>  <font color=Red>=</font> parens <font color=Cyan>(</font>text <font color=Magenta>"Maybe"</font> <font color=Cyan>&lt;+&gt;</font> ppST st<font color=Cyan>)</font>
+<a name="line-121"></a><font color=Blue>ppST</font> <font color=Cyan>(</font>List st<font color=Cyan>)</font>   <font color=Red>=</font> text <font color=Magenta>"["</font> <font color=Cyan>&lt;&gt;</font> ppST st <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"]"</font>
+<a name="line-122"></a><font color=Blue>ppST</font> <font color=Cyan>(</font>List1 st<font color=Cyan>)</font>  <font color=Red>=</font> parens <font color=Cyan>(</font>text <font color=Magenta>"List1"</font> <font color=Cyan>&lt;+&gt;</font> ppST st<font color=Cyan>)</font>
+<a name="line-123"></a><font color=Blue>ppST</font> <font color=Cyan>(</font>Tuple sts<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>commaList <font color=Cyan>(</font>map ppST sts<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-124"></a><font color=Blue>ppST</font> <font color=Cyan>(</font>OneOf sts<font color=Cyan>)</font> <font color=Red>=</font> parens <font color=Cyan>(</font>text <font color=Magenta>"OneOf"</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show <font color=Cyan>(</font>length sts<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="line-125"></a>                           hsep <font color=Cyan>(</font>map ppST sts<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-126"></a><font color=Blue>ppST</font>  String     <font color=Red>=</font> text <font color=Magenta>"String"</font>
+<a name="line-127"></a><font color=Blue>ppST</font>  Any        <font color=Red>=</font> text <font color=Magenta>"ANYContent"</font>
+<a name="line-128"></a><font color=Blue>ppST</font> <font color=Cyan>(</font>Defined n<font color=Cyan>)</font> <font color=Red>=</font> ppHName n
+<a name="line-129"></a>
+<a name="line-130"></a><a name="ppC"></a><font color=Blue>-- constructor and components</font>
+<a name="line-131"></a><font color=Blue>ppC</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>-&gt;</font> Doc
+<a name="line-132"></a><font color=Blue>ppC</font> <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font> ppHName n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map ppST sts<font color=Cyan>)</font>
+<a name="line-133"></a>
+<a name="line-134"></a><a name="ppF"></a><font color=Blue>-- attribute (fieldname and type)</font>
+<a name="line-135"></a><font color=Blue>ppF</font> <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="line-136"></a><font color=Blue>ppF</font> <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font> ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"::"</font> <font color=Cyan>&lt;+&gt;</font> ppST st
+<a name="line-137"></a>
+<a name="line-138"></a><a name="ppAC"></a><font color=Blue>-- constructor and components with initial attr-type</font>
+<a name="line-139"></a><font color=Blue>ppAC</font> <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="line-140"></a><font color=Blue>ppAC</font> atype <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font> ppHName n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>atype<font color=Red><b>:</b></font> map ppST sts<font color=Cyan>)</font>
+<a name="line-141"></a>
+<a name="line-142"></a><a name="ppHName"></a><font color=Blue>-- | Pretty print Haskell name.</font>
+<a name="line-143"></a><font color=Blue>ppHName</font> <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc
+<a name="line-144"></a><font color=Blue>ppHName</font> <font color=Cyan>(</font>Name <font color=Green><u>_</u></font> s<font color=Cyan>)</font> <font color=Red>=</font> text s
+<a name="line-145"></a><a name="ppXName"></a><font color=Blue>-- | Pretty print XML name.</font>
+<a name="line-146"></a><font color=Blue>ppXName</font> <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc
+<a name="line-147"></a><font color=Blue>ppXName</font> <font color=Cyan>(</font>Name s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> text s
+<a name="line-148"></a><a name="ppAName"></a><font color=Blue>-- | Pretty print Haskell attributes name.</font>
+<a name="line-149"></a><font color=Blue>ppAName</font> <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc
+<a name="line-150"></a><font color=Blue>ppAName</font> <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="line-151"></a>
+<a name="line-152"></a><a name="derives"></a><font color=Blue>derives</font> <font color=Red>::</font> Doc
+<a name="line-153"></a><font color=Blue>derives</font> <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="line-154"></a>
+<a name="line-155"></a>
+<a name="line-156"></a><font color=Blue>---- Some operations on Names ----</font>
+<a name="line-157"></a>
+<a name="line-158"></a><a name="name"></a><font color=Blue>-- | Make a type name valid in both XML and Haskell.</font>
+<a name="line-159"></a><font color=Blue>name</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> Name
+<a name="line-160"></a><font color=Blue>name</font> n     <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
+<a name="line-161"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> mangle n <font color=Cyan>}</font>
+<a name="line-162"></a>
+<a name="line-163"></a><a name="name_"></a><font color=Blue>-- | Append an underscore to the Haskell version of the name.</font>
+<a name="line-164"></a><font color=Blue>name_</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> Name
+<a name="line-165"></a><font color=Blue>name_</font> n    <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
+<a name="line-166"></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="line-167"></a>
+<a name="line-168"></a><a name="name_a"></a><font color=Blue>-- | Prefix an attribute enumeration type name with its containing element</font>
+<a name="line-169"></a><font color=Blue>--   name.</font>
+<a name="line-170"></a><font color=Blue>name_a</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Name
+<a name="line-171"></a><font color=Blue>name_a</font> e n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
+<a name="line-172"></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="line-173"></a>
+<a name="line-174"></a><a name="name_ac"></a><font color=Blue>-- | Prefix an attribute enumeration constructor with its element-tag name,</font>
+<a name="line-175"></a><font color=Blue>--   and its enumeration type name.</font>
+<a name="line-176"></a><font color=Blue>name_ac</font> <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="line-177"></a><font color=Blue>name_ac</font> e t n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
+<a name="line-178"></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="line-179"></a>                                        <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify n <font color=Cyan>}</font>
+<a name="line-180"></a>
+<a name="line-181"></a><a name="name_f"></a><font color=Blue>-- | Prefix a field name with its enclosing element name.</font>
+<a name="line-182"></a><font color=Blue>name_f</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Name
+<a name="line-183"></a><font color=Blue>name_f</font> e n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n
+<a name="line-184"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> manglef e <font color=Cyan>++</font> mangle n <font color=Cyan>}</font>
+<a name="line-185"></a>
+<a name="line-186"></a><font color=Blue>---- obsolete</font>
+<a name="line-187"></a><font color=Blue>-- elementname_at :: String -&gt; Name</font>
+<a name="line-188"></a><font color=Blue>-- elementname_at n  = Name n (mangle n ++ "_Attrs")</font>
+<a name="line-189"></a>
+<a name="line-190"></a><a name="mangle"></a><font color=Blue>-- | Convert an XML name to a Haskell conid.</font>
+<a name="line-191"></a><font color=Blue>mangle</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String
+<a name="line-192"></a><font color=Blue>mangle</font> <font color=Cyan>(</font>n<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
+<a name="line-193"></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="line-194"></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="line-195"></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="line-196"></a>
+<a name="line-197"></a><a name="notPrelude"></a><font color=Blue>-- | Ensure a generated name does not conflict with a standard haskell one.</font>
+<a name="line-198"></a><font color=Blue>notPrelude</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String
+<a name="line-199"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Bool"</font>    <font color=Red>=</font> <font color=Magenta>"ABool"</font>
+<a name="line-200"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Bounded"</font> <font color=Red>=</font> <font color=Magenta>"ABounded"</font>
+<a name="line-201"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Char"</font>    <font color=Red>=</font> <font color=Magenta>"AChar"</font>
+<a name="line-202"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Double"</font>  <font color=Red>=</font> <font color=Magenta>"ADouble"</font>
+<a name="line-203"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Either"</font>  <font color=Red>=</font> <font color=Magenta>"AEither"</font>
+<a name="line-204"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Enum"</font>    <font color=Red>=</font> <font color=Magenta>"AEnum"</font>
+<a name="line-205"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Eq"</font>      <font color=Red>=</font> <font color=Magenta>"AEq"</font>
+<a name="line-206"></a><font color=Blue>notPrelude</font> <font color=Magenta>"FilePath"</font><font color=Red>=</font> <font color=Magenta>"AFilePath"</font>
+<a name="line-207"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Float"</font>   <font color=Red>=</font> <font color=Magenta>"AFloat"</font>
+<a name="line-208"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Floating"</font><font color=Red>=</font> <font color=Magenta>"AFloating"</font>
+<a name="line-209"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Fractional"</font><font color=Red>=</font> <font color=Magenta>"AFractional"</font>
+<a name="line-210"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Functor"</font> <font color=Red>=</font> <font color=Magenta>"AFunctor"</font>
+<a name="line-211"></a><font color=Blue>notPrelude</font> <font color=Magenta>"IO"</font>      <font color=Red>=</font> <font color=Magenta>"AIO"</font>
+<a name="line-212"></a><font color=Blue>notPrelude</font> <font color=Magenta>"IOError"</font> <font color=Red>=</font> <font color=Magenta>"AIOError"</font>
+<a name="line-213"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Int"</font>     <font color=Red>=</font> <font color=Magenta>"AInt"</font>
+<a name="line-214"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Integer"</font> <font color=Red>=</font> <font color=Magenta>"AInteger"</font>
+<a name="line-215"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Integral"</font><font color=Red>=</font> <font color=Magenta>"AIntegral"</font>
+<a name="line-216"></a><font color=Blue>notPrelude</font> <font color=Magenta>"List1"</font>   <font color=Red>=</font> <font color=Magenta>"AList1"</font> <font color=Blue>-- part of HaXml</font>
+<a name="line-217"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Maybe"</font>   <font color=Red>=</font> <font color=Magenta>"AMaybe"</font>
+<a name="line-218"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Monad"</font>   <font color=Red>=</font> <font color=Magenta>"AMonad"</font>
+<a name="line-219"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Num"</font>     <font color=Red>=</font> <font color=Magenta>"ANum"</font>
+<a name="line-220"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Ord"</font>     <font color=Red>=</font> <font color=Magenta>"AOrd"</font>
+<a name="line-221"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Ordering"</font><font color=Red>=</font> <font color=Magenta>"AOrdering"</font>
+<a name="line-222"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Rational"</font><font color=Red>=</font> <font color=Magenta>"ARational"</font>
+<a name="line-223"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Read"</font>    <font color=Red>=</font> <font color=Magenta>"ARead"</font>
+<a name="line-224"></a><font color=Blue>notPrelude</font> <font color=Magenta>"ReadS"</font>   <font color=Red>=</font> <font color=Magenta>"AReadS"</font>
+<a name="line-225"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Real"</font>    <font color=Red>=</font> <font color=Magenta>"AReal"</font>
+<a name="line-226"></a><font color=Blue>notPrelude</font> <font color=Magenta>"RealFloat"</font> <font color=Red>=</font> <font color=Magenta>"ARealFloat"</font>
+<a name="line-227"></a><font color=Blue>notPrelude</font> <font color=Magenta>"RealFrac"</font><font color=Red>=</font> <font color=Magenta>"ARealFrac"</font>
+<a name="line-228"></a><font color=Blue>notPrelude</font> <font color=Magenta>"Show"</font>    <font color=Red>=</font> <font color=Magenta>"AShow"</font>
+<a name="line-229"></a><font color=Blue>notPrelude</font> <font color=Magenta>"ShowS"</font>   <font color=Red>=</font> <font color=Magenta>"AShowS"</font>
+<a name="line-230"></a><font color=Blue>notPrelude</font> <font color=Magenta>"String"</font>  <font color=Red>=</font> <font color=Magenta>"AString"</font>
+<a name="line-231"></a><font color=Blue>notPrelude</font> n         <font color=Red>=</font> n
+<a name="line-232"></a>
+<a name="line-233"></a><a name="manglef"></a><font color=Blue>-- | Convert an XML name to a Haskell varid.</font>
+<a name="line-234"></a><font color=Blue>manglef</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String
+<a name="line-235"></a><font color=Blue>manglef</font> <font color=Cyan>(</font>n<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
+<a name="line-236"></a>    <font color=Red>|</font> isUpper n   <font color=Red>=</font> toLower n<font color=Red><b>:</b></font> map decolonify ns
+<a name="line-237"></a>    <font color=Red>|</font> isDigit n   <font color=Red>=</font> <font color=Magenta>'_'</font><font color=Red><b>:</b></font> n<font color=Red><b>:</b></font> map decolonify ns
+<a name="line-238"></a>    <font color=Red>|</font> otherwise   <font color=Red>=</font> n<font color=Red><b>:</b></font> map decolonify ns
+<a name="line-239"></a>
+<a name="line-240"></a><a name="decolonify"></a><font color=Blue>-- | Convert colon to prime, hyphen to underscore.</font>
+<a name="line-241"></a><font color=Blue>decolonify</font> <font color=Red>::</font> Char <font color=Red>-&gt;</font> Char
+<a name="line-242"></a><font color=Blue>decolonify</font> <font color=Magenta>':'</font> <font color=Red>=</font> <font color=Magenta>'\''</font>   <font color=Blue>-- TODO: turn namespaces into qualified identifiers</font>
+<a name="line-243"></a><font color=Blue>decolonify</font> <font color=Magenta>'-'</font> <font color=Red>=</font> <font color=Magenta>'_'</font>
+<a name="line-244"></a><font color=Blue>decolonify</font> <font color=Magenta>'.'</font> <font color=Red>=</font> <font color=Magenta>'_'</font>
+<a name="line-245"></a><font color=Blue>decolonify</font>  c  <font color=Red>=</font> c
+<a name="line-246"></a>
+<a name="line-247"></a><a name="commaList"></a><font color=Blue>commaList</font> <font color=Red>::</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc
+<a name="line-248"></a><font color=Blue>commaList</font> <font color=Red>=</font> hcat <font color=Cyan>.</font> intersperse comma
 </pre>
+</body>
 </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,295 +1,301 @@
 <!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="(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
-<a name="(line6)"></a>       which is also the appropriate XML terminating character, for example
-<a name="(line7)"></a>       when an attribute includes a double quote.
-<a name="(line8)"></a>   (2) representing XML which contains non-ASCII characters as ASCII.
-<a name="(line9)"></a>   -}</font>
-<a name="(line10)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Escape<font color=Cyan>(</font>
-<a name="(line11)"></a>   xmlEscape<font color=Cyan>,</font>
-<a name="(line12)"></a>      <font color=Blue>-- :: XmlEscaper -&gt; Element i -&gt; Element i</font>
-<a name="(line13)"></a>   xmlUnEscape<font color=Cyan>,</font>
-<a name="(line14)"></a>      <font color=Blue>-- :: XmlEscaper -&gt; Element i -&gt; Element i</font>
-<a name="(line15)"></a>   xmlEscapeContent<font color=Cyan>,</font>
-<a name="(line16)"></a>      <font color=Blue>-- :: XmlEscaper -&gt; [Content i] -&gt; [Content i]</font>
-<a name="(line17)"></a>   xmlUnEscapeContent<font color=Cyan>,</font>
-<a name="(line18)"></a>      <font color=Blue>-- :: XmlEscaper -&gt; [Content i] -&gt; [Content i]</font>
-<a name="(line19)"></a>
-<a name="(line20)"></a>   XmlEscaper<font color=Cyan>,</font>
-<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="(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>
-<a name="(line28)"></a>   mkXmlEscaper<font color=Cyan>,</font>
-<a name="(line29)"></a>      <font color=Blue>-- :: [(Char,String)] -&gt; (Char -&gt; Bool) -&gt; XmlEscaper</font>
-<a name="(line30)"></a>      <font color=Blue>-- The first argument contains a list of characters, with their</font>
-<a name="(line31)"></a>      <font color=Blue>--    corresponding character reference names.</font>
-<a name="(line32)"></a>      <font color=Blue>--    For example [('\60',"lt"),('\62',"gt"),('\38',"amp"),</font>
-<a name="(line33)"></a>      <font color=Blue>--       ('\39',"apos"),('\34',"quot")] will give you the "standard"</font>
-<a name="(line34)"></a>      <font color=Blue>--       XML escapes listed in section 4.6 of the XML standard, so that</font>
-<a name="(line35)"></a>      <font color=Blue>--       "&amp;quot;" will automatically get translated into a double</font>
-<a name="(line36)"></a>      <font color=Blue>--       quotation mark.</font>
-<a name="(line37)"></a>      <font color=Blue>--</font>
-<a name="(line38)"></a>      <font color=Blue>--       It's the caller's responsibility to see that the reference</font>
-<a name="(line39)"></a>      <font color=Blue>--       names ("lt","gt","amp","apos" and "quot" in the above example)</font>
-<a name="(line40)"></a>      <font color=Blue>--       are valid XML reference names.  A sequence of letters, digits,</font>
-<a name="(line41)"></a>      <font color=Blue>--       "." or ":" characters should be fine so long as the first one</font>
-<a name="(line42)"></a>      <font color=Blue>--       isn't a digit.</font>
-<a name="(line43)"></a>      <font color=Blue>--</font>
-<a name="(line44)"></a>      <font color=Blue>-- The second argument is a function applied to each text character.</font>
-<a name="(line45)"></a>      <font color=Blue>--    If it returns True, that means we should escape this character.</font>
-<a name="(line46)"></a>
-<a name="(line47)"></a>      <font color=Blue>-- Policy: on escaping, we expand all characters for which the</font>
-<a name="(line48)"></a>      <font color=Blue>-- (Char -&gt; Bool) function returns True, either giving the corresponding</font>
-<a name="(line49)"></a>      <font color=Blue>-- character reference name if one was supplied, or else using a</font>
-<a name="(line50)"></a>      <font color=Blue>-- hexadecimal CharRef.</font>
-<a name="(line51)"></a>      <font color=Blue>--</font>
-<a name="(line52)"></a>      <font color=Blue>-- on unescaping, we translate all the references we understand</font>
-<a name="(line53)"></a>      <font color=Blue>--   (hexadecimal,decimal, and the ones in the [(Char,String)] list,</font>
-<a name="(line54)"></a>      <font color=Blue>--   and leave the others alone.</font>
-<a name="(line55)"></a>
-<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=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>
-<a name="(line63)"></a><font color=Blue>-- emulate older finite map interface using Data.Map, if it is available</font>
-<a name="(line64)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Data<font color=Cyan>.</font>Map <font color=Green><u>as</u></font> Map
-<a name="(line65)"></a><a name="FiniteMap"></a><font color=Green><u>type</u></font> FiniteMap a b <font color=Red>=</font> Map<font color=Cyan>.</font>Map a b
-<a name="(line66)"></a><a name="listToFM"></a>listToFM <font color=Red>::</font> Ord a <font color=Red>=&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> FiniteMap a b
-<a name="(line67)"></a>listToFM <font color=Red>=</font> Map<font color=Cyan>.</font>fromList
-<a name="(line68)"></a><a name="lookupFM"></a>lookupFM <font color=Red>::</font> Ord a <font color=Red>=&gt;</font> FiniteMap a b <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Maybe b
-<a name="(line69)"></a>lookupFM <font color=Red>=</font> flip Map<font color=Cyan>.</font>lookup
-<a name="(line70)"></a><font color=Magenta><em>#elif __GLASGOW_HASKELL__ &gt;= 504 || __NHC__ &gt; 114</em></font>
-<a name="(line71)"></a><font color=Blue>-- real finite map, if it is available</font>
-<a name="(line72)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>FiniteMap
-<a name="(line73)"></a><font color=Magenta><em>#else</em></font>
-<a name="(line74)"></a><a name="FiniteMap"></a><font color=Blue>-- otherwise, a very simple and inefficient implementation of a finite map</font>
-<a name="(line75)"></a><a name="FiniteMap"></a><font color=Green><u>type</u></font> FiniteMap a b <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line76)"></a>listToFM <font color=Red>::</font> Eq a <font color=Red>=&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> FiniteMap a b
-<a name="(line77)"></a>listToFM <font color=Red>=</font> id
-<a name="(line78)"></a>lookupFM <font color=Red>::</font> Eq a <font color=Red>=&gt;</font> FiniteMap a b <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Maybe b
-<a name="(line79)"></a>lookupFM fm k <font color=Red>=</font> lookup k fm
-<a name="(line80)"></a><font color=Magenta><em>#endif</em></font>
-<a name="(line81)"></a>
-<a name="(line82)"></a>
-<a name="(line83)"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
-<a name="(line84)"></a><font color=Blue>-- Data types</font>
-<a name="(line85)"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
-<a name="(line86)"></a>
-<a name="(line87)"></a><a name="XmlEscaper"></a><font color=Green><u>data</u></font> XmlEscaper <font color=Red>=</font> XmlEscaper <font color=Cyan>{</font>
-<a name="(line88)"></a>   toEscape <font color=Red>::</font> FiniteMap Char String<font color=Cyan>,</font>
-<a name="(line89)"></a>   fromEscape <font color=Red>::</font> FiniteMap String Char<font color=Cyan>,</font>
-<a name="(line90)"></a>   isEscape <font color=Red>::</font> Char <font color=Red>-&gt;</font> Bool
-<a name="(line91)"></a>   <font color=Cyan>}</font>
-<a name="(line92)"></a>
-<a name="(line93)"></a>
-<a name="(line94)"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
-<a name="(line95)"></a><font color=Blue>-- Escaping</font>
-<a name="(line96)"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
-<a name="(line97)"></a>
-<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="(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="(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="(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>
-<a name="(line114)"></a>escapeAttributes xmlEscaper atts <font color=Red>=</font>
-<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="(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="(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 <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="(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="(line135)"></a>               <font color=Cyan>)</font>
-<a name="(line136)"></a>            attValList
-<a name="(line137)"></a>         <font color=Cyan>)</font>
-<a name="(line138)"></a>      <font color=Cyan>)</font>
-<a name="(line139)"></a>
-<a name="(line140)"></a><a name="escapeContent"></a>escapeContent <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="(line141)"></a>escapeContent xmlEscaper contents <font color=Red>=</font>
-<a name="(line142)"></a>   concat
-<a name="(line143)"></a>      <font color=Cyan>(</font>map
-<a name="(line144)"></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="(line145)"></a>             <font color=Cyan>(</font>CString b str i<font color=Cyan>)</font> <font color=Red>-&gt;</font>
-<a name="(line146)"></a>                map
-<a name="(line147)"></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="(line148)"></a>                      <font color=Green><u>then</u></font>
-<a name="(line149)"></a>                         CRef <font color=Cyan>(</font>mkEscape xmlEscaper c<font color=Cyan>)</font> i
-<a name="(line150)"></a>                      <font color=Green><u>else</u></font>
-<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 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="(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=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>
-<a name="(line171)"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
-<a name="(line172)"></a>
-<a name="(line173)"></a><a name="xmlUnEscape"></a>xmlUnEscape <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> Element i
-<a name="(line174)"></a>xmlUnEscape xmlEscaper element <font color=Red>=</font>
-<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="(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
-<a name="(line182)"></a>unEscapeElement xmlEscaper <font color=Cyan>(</font>Elem name attributes content<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line183)"></a>   Elem name <font color=Cyan>(</font>unEscapeAttributes xmlEscaper attributes<font color=Cyan>)</font>
-<a name="(line184)"></a>      <font color=Cyan>(</font>unEscapeContent xmlEscaper content<font color=Cyan>)</font>
-<a name="(line185)"></a>
-<a name="(line186)"></a><a name="unEscapeAttributes"></a>unEscapeAttributes <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>
-<a name="(line187)"></a>unEscapeAttributes xmlEscaper atts <font color=Red>=</font>
-<a name="(line188)"></a>   map
-<a name="(line189)"></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>unEscapeAttValue xmlEscaper av<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line190)"></a>      atts
-<a name="(line191)"></a>
-<a name="(line192)"></a><a name="unEscapeAttValue"></a>unEscapeAttValue <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> AttValue <font color=Red>-&gt;</font> AttValue
-<a name="(line193)"></a>unEscapeAttValue xmlEscaper <font color=Cyan>(</font>AttValue attValList<font color=Cyan>)</font> <font color=Red>=</font>
-<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 <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
-<a name="(line201)"></a>            <font color=Cyan>)</font>
-<a name="(line202)"></a>         attValList
-<a name="(line203)"></a>      <font color=Cyan>)</font>
-<a name="(line204)"></a>
-<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> 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> 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>
-<a name="(line217)"></a><a name="unEscapeChar"></a>unEscapeChar <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Reference <font color=Red>-&gt;</font> Maybe Char
-<a name="(line218)"></a>unEscapeChar xmlEscaper ref <font color=Red>=</font>
-<a name="(line219)"></a>   <font color=Green><u>case</u></font> ref <font color=Green><u>of</u></font>
-<a name="(line220)"></a>      RefChar i      <font color=Red>-&gt;</font> Just <font color=Cyan>(</font>chr i<font color=Cyan>)</font>
-<a name="(line221)"></a>      RefEntity name <font color=Red>-&gt;</font> lookupFM <font color=Cyan>(</font>fromEscape xmlEscaper<font color=Cyan>)</font> name
-<a name="(line222)"></a>
-<a name="(line223)"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
-<a name="(line224)"></a><font color=Blue>-- After escaping and unescaping we rebuild the lists, compressing</font>
-<a name="(line225)"></a><font color=Blue>-- adjacent identical character data.</font>
-<a name="(line226)"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
-<a name="(line227)"></a>
-<a name="(line228)"></a><a name="compressElement"></a>compressElement <font color=Red>::</font> Element i <font color=Red>-&gt;</font> Element i
-<a name="(line229)"></a>compressElement <font color=Cyan>(</font>Elem name attributes content<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line230)"></a>   Elem name <font color=Cyan>(</font>compressAttributes attributes<font color=Cyan>)</font> <font color=Cyan>(</font>compressContent content<font color=Cyan>)</font>
-<a name="(line231)"></a>
-<a name="(line232)"></a><a name="compressAttributes"></a>compressAttributes <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font>AttValue<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font>AttValue<font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line233)"></a>compressAttributes atts <font color=Red>=</font>
-<a name="(line234)"></a>   map
-<a name="(line235)"></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>compressAttValue av<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line236)"></a>      atts
-<a name="(line237)"></a>
-<a name="(line238)"></a><a name="compressAttValue"></a>compressAttValue <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> AttValue
-<a name="(line239)"></a>compressAttValue <font color=Cyan>(</font>AttValue l<font color=Cyan>)</font> <font color=Red>=</font> AttValue <font color=Cyan>(</font>compress l<font color=Cyan>)</font>
-<a name="(line240)"></a>   <font color=Green><u>where</u></font>
-<a name="(line241)"></a>      compress <font color=Red>::</font> <font color=Red>[</font>Either String Reference<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Either String Reference<font color=Red>]</font>
-<a name="(line242)"></a>      compress [] <font color=Red>=</font> []
-<a name="(line243)"></a>      compress <font color=Cyan>(</font>Right ref <font color=Red><b>:</b></font> es<font color=Cyan>)</font> <font color=Red>=</font> Right ref <font color=Red><b>:</b></font> <font color=Cyan>(</font>compress es<font color=Cyan>)</font>
-<a name="(line244)"></a>      compress <font color=Cyan>(</font> <font color=Cyan>(</font>ls <font color=Red>@</font> <font color=Cyan>(</font>Left s1<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red><b>:</b></font> es<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line245)"></a>         <font color=Green><u>case</u></font> compress es <font color=Green><u>of</u></font>
-<a name="(line246)"></a>            <font color=Cyan>(</font>Left s2 <font color=Red><b>:</b></font> es2<font color=Cyan>)</font> <font color=Red>-&gt;</font> Left <font color=Cyan>(</font>s1 <font color=Cyan>++</font> s2<font color=Cyan>)</font> <font color=Red><b>:</b></font> es2
-<a name="(line247)"></a>            es2 <font color=Red>-&gt;</font> ls <font color=Red><b>:</b></font> es2
-<a name="(line248)"></a>
-<a name="(line249)"></a><a name="compressContent"></a>compressContent <font color=Red>::</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="(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 <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="(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>
-<a name="(line261)"></a>
-<a name="(line262)"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
-<a name="(line263)"></a><font color=Blue>-- Making XmlEscaper values.</font>
-<a name="(line264)"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
-<a name="(line265)"></a>
-<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="(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>
-<a name="(line273)"></a>         i <font color=Cyan>&lt;</font> <font color=Magenta>10</font> <font color=Cyan>||</font> <font color=Cyan>(</font><font color=Magenta>10</font><font color=Cyan>&lt;</font>i <font color=Cyan>&amp;&amp;</font> i<font color=Cyan>&lt;</font><font color=Magenta>32</font><font color=Cyan>)</font> <font color=Cyan>||</font> i <font color=Cyan>&gt;=</font> <font color=Magenta>127</font> <font color=Cyan>||</font>
-<a name="(line274)"></a>            <font color=Green><u>case</u></font> ch <font color=Green><u>of</u></font>
-<a name="(line275)"></a>               <font color=Magenta>'\''</font> <font color=Red>-&gt;</font> True
-<a name="(line276)"></a>               <font color=Magenta>'\"'</font> <font color=Red>-&gt;</font> True
-<a name="(line277)"></a>               <font color=Magenta>'&amp;'</font> <font color=Red>-&gt;</font> True
-<a name="(line278)"></a>               <font color=Magenta>'&lt;'</font> <font color=Red>-&gt;</font> True
-<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="(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="(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="(line290)"></a>      <font color=Cyan>}</font>
-<a name="(line291)"></a>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Escape.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>{- This module contains code for escaping/unescaping text in attributes
+<a name="line-2"></a>   and elements in the HaXml Element type, replacing characters by character
+<a name="line-3"></a>   references or vice-versa.  Two uses are envisaged for this:
+<a name="line-4"></a>
+<a name="line-5"></a>   (1) stopping HaXml generating incorrect XML when a character is included
+<a name="line-6"></a>       which is also the appropriate XML terminating character, for example
+<a name="line-7"></a>       when an attribute includes a double quote.
+<a name="line-8"></a>   (2) representing XML which contains non-ASCII characters as ASCII.
+<a name="line-9"></a>   -}</font>
+<a name="line-10"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Escape<font color=Cyan>(</font>
+<a name="line-11"></a>   xmlEscape<font color=Cyan>,</font>
+<a name="line-12"></a>      <font color=Blue>-- :: XmlEscaper -&gt; Element i -&gt; Element i</font>
+<a name="line-13"></a>   xmlUnEscape<font color=Cyan>,</font>
+<a name="line-14"></a>      <font color=Blue>-- :: XmlEscaper -&gt; Element i -&gt; Element i</font>
+<a name="line-15"></a>   xmlEscapeContent<font color=Cyan>,</font>
+<a name="line-16"></a>      <font color=Blue>-- :: XmlEscaper -&gt; [Content i] -&gt; [Content i]</font>
+<a name="line-17"></a>   xmlUnEscapeContent<font color=Cyan>,</font>
+<a name="line-18"></a>      <font color=Blue>-- :: XmlEscaper -&gt; [Content i] -&gt; [Content i]</font>
+<a name="line-19"></a>
+<a name="line-20"></a>   XmlEscaper<font color=Cyan>,</font>
+<a name="line-21"></a>      <font color=Blue>-- Something describing a particular set of escapes.</font>
+<a name="line-22"></a>
+<a name="line-23"></a>   stdXmlEscaper<font color=Cyan>,</font>
+<a name="line-24"></a>      <font color=Blue>-- Standard boilerplate escaper, escaping everything that is</font>
+<a name="line-25"></a>      <font color=Blue>-- nonprintable, non-ASCII, or might conceivably cause problems by</font>
+<a name="line-26"></a>      <font color=Blue>-- parsing XML, for example quotes, &lt; signs, and ampersands.</font>
+<a name="line-27"></a>
+<a name="line-28"></a>   mkXmlEscaper<font color=Cyan>,</font>
+<a name="line-29"></a>      <font color=Blue>-- :: [(Char,String)] -&gt; (Char -&gt; Bool) -&gt; XmlEscaper</font>
+<a name="line-30"></a>      <font color=Blue>-- The first argument contains a list of characters, with their</font>
+<a name="line-31"></a>      <font color=Blue>--    corresponding character reference names.</font>
+<a name="line-32"></a>      <font color=Blue>--    For example [('\60',"lt"),('\62',"gt"),('\38',"amp"),</font>
+<a name="line-33"></a>      <font color=Blue>--       ('\39',"apos"),('\34',"quot")] will give you the "standard"</font>
+<a name="line-34"></a>      <font color=Blue>--       XML escapes listed in section 4.6 of the XML standard, so that</font>
+<a name="line-35"></a>      <font color=Blue>--       "&amp;quot;" will automatically get translated into a double</font>
+<a name="line-36"></a>      <font color=Blue>--       quotation mark.</font>
+<a name="line-37"></a>      <font color=Blue>--</font>
+<a name="line-38"></a>      <font color=Blue>--       It's the caller's responsibility to see that the reference</font>
+<a name="line-39"></a>      <font color=Blue>--       names ("lt","gt","amp","apos" and "quot" in the above example)</font>
+<a name="line-40"></a>      <font color=Blue>--       are valid XML reference names.  A sequence of letters, digits,</font>
+<a name="line-41"></a>      <font color=Blue>--       "." or ":" characters should be fine so long as the first one</font>
+<a name="line-42"></a>      <font color=Blue>--       isn't a digit.</font>
+<a name="line-43"></a>      <font color=Blue>--</font>
+<a name="line-44"></a>      <font color=Blue>-- The second argument is a function applied to each text character.</font>
+<a name="line-45"></a>      <font color=Blue>--    If it returns True, that means we should escape this character.</font>
+<a name="line-46"></a>
+<a name="line-47"></a>      <font color=Blue>-- Policy: on escaping, we expand all characters for which the</font>
+<a name="line-48"></a>      <font color=Blue>-- (Char -&gt; Bool) function returns True, either giving the corresponding</font>
+<a name="line-49"></a>      <font color=Blue>-- character reference name if one was supplied, or else using a</font>
+<a name="line-50"></a>      <font color=Blue>-- hexadecimal CharRef.</font>
+<a name="line-51"></a>      <font color=Blue>--</font>
+<a name="line-52"></a>      <font color=Blue>-- on unescaping, we translate all the references we understand</font>
+<a name="line-53"></a>      <font color=Blue>--   (hexadecimal,decimal, and the ones in the [(Char,String)] list,</font>
+<a name="line-54"></a>      <font color=Blue>--   and leave the others alone.</font>
+<a name="line-55"></a>
+<a name="line-56"></a>   <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-57"></a>
+<a name="line-58"></a><font color=Green><u>import</u></font> Char
+<a name="line-59"></a><font color=Blue>-- import Numeric</font>
+<a name="line-60"></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="line-61"></a>
+<a name="line-62"></a><font color=Magenta><em>#if __GLASGOW_HASKELL__ &gt;= 604 || __NHC__ &gt;= 118 || defined(__HUGS__)</em></font>
+<a name="line-63"></a><font color=Blue>-- emulate older finite map interface using Data.Map, if it is available</font>
+<a name="line-64"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Data<font color=Cyan>.</font>Map <font color=Green><u>as</u></font> Map
+<a name="line-65"></a><a name="FiniteMap"></a><font color=Green><u>type</u></font> FiniteMap a b <font color=Red>=</font> Map<font color=Cyan>.</font>Map a b
+<a name="line-66"></a><a name="listToFM"></a><font color=Blue>listToFM</font> <font color=Red>::</font> Ord a <font color=Red>=&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> FiniteMap a b
+<a name="line-67"></a><font color=Blue>listToFM</font> <font color=Red>=</font> Map<font color=Cyan>.</font>fromList
+<a name="line-68"></a><a name="lookupFM"></a><font color=Blue>lookupFM</font> <font color=Red>::</font> Ord a <font color=Red>=&gt;</font> FiniteMap a b <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Maybe b
+<a name="line-69"></a><font color=Blue>lookupFM</font> <font color=Red>=</font> flip Map<font color=Cyan>.</font>lookup
+<a name="line-70"></a><font color=Magenta><em>#elif __GLASGOW_HASKELL__ &gt;= 504 || __NHC__ &gt; 114</em></font>
+<a name="line-71"></a><font color=Blue>-- real finite map, if it is available</font>
+<a name="line-72"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>FiniteMap
+<a name="line-73"></a><font color=Magenta><em>#else</em></font>
+<a name="line-74"></a><a name="FiniteMap"></a><font color=Blue>-- otherwise, a very simple and inefficient implementation of a finite map</font>
+<a name="line-75"></a><a name="FiniteMap"></a><font color=Green><u>type</u></font> FiniteMap a b <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-76"></a><font color=Blue>listToFM</font> <font color=Red>::</font> Eq a <font color=Red>=&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> FiniteMap a b
+<a name="line-77"></a><font color=Blue>listToFM</font> <font color=Red>=</font> id
+<a name="line-78"></a><font color=Blue>lookupFM</font> <font color=Red>::</font> Eq a <font color=Red>=&gt;</font> FiniteMap a b <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Maybe b
+<a name="line-79"></a><font color=Blue>lookupFM</font> fm k <font color=Red>=</font> lookup k fm
+<a name="line-80"></a><font color=Magenta><em>#endif</em></font>
+<a name="line-81"></a>
+<a name="line-82"></a>
+<a name="line-83"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
+<a name="line-84"></a><font color=Blue>-- Data types</font>
+<a name="line-85"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
+<a name="line-86"></a>
+<a name="line-87"></a><a name="XmlEscaper"></a><font color=Green><u>data</u></font> XmlEscaper <font color=Red>=</font> XmlEscaper <font color=Cyan>{</font>
+<a name="line-88"></a>   toEscape <font color=Red>::</font> FiniteMap Char String<font color=Cyan>,</font>
+<a name="line-89"></a>   fromEscape <font color=Red>::</font> FiniteMap String Char<font color=Cyan>,</font>
+<a name="line-90"></a>   isEscape <font color=Red>::</font> Char <font color=Red>-&gt;</font> Bool
+<a name="line-91"></a>   <font color=Cyan>}</font>
+<a name="line-92"></a>
+<a name="line-93"></a>
+<a name="line-94"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
+<a name="line-95"></a><font color=Blue>-- Escaping</font>
+<a name="line-96"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
+<a name="line-97"></a>
+<a name="line-98"></a>
+<a name="line-99"></a>
+<a name="line-100"></a><a name="xmlEscape"></a><font color=Blue>xmlEscape</font> <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> Element i
+<a name="line-101"></a><font color=Blue>xmlEscape</font> xmlEscaper element <font color=Red>=</font>
+<a name="line-102"></a>   compressElement <font color=Cyan>(</font>escapeElement xmlEscaper element<font color=Cyan>)</font>
+<a name="line-103"></a>
+<a name="line-104"></a><a name="xmlEscapeContent"></a><font color=Blue>xmlEscapeContent</font> <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="line-105"></a><font color=Blue>xmlEscapeContent</font> xmlEscaper cs <font color=Red>=</font>
+<a name="line-106"></a>   compressContent <font color=Cyan>(</font>escapeContent xmlEscaper cs<font color=Cyan>)</font>
+<a name="line-107"></a>
+<a name="line-108"></a><a name="escapeElement"></a><font color=Blue>escapeElement</font> <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> Element i
+<a name="line-109"></a><font color=Blue>escapeElement</font> xmlEscaper <font color=Cyan>(</font>Elem name attributes content<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-110"></a>   Elem name <font color=Cyan>(</font>escapeAttributes xmlEscaper attributes<font color=Cyan>)</font>
+<a name="line-111"></a>      <font color=Cyan>(</font>escapeContent xmlEscaper content<font color=Cyan>)</font>
+<a name="line-112"></a>
+<a name="line-113"></a><a name="escapeAttributes"></a><font color=Blue>escapeAttributes</font> <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>
+<a name="line-114"></a><font color=Blue>escapeAttributes</font> xmlEscaper atts <font color=Red>=</font>
+<a name="line-115"></a>   map
+<a name="line-116"></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="line-117"></a>      atts
+<a name="line-118"></a>
+<a name="line-119"></a><a name="escapeAttValue"></a><font color=Blue>escapeAttValue</font> <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> AttValue <font color=Red>-&gt;</font> AttValue
+<a name="line-120"></a><font color=Blue>escapeAttValue</font> xmlEscaper <font color=Cyan>(</font>AttValue attValList<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-121"></a>   AttValue <font color=Cyan>(</font>
+<a name="line-122"></a>      concat <font color=Cyan>(</font>
+<a name="line-123"></a>         map
+<a name="line-124"></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="line-125"></a>               Right <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Red>[</font>av<font color=Red>]</font>
+<a name="line-126"></a>               Left s <font color=Red>-&gt;</font>
+<a name="line-127"></a>                  map
+<a name="line-128"></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="line-129"></a>                        <font color=Green><u>then</u></font>
+<a name="line-130"></a>                           Right <font color=Cyan>(</font>mkEscape xmlEscaper c<font color=Cyan>)</font>
+<a name="line-131"></a>                        <font color=Green><u>else</u></font>
+<a name="line-132"></a>                           Left <font color=Red>[</font>c<font color=Red>]</font>
+<a name="line-133"></a>                        <font color=Cyan>)</font>
+<a name="line-134"></a>                     s
+<a name="line-135"></a>               <font color=Cyan>)</font>
+<a name="line-136"></a>            attValList
+<a name="line-137"></a>         <font color=Cyan>)</font>
+<a name="line-138"></a>      <font color=Cyan>)</font>
+<a name="line-139"></a>
+<a name="line-140"></a><a name="escapeContent"></a><font color=Blue>escapeContent</font> <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="line-141"></a><font color=Blue>escapeContent</font> xmlEscaper contents <font color=Red>=</font>
+<a name="line-142"></a>   concat
+<a name="line-143"></a>      <font color=Cyan>(</font>map
+<a name="line-144"></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="line-145"></a>             <font color=Cyan>(</font>CString b str i<font color=Cyan>)</font> <font color=Red>-&gt;</font>
+<a name="line-146"></a>                map
+<a name="line-147"></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="line-148"></a>                      <font color=Green><u>then</u></font>
+<a name="line-149"></a>                         CRef <font color=Cyan>(</font>mkEscape xmlEscaper c<font color=Cyan>)</font> i
+<a name="line-150"></a>                      <font color=Green><u>else</u></font>
+<a name="line-151"></a>                         CString b <font color=Red>[</font>c<font color=Red>]</font> i
+<a name="line-152"></a>                      <font color=Cyan>)</font>
+<a name="line-153"></a>                   str
+<a name="line-154"></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="line-155"></a>             <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Red>[</font>content<font color=Red>]</font>
+<a name="line-156"></a>             <font color=Cyan>)</font>
+<a name="line-157"></a>          contents
+<a name="line-158"></a>          <font color=Cyan>)</font>
+<a name="line-159"></a>
+<a name="line-160"></a><a name="mkEscape"></a><font color=Blue>mkEscape</font> <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Char <font color=Red>-&gt;</font> Reference
+<a name="line-161"></a><font color=Blue>mkEscape</font> <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="line-162"></a>   <font color=Green><u>case</u></font> lookupFM toescape ch <font color=Green><u>of</u></font>
+<a name="line-163"></a>      Nothing  <font color=Red>-&gt;</font> RefChar <font color=Cyan>(</font>ord ch<font color=Cyan>)</font>
+<a name="line-164"></a>      Just str <font color=Red>-&gt;</font> RefEntity str
+<a name="line-165"></a><font color=Blue>--    where</font>
+<a name="line-166"></a><font color=Blue>--       _ = showIntAtBase 16 intToDigit</font>
+<a name="line-167"></a><font color=Blue>--       -- It should be, but in GHC it isn't.</font>
+<a name="line-168"></a>
+<a name="line-169"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
+<a name="line-170"></a><font color=Blue>-- Unescaping</font>
+<a name="line-171"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
+<a name="line-172"></a>
+<a name="line-173"></a><a name="xmlUnEscape"></a><font color=Blue>xmlUnEscape</font> <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> Element i
+<a name="line-174"></a><font color=Blue>xmlUnEscape</font> xmlEscaper element <font color=Red>=</font>
+<a name="line-175"></a>   compressElement <font color=Cyan>(</font>unEscapeElement xmlEscaper element<font color=Cyan>)</font>
+<a name="line-176"></a>
+<a name="line-177"></a><a name="xmlUnEscapeContent"></a><font color=Blue>xmlUnEscapeContent</font> <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="line-178"></a><font color=Blue>xmlUnEscapeContent</font> xmlEscaper cs <font color=Red>=</font>
+<a name="line-179"></a>   compressContent <font color=Cyan>(</font>unEscapeContent xmlEscaper cs<font color=Cyan>)</font>
+<a name="line-180"></a>
+<a name="line-181"></a><a name="unEscapeElement"></a><font color=Blue>unEscapeElement</font> <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> Element i
+<a name="line-182"></a><font color=Blue>unEscapeElement</font> xmlEscaper <font color=Cyan>(</font>Elem name attributes content<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-183"></a>   Elem name <font color=Cyan>(</font>unEscapeAttributes xmlEscaper attributes<font color=Cyan>)</font>
+<a name="line-184"></a>      <font color=Cyan>(</font>unEscapeContent xmlEscaper content<font color=Cyan>)</font>
+<a name="line-185"></a>
+<a name="line-186"></a><a name="unEscapeAttributes"></a><font color=Blue>unEscapeAttributes</font> <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>
+<a name="line-187"></a><font color=Blue>unEscapeAttributes</font> xmlEscaper atts <font color=Red>=</font>
+<a name="line-188"></a>   map
+<a name="line-189"></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>unEscapeAttValue xmlEscaper av<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-190"></a>      atts
+<a name="line-191"></a>
+<a name="line-192"></a><a name="unEscapeAttValue"></a><font color=Blue>unEscapeAttValue</font> <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> AttValue <font color=Red>-&gt;</font> AttValue
+<a name="line-193"></a><font color=Blue>unEscapeAttValue</font> xmlEscaper <font color=Cyan>(</font>AttValue attValList<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-194"></a>   AttValue <font color=Cyan>(</font>
+<a name="line-195"></a>      map
+<a name="line-196"></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="line-197"></a>            Left <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> av
+<a name="line-198"></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="line-199"></a>               Just c <font color=Red>-&gt;</font> Left <font color=Red>[</font>c<font color=Red>]</font>
+<a name="line-200"></a>               Nothing <font color=Red>-&gt;</font> av
+<a name="line-201"></a>            <font color=Cyan>)</font>
+<a name="line-202"></a>         attValList
+<a name="line-203"></a>      <font color=Cyan>)</font>
+<a name="line-204"></a>
+<a name="line-205"></a><a name="unEscapeContent"></a><font color=Blue>unEscapeContent</font> <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="line-206"></a><font color=Blue>unEscapeContent</font> xmlEscaper content <font color=Red>=</font>
+<a name="line-207"></a>   map
+<a name="line-208"></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="line-209"></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="line-210"></a>            Just c <font color=Red>-&gt;</font> CString False <font color=Red>[</font>c<font color=Red>]</font> i
+<a name="line-211"></a>            Nothing <font color=Red>-&gt;</font> cntnt
+<a name="line-212"></a>         CElem element i <font color=Red>-&gt;</font> CElem <font color=Cyan>(</font>unEscapeElement xmlEscaper element<font color=Cyan>)</font> i
+<a name="line-213"></a>         <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> cntnt
+<a name="line-214"></a>         <font color=Cyan>)</font>
+<a name="line-215"></a>      content
+<a name="line-216"></a>
+<a name="line-217"></a><a name="unEscapeChar"></a><font color=Blue>unEscapeChar</font> <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Reference <font color=Red>-&gt;</font> Maybe Char
+<a name="line-218"></a><font color=Blue>unEscapeChar</font> xmlEscaper ref <font color=Red>=</font>
+<a name="line-219"></a>   <font color=Green><u>case</u></font> ref <font color=Green><u>of</u></font>
+<a name="line-220"></a>      RefChar i      <font color=Red>-&gt;</font> Just <font color=Cyan>(</font>chr i<font color=Cyan>)</font>
+<a name="line-221"></a>      RefEntity name <font color=Red>-&gt;</font> lookupFM <font color=Cyan>(</font>fromEscape xmlEscaper<font color=Cyan>)</font> name
+<a name="line-222"></a>
+<a name="line-223"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
+<a name="line-224"></a><font color=Blue>-- After escaping and unescaping we rebuild the lists, compressing</font>
+<a name="line-225"></a><font color=Blue>-- adjacent identical character data.</font>
+<a name="line-226"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
+<a name="line-227"></a>
+<a name="line-228"></a><a name="compressElement"></a><font color=Blue>compressElement</font> <font color=Red>::</font> Element i <font color=Red>-&gt;</font> Element i
+<a name="line-229"></a><font color=Blue>compressElement</font> <font color=Cyan>(</font>Elem name attributes content<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-230"></a>   Elem name <font color=Cyan>(</font>compressAttributes attributes<font color=Cyan>)</font> <font color=Cyan>(</font>compressContent content<font color=Cyan>)</font>
+<a name="line-231"></a>
+<a name="line-232"></a><a name="compressAttributes"></a><font color=Blue>compressAttributes</font> <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font>AttValue<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font>AttValue<font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-233"></a><font color=Blue>compressAttributes</font> atts <font color=Red>=</font>
+<a name="line-234"></a>   map
+<a name="line-235"></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>compressAttValue av<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-236"></a>      atts
+<a name="line-237"></a>
+<a name="line-238"></a><a name="compressAttValue"></a><font color=Blue>compressAttValue</font> <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> AttValue
+<a name="line-239"></a><font color=Blue>compressAttValue</font> <font color=Cyan>(</font>AttValue l<font color=Cyan>)</font> <font color=Red>=</font> AttValue <font color=Cyan>(</font>compress l<font color=Cyan>)</font>
+<a name="line-240"></a>   <font color=Green><u>where</u></font>
+<a name="line-241"></a>      compress <font color=Red>::</font> <font color=Red>[</font>Either String Reference<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Either String Reference<font color=Red>]</font>
+<a name="line-242"></a>      compress [] <font color=Red>=</font> []
+<a name="line-243"></a>      compress <font color=Cyan>(</font>Right ref <font color=Red><b>:</b></font> es<font color=Cyan>)</font> <font color=Red>=</font> Right ref <font color=Red><b>:</b></font> <font color=Cyan>(</font>compress es<font color=Cyan>)</font>
+<a name="line-244"></a>      compress <font color=Cyan>(</font> <font color=Cyan>(</font>ls <font color=Red>@</font> <font color=Cyan>(</font>Left s1<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red><b>:</b></font> es<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-245"></a>         <font color=Green><u>case</u></font> compress es <font color=Green><u>of</u></font>
+<a name="line-246"></a>            <font color=Cyan>(</font>Left s2 <font color=Red><b>:</b></font> es2<font color=Cyan>)</font> <font color=Red>-&gt;</font> Left <font color=Cyan>(</font>s1 <font color=Cyan>++</font> s2<font color=Cyan>)</font> <font color=Red><b>:</b></font> es2
+<a name="line-247"></a>            es2 <font color=Red>-&gt;</font> ls <font color=Red><b>:</b></font> es2
+<a name="line-248"></a>
+<a name="line-249"></a><a name="compressContent"></a><font color=Blue>compressContent</font> <font color=Red>::</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="line-250"></a><font color=Blue>compressContent</font> [] <font color=Red>=</font> []
+<a name="line-251"></a><font color=Blue>compressContent</font> <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="line-252"></a>   <font color=Green><u>case</u></font> compressContent cs <font color=Green><u>of</u></font>
+<a name="line-253"></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="line-254"></a>          <font color=Red>|</font> b1 <font color=Cyan>==</font> b2
+<a name="line-255"></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="line-256"></a>      cs2 <font color=Red>-&gt;</font> csb <font color=Red><b>:</b></font> cs2
+<a name="line-257"></a><font color=Blue>compressContent</font> <font color=Cyan>(</font>CElem element i <font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-258"></a>   CElem <font color=Cyan>(</font>compressElement element<font color=Cyan>)</font> i <font color=Red><b>:</b></font> compressContent cs
+<a name="line-259"></a><font color=Blue>compressContent</font> <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="line-260"></a>
+<a name="line-261"></a>
+<a name="line-262"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
+<a name="line-263"></a><font color=Blue>-- Making XmlEscaper values.</font>
+<a name="line-264"></a><font color=Blue>-- ------------------------------------------------------------------------</font>
+<a name="line-265"></a>
+<a name="line-266"></a><a name="stdXmlEscaper"></a><font color=Blue>stdXmlEscaper</font> <font color=Red>::</font> XmlEscaper
+<a name="line-267"></a><font color=Blue>stdXmlEscaper</font> <font color=Red>=</font> mkXmlEscaper
+<a name="line-268"></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="line-269"></a>   <font color=Cyan>(</font><font color=Red>\</font> ch <font color=Red>-&gt;</font>
+<a name="line-270"></a>      <font color=Green><u>let</u></font>
+<a name="line-271"></a>         i <font color=Red>=</font> ord ch
+<a name="line-272"></a>      <font color=Green><u>in</u></font>
+<a name="line-273"></a>         i <font color=Cyan>&lt;</font> <font color=Magenta>10</font> <font color=Cyan>||</font> <font color=Cyan>(</font><font color=Magenta>10</font><font color=Cyan>&lt;</font>i <font color=Cyan>&amp;&amp;</font> i<font color=Cyan>&lt;</font><font color=Magenta>32</font><font color=Cyan>)</font> <font color=Cyan>||</font> i <font color=Cyan>&gt;=</font> <font color=Magenta>127</font> <font color=Cyan>||</font>
+<a name="line-274"></a>            <font color=Green><u>case</u></font> ch <font color=Green><u>of</u></font>
+<a name="line-275"></a>               <font color=Magenta>'\''</font> <font color=Red>-&gt;</font> True
+<a name="line-276"></a>               <font color=Magenta>'\"'</font> <font color=Red>-&gt;</font> True
+<a name="line-277"></a>               <font color=Magenta>'&amp;'</font> <font color=Red>-&gt;</font> True
+<a name="line-278"></a>               <font color=Magenta>'&lt;'</font> <font color=Red>-&gt;</font> True
+<a name="line-279"></a>               <font color=Magenta>'&gt;'</font> <font color=Red>-&gt;</font> True
+<a name="line-280"></a>               <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> False
+<a name="line-281"></a>      <font color=Cyan>)</font>
+<a name="line-282"></a>
+<a name="line-283"></a>
+<a name="line-284"></a><a name="mkXmlEscaper"></a><font color=Blue>mkXmlEscaper</font> <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="line-285"></a><font color=Blue>mkXmlEscaper</font> escapes isescape <font color=Red>=</font>
+<a name="line-286"></a>   XmlEscaper <font color=Cyan>{</font>
+<a name="line-287"></a>      toEscape <font color=Red>=</font> listToFM escapes<font color=Cyan>,</font>
+<a name="line-288"></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="line-289"></a>      isEscape <font color=Red>=</font> isescape
+<a name="line-290"></a>      <font color=Cyan>}</font>
+<a name="line-291"></a>
 </pre>
+</body>
 </html>
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
@@ -1,179 +1,185 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | These are just some common abbreviations for generating HTML</font>
-<a name="(line2)"></a><font color=Blue>--   content within the XML transformation framework defined</font>
-<a name="(line3)"></a><font color=Blue>--   by "Text.Xml.HaXml.Combinators".</font>
-<a name="(line4)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Generate
-<a name="(line5)"></a>  <font color=Cyan>(</font> <font color=Blue>-- * HTML construction filters</font>
-<a name="(line6)"></a>  <font color=Blue>-- ** Containers</font>
-<a name="(line7)"></a>    html
-<a name="(line8)"></a>  <font color=Cyan>,</font> hhead
-<a name="(line9)"></a>  <font color=Cyan>,</font> htitle
-<a name="(line10)"></a>  <font color=Cyan>,</font> hbody
-<a name="(line11)"></a>  <font color=Cyan>,</font> h1<font color=Cyan>,</font> h2<font color=Cyan>,</font> h3<font color=Cyan>,</font> h4
-<a name="(line12)"></a>  <font color=Cyan>,</font> hpara
-<a name="(line13)"></a>  <font color=Cyan>,</font> hdiv<font color=Cyan>,</font> hspan<font color=Cyan>,</font> margin
-<a name="(line14)"></a>  <font color=Blue>-- ** Anchors</font>
-<a name="(line15)"></a>  <font color=Cyan>,</font> anchor<font color=Cyan>,</font> makehref<font color=Cyan>,</font> anchorname
-<a name="(line16)"></a>  <font color=Blue>-- ** Text style</font>
-<a name="(line17)"></a>  <font color=Cyan>,</font> hpre
-<a name="(line18)"></a>  <font color=Cyan>,</font> hcentre
-<a name="(line19)"></a>  <font color=Cyan>,</font> hem<font color=Cyan>,</font> htt<font color=Cyan>,</font> hbold
-<a name="(line20)"></a>  <font color=Cyan>,</font> parens<font color=Cyan>,</font> bullet
-<a name="(line21)"></a>  <font color=Blue>-- ** Tables</font>
-<a name="(line22)"></a>  <font color=Cyan>,</font> htable<font color=Cyan>,</font> hrow<font color=Cyan>,</font> hcol
-<a name="(line23)"></a>  <font color=Blue>-- ** Breaks, lines</font>
-<a name="(line24)"></a>  <font color=Cyan>,</font> hbr<font color=Cyan>,</font> hhr
-<a name="(line25)"></a>  <font color=Blue>-- ** Attributes</font>
-<a name="(line26)"></a>  <font color=Cyan>,</font> 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>
-<a name="(line27)"></a>  <font color=Blue>-- * A simple HTML pretty-printer</font>
-<a name="(line28)"></a>  <font color=Cyan>,</font> htmlprint
-<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>
-<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="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="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><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="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>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Html/Generate.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | These are just some common abbreviations for generating HTML</font>
+<a name="line-2"></a><font color=Blue>--   content within the XML transformation framework defined</font>
+<a name="line-3"></a><font color=Blue>--   by "Text.Xml.HaXml.Combinators".</font>
+<a name="line-4"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Generate
+<a name="line-5"></a>  <font color=Cyan>(</font> <font color=Blue>-- * HTML construction filters</font>
+<a name="line-6"></a>  <font color=Blue>-- ** Containers</font>
+<a name="line-7"></a>    html
+<a name="line-8"></a>  <font color=Cyan>,</font> hhead
+<a name="line-9"></a>  <font color=Cyan>,</font> htitle
+<a name="line-10"></a>  <font color=Cyan>,</font> hbody
+<a name="line-11"></a>  <font color=Cyan>,</font> h1<font color=Cyan>,</font> h2<font color=Cyan>,</font> h3<font color=Cyan>,</font> h4
+<a name="line-12"></a>  <font color=Cyan>,</font> hpara
+<a name="line-13"></a>  <font color=Cyan>,</font> hdiv<font color=Cyan>,</font> hspan<font color=Cyan>,</font> margin
+<a name="line-14"></a>  <font color=Blue>-- ** Anchors</font>
+<a name="line-15"></a>  <font color=Cyan>,</font> anchor<font color=Cyan>,</font> makehref<font color=Cyan>,</font> anchorname
+<a name="line-16"></a>  <font color=Blue>-- ** Text style</font>
+<a name="line-17"></a>  <font color=Cyan>,</font> hpre
+<a name="line-18"></a>  <font color=Cyan>,</font> hcentre
+<a name="line-19"></a>  <font color=Cyan>,</font> hem<font color=Cyan>,</font> htt<font color=Cyan>,</font> hbold
+<a name="line-20"></a>  <font color=Cyan>,</font> parens<font color=Cyan>,</font> bullet
+<a name="line-21"></a>  <font color=Blue>-- ** Tables</font>
+<a name="line-22"></a>  <font color=Cyan>,</font> htable<font color=Cyan>,</font> hrow<font color=Cyan>,</font> hcol
+<a name="line-23"></a>  <font color=Blue>-- ** Breaks, lines</font>
+<a name="line-24"></a>  <font color=Cyan>,</font> hbr<font color=Cyan>,</font> hhr
+<a name="line-25"></a>  <font color=Blue>-- ** Attributes</font>
+<a name="line-26"></a>  <font color=Cyan>,</font> 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>
+<a name="line-27"></a>  <font color=Blue>-- * A simple HTML pretty-printer</font>
+<a name="line-28"></a>  <font color=Cyan>,</font> htmlprint
+<a name="line-29"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-30"></a>
+<a name="line-31"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>isSpace<font color=Cyan>)</font>
+<a name="line-32"></a>
+<a name="line-33"></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="line-34"></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="line-35"></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="line-36"></a>
+<a name="line-37"></a><font color=Blue>---- Constructor functions</font>
+<a name="line-38"></a>
+<a name="line-39"></a><a name="html"></a><font color=Blue>html</font><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="line-40"></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="line-41"></a>       <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i
+<a name="line-42"></a><font color=Blue>html</font>    <font color=Red>=</font> mkElem <font color=Magenta>"html"</font>
+<a name="line-43"></a><a name="hhead"></a><font color=Blue>hhead</font>   <font color=Red>=</font> mkElem <font color=Magenta>"head"</font>
+<a name="line-44"></a><a name="htitle"></a><font color=Blue>htitle</font>  <font color=Red>=</font> mkElem <font color=Magenta>"title"</font>
+<a name="line-45"></a><a name="hbody"></a><font color=Blue>hbody</font>   <font color=Red>=</font> mkElem <font color=Magenta>"body"</font>
+<a name="line-46"></a><a name="h1"></a><font color=Blue>h1</font>      <font color=Red>=</font> mkElem <font color=Magenta>"h1"</font>
+<a name="line-47"></a><a name="h2"></a><font color=Blue>h2</font>      <font color=Red>=</font> mkElem <font color=Magenta>"h2"</font>
+<a name="line-48"></a><a name="h3"></a><font color=Blue>h3</font>      <font color=Red>=</font> mkElem <font color=Magenta>"h3"</font>
+<a name="line-49"></a><a name="h4"></a><font color=Blue>h4</font>      <font color=Red>=</font> mkElem <font color=Magenta>"h4"</font>
+<a name="line-50"></a><a name="hpara"></a><font color=Blue>hpara</font>   <font color=Red>=</font> mkElem <font color=Magenta>"p"</font>
+<a name="line-51"></a><a name="hpre"></a><font color=Blue>hpre</font>    <font color=Red>=</font> mkElem <font color=Magenta>"pre"</font>
+<a name="line-52"></a><a name="hcentre"></a><font color=Blue>hcentre</font> <font color=Red>=</font> mkElem <font color=Magenta>"center"</font>
+<a name="line-53"></a><a name="hem"></a><font color=Blue>hem</font>     <font color=Red>=</font> mkElem <font color=Magenta>"em"</font>
+<a name="line-54"></a><a name="htt"></a><font color=Blue>htt</font>     <font color=Red>=</font> mkElem <font color=Magenta>"tt"</font>
+<a name="line-55"></a><a name="hbold"></a><font color=Blue>hbold</font>   <font color=Red>=</font> mkElem <font color=Magenta>"b"</font>
+<a name="line-56"></a>
+<a name="line-57"></a><a name="htable"></a><font color=Blue>htable</font> <font color=Red>=</font> mkElem <font color=Magenta>"table"</font>
+<a name="line-58"></a><a name="hrow"></a><font color=Blue>hrow</font>   <font color=Red>=</font> mkElem <font color=Magenta>"tr"</font>
+<a name="line-59"></a><a name="hcol"></a><font color=Blue>hcol</font>   <font color=Red>=</font> mkElem <font color=Magenta>"td"</font>
+<a name="line-60"></a>
+<a name="line-61"></a><a name="hdiv"></a><font color=Blue>hdiv</font>   <font color=Red>=</font> mkElem <font color=Magenta>"div"</font>
+<a name="line-62"></a><a name="hspan"></a><font color=Blue>hspan</font>  <font color=Red>=</font> mkElem <font color=Magenta>"span"</font>
+<a name="line-63"></a><a name="margin"></a><font color=Blue>margin</font> <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="line-64"></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="line-65"></a>
+<a name="line-66"></a><a name="anchor"></a><font color=Blue>anchor</font>      <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="line-67"></a><font color=Blue>anchor</font>       <font color=Red>=</font> mkElemAttr <font color=Magenta>"a"</font>
+<a name="line-68"></a>
+<a name="line-69"></a><a name="makehref"></a><font color=Blue>makehref</font><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="line-70"></a><font color=Blue>makehref</font> 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="line-71"></a><a name="anchorname"></a><font color=Blue>anchorname</font> 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="line-72"></a>
+<a name="line-73"></a>
+<a name="line-74"></a><a name="hbr"></a><font color=Blue>hbr</font><font color=Cyan>,</font> hhr <font color=Red>::</font> CFilter i
+<a name="line-75"></a><font color=Blue>hbr</font>       <font color=Red>=</font> mkElem <font color=Magenta>"br"</font> []
+<a name="line-76"></a><a name="hhr"></a><font color=Blue>hhr</font>       <font color=Red>=</font> mkElem <font color=Magenta>"hr"</font> []
+<a name="line-77"></a>
+<a name="line-78"></a>
+<a name="line-79"></a><a name="showattr"></a><font color=Blue>showattr</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=Cyan>)</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i
+<a name="line-80"></a><font color=Blue>showattr</font> n <font color=Red>=</font> find n literal
+<a name="line-81"></a><a name="!"></a><font color=Cyan>(</font><font color=Cyan>!</font><font color=Cyan>)</font> <font color=Red>=</font> literal
+<a name="line-82"></a><a name="?"></a><font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>=</font> showattr
+<a name="line-83"></a>
+<a name="line-84"></a><a name="parens"></a><font color=Blue>parens</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-85"></a><font color=Blue>parens</font> 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="line-86"></a>
+<a name="line-87"></a><a name="bullet"></a><font color=Blue>bullet</font> <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i
+<a name="line-88"></a><font color=Blue>bullet</font> <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="line-89"></a>
+<a name="line-90"></a>
+<a name="line-91"></a><font color=Blue>---- Printing function</font>
+<a name="line-92"></a>
+<a name="line-93"></a><font color=Blue>-- htmlprint :: [Content] -&gt; String</font>
+<a name="line-94"></a><font color=Blue>-- htmlprint = concatMap cprint</font>
+<a name="line-95"></a><font color=Blue>--   where</font>
+<a name="line-96"></a><font color=Blue>--   cprint (CElem e _) = elem e</font>
+<a name="line-97"></a><font color=Blue>--   cprint (CString _ s) = s</font>
+<a name="line-98"></a><font color=Blue>--   cprint (CMisc m) = ""</font>
+<a name="line-99"></a><font color=Blue>--</font>
+<a name="line-100"></a><font color=Blue>--   elem (Elem n as []) = "\n&lt;"++n++attrs as++" /&gt;"</font>
+<a name="line-101"></a><font color=Blue>--   elem (Elem n as cs) = "\n&lt;"++n++attrs as++"&gt;"++htmlprint cs++"\n&lt;/"++n++"&gt;"</font>
+<a name="line-102"></a><font color=Blue>--</font>
+<a name="line-103"></a><font color=Blue>--   attrs = concatMap attr</font>
+<a name="line-104"></a><font color=Blue>--   attr (n,v) = " "++n++"='"++v++"'"</font>
+<a name="line-105"></a>
+<a name="line-106"></a>
+<a name="line-107"></a><a name="htmlprint"></a><font color=Blue>htmlprint</font> <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="line-108"></a><font color=Blue>htmlprint</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>.</font> map cprint <font color=Cyan>.</font> foldrefs
+<a name="line-109"></a>  <font color=Green><u>where</u></font>
+<a name="line-110"></a>  foldrefs [] <font color=Red>=</font> []
+<a name="line-111"></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="line-112"></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="line-113"></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="line-114"></a>
+<a name="line-115"></a><font color=Blue>--ref (RefEntity (EntityRef n)) = n     -- Actually, should look-up symtable.</font>
+<a name="line-116"></a><font color=Blue>--ref (RefChar (CharRef s)) = s</font>
+<a name="line-117"></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="line-118"></a>  ref <font color=Cyan>(</font>RefChar s<font color=Cyan>)</font> <font color=Red>=</font> show s
+<a name="line-119"></a>
+<a name="line-120"></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="line-121"></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="line-122"></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="line-123"></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="line-124"></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="line-125"></a>
+<a name="line-126"></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="line-127"></a>                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="line-128"></a>                        attrs <font color=Green><u>as</u></font>          Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="line-129"></a>                        Pretty<font color=Cyan>.</font>text <font color=Magenta>" /&gt;"</font>
+<a name="line-130"></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="line-131"></a>                    <font color=Blue>--  ( Pretty.text "&lt;"   Pretty.&lt;&gt;</font>
+<a name="line-132"></a>                    <font color=Blue>--    Pretty.text n     Pretty.&lt;&gt;</font>
+<a name="line-133"></a>                    <font color=Blue>--    attrs as          Pretty.&lt;&gt;</font>
+<a name="line-134"></a>                    <font color=Blue>--    Pretty.text "&gt;")  Pretty.$$</font>
+<a name="line-135"></a>                    <font color=Blue>--  Pretty.nest 6 (htmlprint cs)  Pretty.$$</font>
+<a name="line-136"></a>                    <font color=Blue>--  ( Pretty.text "&lt;/"  Pretty.&lt;&gt;</font>
+<a name="line-137"></a>                    <font color=Blue>--    Pretty.text n     Pretty.&lt;&gt;</font>
+<a name="line-138"></a>                    <font color=Blue>--    Pretty.text "&gt;" )</font>
+<a name="line-139"></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="line-140"></a>                                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="line-141"></a>                                        attrs <font color=Green><u>as</u></font>          Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="line-142"></a>                                        Pretty<font color=Cyan>.</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="line-143"></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="line-144"></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="line-145"></a>                                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="line-146"></a>                                        Pretty<font color=Cyan>.</font>text <font color=Magenta>"&gt;"</font> <font color=Cyan>)</font>
+<a name="line-147"></a>                                    <font color=Red>]</font>
+<a name="line-148"></a>
+<a name="line-149"></a>  attrs <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>.</font> map attribute
+<a name="line-150"></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="line-151"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>" "</font>  Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="line-152"></a>               Pretty<font color=Cyan>.</font>text n    Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="line-153"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>"='"</font> Pretty<font color=Cyan>.&lt;&gt;</font>
+<a name="line-154"></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="line-155"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>"'"</font>
+<a name="line-156"></a>
+<a name="line-157"></a>  fmt <font color=Green><u>_</u></font> [] <font color=Red>=</font> []
+<a name="line-158"></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="line-159"></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="line-160"></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="line-161"></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="line-162"></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="line-163"></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="line-164"></a>                     <font color=Green><u>in</u></font> reverse big<font color=Red><b>:</b></font> fmt n rest
+<a name="line-165"></a>
+<a name="line-166"></a>  deSpace []     <font color=Red>=</font> []
+<a name="line-167"></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="line-168"></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="line-169"></a>                 <font color=Red>|</font> otherwise <font color=Red>=</font> c <font color=Red><b>:</b></font> deSpace cs
+<a name="line-170"></a>
+<a name="line-171"></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="line-172"></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="line-173"></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="line-174"></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="line-175"></a>
 </pre>
+</body>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Html/Parse.html b/docs/HaXml/src/Text/XML/HaXml/Html/Parse.html
--- a/docs/HaXml/src/Text/XML/HaXml/Html/Parse.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Html/Parse.html
@@ -1,728 +1,734 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | This is a parser for HTML documents.  Unlike for XML documents, it</font>
-<a name="(line2)"></a><font color=Blue>--   must include a certain amount of error-correction to account for</font>
-<a name="(line3)"></a><font color=Blue>--   HTML features like self-terminating tags, unterminated tags, and</font>
-<a name="(line4)"></a><font color=Blue>--   incorrect nesting.  The input is tokenised by the</font>
-<a name="(line5)"></a><font color=Blue>--   XML lexer (a separate lexer is not required for HTML).</font>
-<a name="(line6)"></a>
-<a name="(line7)"></a><font color=Blue>-- It uses a slightly extended version of the Hutton/Meijer parser</font>
-<a name="(line8)"></a><font color=Blue>-- combinators.</font>
-<a name="(line9)"></a>
-<a name="(line10)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Parse
-<a name="(line11)"></a>  <font color=Cyan>(</font> htmlParse
-<a name="(line12)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line13)"></a>
-<a name="(line14)"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>either<font color=Cyan>,</font>maybe<font color=Cyan>,</font>sequence<font color=Cyan>)</font>
-<a name="(line15)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Prelude <font color=Cyan>(</font>either<font color=Cyan>)</font>
-<a name="(line16)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
-<a name="(line17)"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>toLower<font color=Cyan>,</font> isSpace<font color=Cyan>,</font> isDigit<font color=Cyan>,</font> isHexDigit<font color=Cyan>)</font>
-<a name="(line18)"></a><font color=Green><u>import</u></font> Numeric <font color=Cyan>(</font>readDec<font color=Cyan>,</font>readHex<font color=Cyan>)</font>
-<a name="(line19)"></a><font color=Green><u>import</u></font> Monad
-<a name="(line20)"></a>
-<a name="(line21)"></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="(line22)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Lex
-<a name="(line23)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn
-<a name="(line24)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly<font color=Cyan>.</font>NoLeak<font color=Cyan>.</font>Plain
-<a name="(line25)"></a>
-<a name="(line26)"></a><font color=Blue>--  #define DEBUG</font>
-<a name="(line27)"></a> 
-<a name="(line28)"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>
-<a name="(line29)"></a><font color=Magenta><em>#  if ( defined(__GLASGOW_HASKELL__) &amp;&amp; __GLASGOW_HASKELL__ &gt; 502 ) || \</em></font>
-<a name="(line30)"></a>      <font color=Cyan>(</font> defined<font color=Cyan>(</font><b><font color=Magenta>__NHC__</font></b><font color=Cyan>)</font> <font color=Cyan>&amp;&amp;</font> <b><font color=Magenta>__NHC__</font></b> <font color=Cyan>&gt;</font> <font color=Magenta>114</font> <font color=Cyan>)</font> <font color=Cyan>||</font> defined<font color=Cyan>(</font><b><font color=Magenta>__HUGS__</font></b><font color=Cyan>)</font>
-<a name="(line31)"></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="(line32)"></a><font color=Magenta><em>#  elif defined(__GLASGOW_HASKELL__)</em></font>
-<a name="(line33)"></a><font color=Green><u>import</u></font> IOExts<font color=Cyan>(</font>trace<font color=Cyan>)</font>
-<a name="(line34)"></a><font color=Magenta><em>#  elif defined(__NHC__) || defined(__HBC__)</em></font>
-<a name="(line35)"></a><font color=Green><u>import</u></font> NonStdTrace
-<a name="(line36)"></a><font color=Magenta><em>#  endif</em></font>
-<a name="(line37)"></a><a name="debug"></a>debug <font color=Red>::</font> Monad m <font color=Red>=&gt;</font> String <font color=Red>-&gt;</font> m ()
-<a name="(line38)"></a>debug s <font color=Red>=</font> trace s <font color=Cyan>(</font>return ()<font color=Cyan>)</font>
-<a name="(line39)"></a><font color=Magenta><em>#else</em></font>
-<a name="(line40)"></a>debug <font color=Red>::</font> Monad m <font color=Red>=&gt;</font> String <font color=Red>-&gt;</font> m ()
-<a name="(line41)"></a>debug s <font color=Red>=</font> return ()
-<a name="(line42)"></a><font color=Magenta><em>#endif</em></font>
-<a name="(line43)"></a>
-<a name="(line44)"></a>
-<a name="(line45)"></a><a name="htmlParse"></a><font color=Blue>-- | The first argument is the name of the file, the second is the string</font>
-<a name="(line46)"></a><font color=Blue>--   contents of the file.  The result is the generic representation of</font>
-<a name="(line47)"></a><font color=Blue>--   an XML document.  Any errors cause program failure with message to stderr.</font>
-<a name="(line48)"></a>htmlParse <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Document Posn
-<a name="(line49)"></a>htmlParse name <font color=Red>=</font> Prelude<font color=Cyan>.</font>either error id <font color=Cyan>.</font> htmlParse' name
-<a name="(line50)"></a>
-<a name="(line51)"></a><a name="htmlParse'"></a><font color=Blue>-- | The first argument is the name of the file, the second is the string</font>
-<a name="(line52)"></a><font color=Blue>--   contents of the file.  The result is the generic representation of</font>
-<a name="(line53)"></a><font color=Blue>--   an XML document.  Any parsing errors are returned in the @Either@ type.</font>
-<a name="(line54)"></a>htmlParse' <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Either String <font color=Cyan>(</font>Document Posn<font color=Cyan>)</font>
-<a name="(line55)"></a>htmlParse' name <font color=Red>=</font> Prelude<font color=Cyan>.</font>either Left <font color=Cyan>(</font>Right <font color=Cyan>.</font> simplify<font color=Cyan>)</font> <font color=Cyan>.</font> fst
-<a name="(line56)"></a>                  <font color=Cyan>.</font> runParser document <font color=Cyan>.</font> xmlLex name
-<a name="(line57)"></a>
-<a name="(line58)"></a><font color=Blue>---- Document simplification ----</font>
-<a name="(line59)"></a>
-<a name="(line60)"></a><a name="simplify"></a>simplify <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Document i
-<a name="(line61)"></a>simplify <font color=Cyan>(</font>Document p st <font color=Cyan>(</font>Elem n avs cs<font color=Cyan>)</font> ms<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line62)"></a>    Document p st <font color=Cyan>(</font>Elem n avs <font color=Cyan>(</font>deepfilter simp cs<font color=Cyan>)</font><font color=Cyan>)</font> ms
-<a name="(line63)"></a>  <font color=Green><u>where</u></font>
-<a name="(line64)"></a>    simp <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"null"</font> [] []<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> False
-<a name="(line65)"></a>    simp <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem  n     <font color=Green><u>_</u></font>  []<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>|</font> n <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"font"</font><font color=Cyan>,</font><font color=Magenta>"p"</font><font color=Cyan>,</font><font color=Magenta>"i"</font><font color=Cyan>,</font><font color=Magenta>"b"</font><font color=Cyan>,</font><font color=Magenta>"em"</font>
-<a name="(line66)"></a>                                                  <font color=Cyan>,</font><font color=Magenta>"tt"</font><font color=Cyan>,</font><font color=Magenta>"big"</font><font color=Cyan>,</font><font color=Magenta>"small"</font><font color=Red>]</font> <font color=Red>=</font> False
-<a name="(line67)"></a> <font color=Blue>-- simp (CString False s _) | all isSpace s = False</font>
-<a name="(line68)"></a>    simp <font color=Green><u>_</u></font> <font color=Red>=</font> True
-<a name="(line69)"></a>    deepfilter p <font color=Red>=</font>
-<a name="(line70)"></a>        filter p <font color=Cyan>.</font> map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>
-<a name="(line71)"></a>                          CElem <font color=Cyan>(</font>Elem n avs cs<font color=Cyan>)</font> i
-<a name="(line72)"></a>                                  <font color=Red>-&gt;</font> CElem <font color=Cyan>(</font>Elem n avs <font color=Cyan>(</font>deepfilter p cs<font color=Cyan>)</font><font color=Cyan>)</font> i
-<a name="(line73)"></a>                          <font color=Green><u>_</u></font>       <font color=Red>-&gt;</font> c<font color=Cyan>)</font>
-<a name="(line74)"></a>
-<a name="(line75)"></a><a name="selfclosingtags"></a><font color=Blue>-- opening any of these, they close again immediately</font>
-<a name="(line76)"></a>selfclosingtags <font color=Red>=</font> <font color=Red>[</font><font color=Magenta>"img"</font><font color=Cyan>,</font><font color=Magenta>"hr"</font><font color=Cyan>,</font><font color=Magenta>"br"</font><font color=Cyan>,</font><font color=Magenta>"meta"</font><font color=Cyan>,</font><font color=Magenta>"col"</font><font color=Cyan>,</font><font color=Magenta>"link"</font><font color=Cyan>,</font><font color=Magenta>"base"</font>
-<a name="(line77)"></a>                  <font color=Cyan>,</font><font color=Magenta>"param"</font><font color=Cyan>,</font><font color=Magenta>"area"</font><font color=Cyan>,</font><font color=Magenta>"frame"</font><font color=Cyan>,</font><font color=Magenta>"input"</font><font color=Red>]</font>
-<a name="(line78)"></a>
-<a name="(line79)"></a><a name="closeInnerTags"></a><font color=Blue>--closing this, implicitly closes any of those which are contained in it</font>
-<a name="(line80)"></a>closeInnerTags <font color=Red>=</font>
-<a name="(line81)"></a>  <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"ul"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"li"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line82)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ol"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"li"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line83)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"dl"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"dt"</font><font color=Cyan>,</font><font color=Magenta>"dd"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line84)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tr"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line85)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"div"</font><font color=Cyan>,</font>     <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line86)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"thead"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line87)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tfoot"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line88)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tbody"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line89)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"table"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Cyan>,</font><font color=Magenta>"thead"</font><font color=Cyan>,</font><font color=Magenta>"tfoot"</font><font color=Cyan>,</font><font color=Magenta>"tbody"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line90)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"caption"</font><font color=Cyan>,</font> <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line91)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"th"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line92)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"td"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line93)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"li"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line94)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"dt"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line95)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"dd"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line96)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"object"</font><font color=Cyan>,</font>  <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line97)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"map"</font><font color=Cyan>,</font>     <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line98)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"body"</font><font color=Cyan>,</font>    <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line99)"></a>  <font color=Red>]</font>
-<a name="(line100)"></a>
-<a name="(line101)"></a><a name="closes"></a><font color=Blue>--opening this, implicitly closes that</font>
-<a name="(line102)"></a>closes <font color=Red>::</font> Name <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> Bool
-<a name="(line103)"></a><font color=Magenta>"a"</font>  <font color=Cyan>`closes`</font> <font color=Magenta>"a"</font>   <font color=Red>=</font>  True
-<a name="(line104)"></a><font color=Magenta>"li"</font> <font color=Cyan>`closes`</font> <font color=Magenta>"li"</font>  <font color=Red>=</font>  True
-<a name="(line105)"></a><font color=Magenta>"th"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font>      <font color=Red>=</font>  True
-<a name="(line106)"></a><font color=Magenta>"td"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font>      <font color=Red>=</font>  True
-<a name="(line107)"></a><font color=Magenta>"tr"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Red>]</font> <font color=Red>=</font>  True
-<a name="(line108)"></a><font color=Magenta>"dt"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"dt"</font><font color=Cyan>,</font><font color=Magenta>"dd"</font><font color=Red>]</font>      <font color=Red>=</font>  True
-<a name="(line109)"></a><font color=Magenta>"dd"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"dt"</font><font color=Cyan>,</font><font color=Magenta>"dd"</font><font color=Red>]</font>      <font color=Red>=</font>  True
-<a name="(line110)"></a><font color=Magenta>"form"</font>  <font color=Cyan>`closes`</font> <font color=Magenta>"form"</font>      <font color=Red>=</font> True
-<a name="(line111)"></a><font color=Magenta>"label"</font> <font color=Cyan>`closes`</font> <font color=Magenta>"label"</font>     <font color=Red>=</font> True
-<a name="(line112)"></a><font color=Green><u>_</u></font>       <font color=Cyan>`closes`</font> <font color=Magenta>"option"</font>    <font color=Red>=</font> True
-<a name="(line113)"></a><font color=Magenta>"thead"</font> <font color=Cyan>`closes`</font> t  <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"colgroup"</font><font color=Red>]</font>          <font color=Red>=</font> True
-<a name="(line114)"></a><font color=Magenta>"tfoot"</font> <font color=Cyan>`closes`</font> t  <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"thead"</font><font color=Cyan>,</font><font color=Magenta>"colgroup"</font><font color=Red>]</font>  <font color=Red>=</font> True
-<a name="(line115)"></a><font color=Magenta>"tbody"</font> <font color=Cyan>`closes`</font> t  <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"tbody"</font><font color=Cyan>,</font><font color=Magenta>"tfoot"</font><font color=Cyan>,</font><font color=Magenta>"thead"</font><font color=Cyan>,</font><font color=Magenta>"colgroup"</font><font color=Red>]</font> <font color=Red>=</font> True
-<a name="(line116)"></a><font color=Magenta>"colgroup"</font> <font color=Cyan>`closes`</font> <font color=Magenta>"colgroup"</font>  <font color=Red>=</font> True
-<a name="(line117)"></a><a name="closes"></a>t <font color=Cyan>`closes`</font> <font color=Magenta>"p"</font>
-<a name="(line118)"></a>    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"p"</font><font color=Cyan>,</font><font color=Magenta>"h1"</font><font color=Cyan>,</font><font color=Magenta>"h2"</font><font color=Cyan>,</font><font color=Magenta>"h3"</font><font color=Cyan>,</font><font color=Magenta>"h4"</font><font color=Cyan>,</font><font color=Magenta>"h5"</font><font color=Cyan>,</font><font color=Magenta>"h6"</font>
-<a name="(line119)"></a>               <font color=Cyan>,</font><font color=Magenta>"hr"</font><font color=Cyan>,</font><font color=Magenta>"div"</font><font color=Cyan>,</font><font color=Magenta>"ul"</font><font color=Cyan>,</font><font color=Magenta>"dl"</font><font color=Cyan>,</font><font color=Magenta>"ol"</font><font color=Cyan>,</font><font color=Magenta>"table"</font><font color=Red>]</font>  <font color=Red>=</font>  True
-<a name="(line120)"></a><font color=Green><u>_</u></font> <font color=Cyan>`closes`</font> <font color=Green><u>_</u></font> <font color=Red>=</font> False
-<a name="(line121)"></a>
-<a name="(line122)"></a>
-<a name="(line123)"></a>
-<a name="(line124)"></a><font color=Blue>---- Misc ----</font>
-<a name="(line125)"></a>
-<a name="(line126)"></a><a name="fst3"></a>fst3 <font color=Cyan>(</font>a<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> a
-<a name="(line127)"></a><a name="snd3"></a>snd3 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> a
-<a name="(line128)"></a><a name="thd3"></a>thd3 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>)</font> <font color=Red>=</font> a
-<a name="(line129)"></a>
-<a name="(line130)"></a>
-<a name="(line131)"></a>
-<a name="(line132)"></a><font color=Blue>---- Auxiliary Parsing Functions ----</font>
-<a name="(line133)"></a>
-<a name="(line134)"></a><a name="HParser"></a><font color=Green><u>type</u></font> HParser a <font color=Red>=</font> Parser <font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font> a
-<a name="(line135)"></a>
-<a name="(line136)"></a><a name="tok"></a>tok <font color=Red>::</font> TokenT <font color=Red>-&gt;</font> HParser TokenT
-<a name="(line137)"></a>tok t <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t'<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line138)"></a>           <font color=Green><u>case</u></font> t' <font color=Green><u>of</u></font> TokError s    <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
-<a name="(line139)"></a>                      <font color=Green><u>_</u></font> <font color=Red>|</font> t'<font color=Cyan>==</font>t     <font color=Red>-&gt;</font> return t
-<a name="(line140)"></a>                        <font color=Red>|</font> otherwise <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
-<a name="(line141)"></a>
-<a name="(line142)"></a><a name="name"></a>name <font color=Red>::</font> HParser Name
-<a name="(line143)"></a><font color=Blue>--name = do {(p,TokName s) &lt;- next; return s}</font>
-<a name="(line144)"></a>name <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>tok<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line145)"></a>          <font color=Green><u>case</u></font> tok <font color=Green><u>of</u></font> 
-<a name="(line146)"></a>            TokName s  <font color=Red>-&gt;</font> return s 
-<a name="(line147)"></a>            TokError s <font color=Red>-&gt;</font> report failBad <font color=Magenta>"a name"</font> p tok
-<a name="(line148)"></a>            <font color=Green><u>_</u></font>          <font color=Red>-&gt;</font> report fail <font color=Magenta>"a name"</font> p tok
-<a name="(line149)"></a>
-<a name="(line150)"></a><a name="string"></a>string<font color=Cyan>,</font> freetext <font color=Red>::</font> HParser String
-<a name="(line151)"></a>string   <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line152)"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokName s <font color=Red>-&gt;</font> return s
-<a name="(line153)"></a>                        <font color=Green><u>_</u></font>         <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
-<a name="(line154)"></a><a name="freetext"></a>freetext <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line155)"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokFreeText s <font color=Red>-&gt;</font> return s
-<a name="(line156)"></a>                        <font color=Green><u>_</u></font>             <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
-<a name="(line157)"></a>
-<a name="(line158)"></a><a name="maybe"></a>maybe <font color=Red>::</font> HParser a <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font>
-<a name="(line159)"></a>maybe p <font color=Red>=</font>
-<a name="(line160)"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Just<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line161)"></a>    <font color=Cyan>(</font> return Nothing<font color=Cyan>)</font>
-<a name="(line162)"></a>
-<a name="(line163)"></a><a name="either"></a>either <font color=Red>::</font> HParser a <font color=Red>-&gt;</font> HParser b <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Either a b<font color=Cyan>)</font>
-<a name="(line164)"></a>either p q <font color=Red>=</font>
-<a name="(line165)"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Left<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line166)"></a>    <font color=Cyan>(</font> q <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Right<font color=Cyan>)</font>
-<a name="(line167)"></a>
-<a name="(line168)"></a><a name="word"></a>word <font color=Red>::</font> String <font color=Red>-&gt;</font> HParser ()
-<a name="(line169)"></a>word s <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x <font color=Red>&lt;-</font> next
-<a name="(line170)"></a>            <font color=Cyan>;</font> <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>
-<a name="(line171)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokName n<font color=Cyan>)</font>     <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
-<a name="(line172)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokFreeText n<font color=Cyan>)</font> <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
-<a name="(line173)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Red>@</font><font color=Cyan>(</font>TokError <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
-<a name="(line174)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
-<a name="(line175)"></a>            <font color=Cyan>}</font>
-<a name="(line176)"></a>
-<a name="(line177)"></a><a name="posn"></a>posn <font color=Red>::</font> HParser Posn
-<a name="(line178)"></a>posn <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x<font color=Red>@</font><font color=Cyan>(</font>p<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line179)"></a>          <font color=Cyan>;</font> reparse <font color=Red>[</font>x<font color=Red>]</font>
-<a name="(line180)"></a>          <font color=Cyan>;</font> return p
-<a name="(line181)"></a>          <font color=Cyan>}</font> <font color=Cyan>`onFail`</font> return noPos
-<a name="(line182)"></a>
-<a name="(line183)"></a><a name="nmtoken"></a>nmtoken <font color=Red>::</font> HParser NmToken
-<a name="(line184)"></a>nmtoken <font color=Red>=</font> <font color=Cyan>(</font>string <font color=Cyan>`onFail`</font> freetext<font color=Cyan>)</font>
-<a name="(line185)"></a>
-<a name="(line186)"></a><a name="failP"></a>failP<font color=Cyan>,</font> failBadP <font color=Red>::</font> String <font color=Red>-&gt;</font> HParser a
-<a name="(line187)"></a>failP msg    <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> fail <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line188)"></a><a name="failBadP"></a>failBadP msg <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> failBad <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line189)"></a>
-<a name="(line190)"></a><a name="report"></a>report <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>HParser a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> TokenT <font color=Red>-&gt;</font> HParser a
-<a name="(line191)"></a>report fail exp p t <font color=Red>=</font> fail <font color=Cyan>(</font><font color=Magenta>"Expected "</font><font color=Cyan>++</font>show exp<font color=Cyan>++</font><font color=Magenta>" but found "</font><font color=Cyan>++</font>show t
-<a name="(line192)"></a>                           <font color=Cyan>++</font><font color=Magenta>"\n  at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
-<a name="(line193)"></a>
-<a name="(line194)"></a><a name="adjustErrP"></a>adjustErrP <font color=Red>::</font> HParser a <font color=Red>-&gt;</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> HParser a
-<a name="(line195)"></a><a name="adjustErrP"></a>p <font color=Cyan>`adjustErrP`</font> f <font color=Red>=</font> p <font color=Cyan>`onFail`</font> <font color=Green><u>do</u></font> pn <font color=Red>&lt;-</font> posn
-<a name="(line196)"></a>                                 <font color=Cyan>(</font>p <font color=Cyan>`adjustErr`</font> f<font color=Cyan>)</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font>show pn<font color=Cyan>)</font>
-<a name="(line197)"></a>
-<a name="(line198)"></a><font color=Blue>---- XML Parsing Functions ----</font>
-<a name="(line199)"></a>
-<a name="(line200)"></a><a name="document"></a>document <font color=Red>::</font> HParser <font color=Cyan>(</font>Document Posn<font color=Cyan>)</font>
-<a name="(line201)"></a>document <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line202)"></a>    p     <font color=Red>&lt;-</font> prolog <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"unrecognisable XML prolog\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line203)"></a>    es    <font color=Red>&lt;-</font> many1 <font color=Cyan>(</font>element <font color=Magenta>"HTML document"</font><font color=Cyan>)</font>
-<a name="(line204)"></a>    ms    <font color=Red>&lt;-</font> many misc
-<a name="(line205)"></a>    return <font color=Cyan>(</font>Document p emptyST <font color=Cyan>(</font><font color=Green><u>case</u></font> map snd es <font color=Green><u>of</u></font>
-<a name="(line206)"></a>                                  <font color=Red>[</font>e<font color=Red>]</font> <font color=Red>-&gt;</font> e
-<a name="(line207)"></a>                                  es  <font color=Red>-&gt;</font> Elem <font color=Magenta>"html"</font> [] <font color=Cyan>(</font>map mkCElem es<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line208)"></a>                               ms<font color=Cyan>)</font>
-<a name="(line209)"></a>  <font color=Green><u>where</u></font> mkCElem e <font color=Red>=</font> CElem e noPos
-<a name="(line210)"></a>
-<a name="(line211)"></a><a name="comment"></a>comment <font color=Red>::</font> HParser Comment
-<a name="(line212)"></a>comment <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line213)"></a>    bracket <font color=Cyan>(</font>tok TokCommentOpen<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokCommentClose<font color=Cyan>)</font> freetext
-<a name="(line214)"></a>
-<a name="(line215)"></a><a name="processinginstruction"></a>processinginstruction <font color=Red>::</font> HParser ProcessingInstruction
-<a name="(line216)"></a>processinginstruction <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line217)"></a>    tok TokPIOpen
-<a name="(line218)"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
-<a name="(line219)"></a>      n <font color=Red>&lt;-</font> string  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"processing instruction has no target"</font>
-<a name="(line220)"></a>      f <font color=Red>&lt;-</font> freetext
-<a name="(line221)"></a>      <font color=Cyan>(</font>tok TokPIClose <font color=Cyan>`onFail`</font> tok TokAnyClose<font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing ?&gt; or &gt;"</font>
-<a name="(line222)"></a>      return <font color=Cyan>(</font>n<font color=Cyan>,</font> f<font color=Cyan>)</font>
-<a name="(line223)"></a>
-<a name="(line224)"></a><a name="cdsect"></a>cdsect <font color=Red>::</font> HParser CDSect
-<a name="(line225)"></a>cdsect <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line226)"></a>    tok TokSectionOpen
-<a name="(line227)"></a>    bracket <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection CDATAx<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSectionClose<font color=Cyan>)</font> chardata
-<a name="(line228)"></a>
-<a name="(line229)"></a><a name="prolog"></a>prolog <font color=Red>::</font> HParser Prolog
-<a name="(line230)"></a>prolog <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line231)"></a>    x <font color=Red>&lt;-</font> maybe xmldecl
-<a name="(line232)"></a>    m1 <font color=Red>&lt;-</font> many misc
-<a name="(line233)"></a>    dtd <font color=Red>&lt;-</font> maybe doctypedecl
-<a name="(line234)"></a>    m2 <font color=Red>&lt;-</font> many misc
-<a name="(line235)"></a>    return <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font>
-<a name="(line236)"></a>
-<a name="(line237)"></a><a name="xmldecl"></a>xmldecl <font color=Red>::</font> HParser XMLDecl
-<a name="(line238)"></a>xmldecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line239)"></a>    tok TokPIOpen
-<a name="(line240)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
-<a name="(line241)"></a>    p <font color=Red>&lt;-</font> posn
-<a name="(line242)"></a>    s <font color=Red>&lt;-</font> freetext
-<a name="(line243)"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing ?&gt; in &lt;?xml ...?&gt;"</font>
-<a name="(line244)"></a>    <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>either failP return <font color=Cyan>.</font> fst <font color=Cyan>.</font> runParser aux <font color=Cyan>.</font> xmlReLex p<font color=Cyan>)</font> s
-<a name="(line245)"></a>  <font color=Green><u>where</u></font>
-<a name="(line246)"></a>    aux <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line247)"></a>      v <font color=Red>&lt;-</font> versioninfo  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing XML version info"</font>
-<a name="(line248)"></a>      e <font color=Red>&lt;-</font> maybe encodingdecl
-<a name="(line249)"></a>      s <font color=Red>&lt;-</font> maybe sddecl
-<a name="(line250)"></a>      return <font color=Cyan>(</font>XMLDecl v e s<font color=Cyan>)</font>
-<a name="(line251)"></a>
-<a name="(line252)"></a><a name="versioninfo"></a>versioninfo <font color=Red>::</font> HParser VersionInfo
-<a name="(line253)"></a>versioninfo <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line254)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"version"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"VERSION"</font><font color=Cyan>)</font>
-<a name="(line255)"></a>    tok TokEqual
-<a name="(line256)"></a>    bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line257)"></a>
-<a name="(line258)"></a><a name="misc"></a>misc <font color=Red>::</font> HParser Misc
-<a name="(line259)"></a>misc <font color=Red>=</font> 
-<a name="(line260)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"&lt;!--comment--&gt;"</font><font color=Cyan>,</font> comment <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Comment<font color=Cyan>)</font>
-<a name="(line261)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"&lt;?PI?&gt;"</font><font color=Cyan>,</font>         processinginstruction <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PI<font color=Cyan>)</font>
-<a name="(line262)"></a>           <font color=Red>]</font>
-<a name="(line263)"></a>
-<a name="(line264)"></a>
-<a name="(line265)"></a><font color=Blue>-- Question: for HTML, should we disallow in-line DTDs, allowing only externals?</font>
-<a name="(line266)"></a><font color=Blue>-- Answer: I think so.</font>
-<a name="(line267)"></a>
-<a name="(line268)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> HParser DocTypeDecl
-<a name="(line269)"></a>doctypedecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line270)"></a>    tok TokSpecialOpen
-<a name="(line271)"></a>    tok <font color=Cyan>(</font>TokSpecial DOCTYPEx<font color=Cyan>)</font>
-<a name="(line272)"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
-<a name="(line273)"></a>      n <font color=Red>&lt;-</font> name
-<a name="(line274)"></a>      eid <font color=Red>&lt;-</font> maybe externalid
-<a name="(line275)"></a><font color=Blue>--    es &lt;- maybe (bracket (tok TokSqOpen) (tok TokSqClose)) (many markupdecl)</font>
-<a name="(line276)"></a>      tok TokAnyClose  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing &gt; in DOCTYPE decl"</font>
-<a name="(line277)"></a><font color=Blue>--    return (DTD n eid (case es of { Nothing -&gt; []; Just e -&gt; e }))</font>
-<a name="(line278)"></a>      return <font color=Cyan>(</font>DTD n eid []<font color=Cyan>)</font>
-<a name="(line279)"></a>
-<a name="(line280)"></a><font color=Blue>--markupdecl :: HParser MarkupDecl</font>
-<a name="(line281)"></a><font color=Blue>--markupdecl =</font>
-<a name="(line282)"></a><font color=Blue>--    ( elementdecl &gt;&gt;= return . Element) `onFail`</font>
-<a name="(line283)"></a><font color=Blue>--    ( attlistdecl &gt;&gt;= return . AttList) `onFail`</font>
-<a name="(line284)"></a><font color=Blue>--    ( entitydecl &gt;&gt;= return . Entity) `onFail`</font>
-<a name="(line285)"></a><font color=Blue>--    ( notationdecl &gt;&gt;= return . Notation) `onFail`</font>
-<a name="(line286)"></a><font color=Blue>--    ( misc &gt;&gt;= return . MarkupMisc) `onFail`</font>
-<a name="(line287)"></a><font color=Blue>--    PEREF(MarkupPE,markupdecl)</font>
-<a name="(line288)"></a><font color=Blue>--</font>
-<a name="(line289)"></a><font color=Blue>--extsubset :: HParser ExtSubset</font>
-<a name="(line290)"></a><font color=Blue>--extsubset = do</font>
-<a name="(line291)"></a><font color=Blue>--    td &lt;- maybe textdecl</font>
-<a name="(line292)"></a><font color=Blue>--    ds &lt;- many extsubsetdecl</font>
-<a name="(line293)"></a><font color=Blue>--    return (ExtSubset td ds)</font>
-<a name="(line294)"></a><font color=Blue>--</font>
-<a name="(line295)"></a><font color=Blue>--extsubsetdecl :: HParser ExtSubsetDecl</font>
-<a name="(line296)"></a><font color=Blue>--extsubsetdecl =</font>
-<a name="(line297)"></a><font color=Blue>--    ( markupdecl &gt;&gt;= return . ExtMarkupDecl) `onFail`</font>
-<a name="(line298)"></a><font color=Blue>--    ( conditionalsect &gt;&gt;= return . ExtConditionalSect) `onFail`</font>
-<a name="(line299)"></a><font color=Blue>--    PEREF(ExtPEReference,extsubsetdecl)</font>
-<a name="(line300)"></a>
-<a name="(line301)"></a><a name="sddecl"></a>sddecl <font color=Red>::</font> HParser SDDecl
-<a name="(line302)"></a>sddecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line303)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"standalone"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"STANDALONE"</font><font color=Cyan>)</font>
-<a name="(line304)"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
-<a name="(line305)"></a>      tok TokEqual <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing = in 'standalone' decl"</font>
-<a name="(line306)"></a>      bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
-<a name="(line307)"></a>              <font color=Cyan>(</font> <font color=Cyan>(</font>word <font color=Magenta>"yes"</font> <font color=Cyan>&gt;&gt;</font> return True<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line308)"></a>                <font color=Cyan>(</font>word <font color=Magenta>"no"</font> <font color=Cyan>&gt;&gt;</font> return False<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line309)"></a>                failP <font color=Magenta>"'standalone' decl requires 'yes' or 'no' value"</font> <font color=Cyan>)</font>
-<a name="(line310)"></a>
-<a name="(line311)"></a>
-<a name="(line312)"></a>
-<a name="(line313)"></a>
-<a name="(line314)"></a><a name="Stack"></a><font color=Blue>----</font>
-<a name="(line315)"></a><a name="Stack"></a><font color=Blue>-- VERY IMPORTANT NOTE: The stack returned here contains those tags which</font>
-<a name="(line316)"></a><a name="Stack"></a><font color=Blue>-- have been closed implicitly and need to be reopened again at the</font>
-<a name="(line317)"></a><a name="Stack"></a><font color=Blue>-- earliest opportunity.</font>
-<a name="(line318)"></a><a name="Stack"></a><font color=Green><u>type</u></font> Stack <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>Attribute<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line319)"></a>
-<a name="(line320)"></a><a name="element"></a>element <font color=Red>::</font> Name <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Stack<font color=Cyan>,</font>Element Posn<font color=Cyan>)</font>
-<a name="(line321)"></a>element ctx <font color=Red>=</font>
-<a name="(line322)"></a>  <font color=Green><u>do</u></font>
-<a name="(line323)"></a>    tok TokAnyOpen
-<a name="(line324)"></a>    <font color=Cyan>(</font>ElemTag e avs<font color=Cyan>)</font> <font color=Red>&lt;-</font> elemtag
-<a name="(line325)"></a>    <font color=Cyan>(</font> <font color=Green><u>if</u></font> e <font color=Cyan>`closes`</font> ctx <font color=Green><u>then</u></font>
-<a name="(line326)"></a>         <font color=Blue>-- insert the missing close-tag, fail forward, and reparse.</font>
-<a name="(line327)"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> debug <font color=Cyan>(</font><font color=Magenta>"/"</font><font color=Cyan>)</font>
-<a name="(line328)"></a>              unparse <font color=Cyan>(</font><font color=Red>[</font>TokEndOpen<font color=Cyan>,</font> TokName ctx<font color=Cyan>,</font> TokAnyClose<font color=Cyan>,</font>
-<a name="(line329)"></a>                        TokAnyOpen<font color=Cyan>,</font> TokName e<font color=Red>]</font> <font color=Cyan>++</font> reformatAttrs avs<font color=Cyan>)</font>
-<a name="(line330)"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem <font color=Magenta>"null"</font> [] []<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line331)"></a>      <font color=Green><u>else</u></font> <font color=Green><u>if</u></font> e <font color=Cyan>`elem`</font> selfclosingtags <font color=Green><u>then</u></font>
-<a name="(line332)"></a>         <font color=Blue>-- complete the parse straightaway.</font>
-<a name="(line333)"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokEndClose	<font color=Blue>-- self-closing &lt;tag /&gt; </font>
-<a name="(line334)"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"[+]"</font><font color=Cyan>)</font>
-<a name="(line335)"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem e avs []<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line336)"></a>     <font color=Blue>--  ( do tok TokAnyClose	-- sequence &lt;tag&gt;&lt;/tag&gt;	(**not HTML?**)</font>
-<a name="(line337)"></a>     <font color=Blue>--       debug (e++"[+")</font>
-<a name="(line338)"></a>     <font color=Blue>--       n &lt;- bracket (tok TokEndOpen) (tok TokAnyClose) name</font>
-<a name="(line339)"></a>     <font color=Blue>--       debug "]"</font>
-<a name="(line340)"></a>     <font color=Blue>--       if e == (map toLower n :: Name) </font>
-<a name="(line341)"></a>     <font color=Blue>--         then return ([], Elem e avs [])      </font>
-<a name="(line342)"></a>     <font color=Blue>--         else return (error "no nesting in empty tag")) `onFail`</font>
-<a name="(line343)"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokAnyClose	<font color=Blue>-- &lt;tag&gt; with no close (e.g. &lt;IMG&gt;)</font>
-<a name="(line344)"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"[+]"</font><font color=Cyan>)</font>
-<a name="(line345)"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem e avs []<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line346)"></a>      <font color=Green><u>else</u></font>
-<a name="(line347)"></a>        <font color=Cyan>(</font><font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokEndClose
-<a name="(line348)"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"[]"</font><font color=Cyan>)</font>
-<a name="(line349)"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem e avs []<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line350)"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokAnyClose <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing &gt; or /&gt; in element tag"</font>
-<a name="(line351)"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"["</font><font color=Cyan>)</font>
-<a name="(line352)"></a>           <font color=Blue>-- zz &lt;- many (content e)</font>
-<a name="(line353)"></a>           <font color=Blue>-- n &lt;- bracket (tok TokEndOpen) (tok TokAnyClose) name</font>
-<a name="(line354)"></a>              zz <font color=Red>&lt;-</font> manyFinally <font color=Cyan>(</font>content e<font color=Cyan>)</font>
-<a name="(line355)"></a>                                <font color=Cyan>(</font>tok TokEndOpen<font color=Cyan>)</font>
-<a name="(line356)"></a>              n <font color=Red>&lt;-</font> name
-<a name="(line357)"></a>              commit <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font>
-<a name="(line358)"></a>              debug <font color=Magenta>"]"</font>
-<a name="(line359)"></a>              <font color=Green><u>let</u></font> <font color=Cyan>(</font>ss<font color=Cyan>,</font>cs<font color=Cyan>)</font> <font color=Red>=</font> unzip zz
-<a name="(line360)"></a>              <font color=Green><u>let</u></font> s       <font color=Red>=</font> <font color=Green><u>if</u></font> null ss <font color=Green><u>then</u></font> [] <font color=Green><u>else</u></font> last ss
-<a name="(line361)"></a>              <font color=Cyan>(</font> <font color=Green><u>if</u></font> e <font color=Cyan>==</font> <font color=Cyan>(</font>map toLower n <font color=Red>::</font> Name<font color=Cyan>)</font> <font color=Green><u>then</u></font>
-<a name="(line362)"></a>                  <font color=Green><u>do</u></font> unparse <font color=Cyan>(</font>reformatTags <font color=Cyan>(</font>closeInner e s<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line363)"></a>                     debug <font color=Magenta>"^"</font>
-<a name="(line364)"></a>                     return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem e avs cs<font color=Cyan>)</font>
-<a name="(line365)"></a>                <font color=Green><u>else</u></font>
-<a name="(line366)"></a>                  <font color=Green><u>do</u></font> unparse <font color=Red>[</font>TokEndOpen<font color=Cyan>,</font> TokName n<font color=Cyan>,</font> TokAnyClose<font color=Red>]</font>
-<a name="(line367)"></a>                     debug <font color=Magenta>"-"</font>
-<a name="(line368)"></a>                     return <font color=Cyan>(</font><font color=Cyan>(</font><font color=Cyan>(</font>e<font color=Cyan>,</font>avs<font color=Cyan>)</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font><font color=Cyan>,</font> Elem e avs cs<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line369)"></a>         <font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failP <font color=Cyan>(</font><font color=Magenta>"failed to repair non-matching tags in context: "</font><font color=Cyan>++</font>ctx<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line370)"></a>
-<a name="(line371)"></a><a name="closeInner"></a>closeInner <font color=Red>::</font> Name <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>Attribute<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>Attribute<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line372)"></a>closeInner c ts <font color=Red>=</font>
-<a name="(line373)"></a>    <font color=Green><u>case</u></font> lookup c closeInnerTags <font color=Green><u>of</u></font>
-<a name="(line374)"></a>      <font color=Cyan>(</font>Just these<font color=Cyan>)</font> <font color=Red>-&gt;</font> filter <font color=Cyan>(</font><font color=Cyan>(</font><font color=Cyan>`notElem`</font> these<font color=Cyan>)</font><font color=Cyan>.</font>fst<font color=Cyan>)</font> ts
-<a name="(line375)"></a>      Nothing      <font color=Red>-&gt;</font> ts
-<a name="(line376)"></a>
-<a name="(line377)"></a><a name="unparse"></a>unparse ts <font color=Red>=</font> <font color=Green><u>do</u></font> p <font color=Red>&lt;-</font> posn
-<a name="(line378)"></a>                reparse <font color=Cyan>(</font>zip <font color=Cyan>(</font>repeat p<font color=Cyan>)</font> ts<font color=Cyan>)</font>
-<a name="(line379)"></a>
-<a name="(line380)"></a><a name="reformatAttrs"></a>reformatAttrs avs <font color=Red>=</font> concatMap f0 avs
-<a name="(line381)"></a>    <font color=Green><u>where</u></font> f0 <font color=Cyan>(</font>a<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=Red>[</font>TokName a<font color=Cyan>,</font> TokEqual<font color=Cyan>,</font> TokQuote<font color=Cyan>,</font>
-<a name="(line382)"></a>                                       TokFreeText <font color=Cyan>(</font>show v<font color=Cyan>)</font><font color=Cyan>,</font> TokQuote<font color=Red>]</font>
-<a name="(line383)"></a><a name="reformatTags"></a>reformatTags ts <font color=Red>=</font> concatMap f0 ts
-<a name="(line384)"></a>    <font color=Green><u>where</u></font> f0 <font color=Cyan>(</font>t<font color=Cyan>,</font>avs<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>TokAnyOpen<font color=Cyan>,</font> TokName t<font color=Red>]</font><font color=Cyan>++</font>reformatAttrs avs<font color=Cyan>++</font><font color=Red>[</font>TokAnyClose<font color=Red>]</font>
-<a name="(line385)"></a>
-<a name="(line386)"></a><a name="content"></a>content <font color=Red>::</font> Name <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Stack<font color=Cyan>,</font>Content Posn<font color=Cyan>)</font>
-<a name="(line387)"></a>content ctx <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn <font color=Cyan>;</font> content' p ctx <font color=Cyan>}</font>
-<a name="(line388)"></a>  <font color=Green><u>where</u></font> content' p ctx <font color=Red>=</font> oneOf'
-<a name="(line389)"></a>          <font color=Red>[</font> <font color=Cyan>(</font> <font color=Magenta>"element"</font><font color=Cyan>,</font> element ctx <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font><font color=Cyan>(</font>s<font color=Cyan>,</font>e<font color=Cyan>)</font><font color=Red>-&gt;</font> return <font color=Cyan>(</font>s<font color=Cyan>,</font> CElem e p<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line390)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"chardata"</font><font color=Cyan>,</font> chardata <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>s<font color=Red>-&gt;</font> return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CString False s p<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line391)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"reference"</font><font color=Cyan>,</font> reference <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>r<font color=Red>-&gt;</font> return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CRef r p<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line392)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"cdsect"</font><font color=Cyan>,</font> cdsect <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>c<font color=Red>-&gt;</font> return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CString True c p<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line393)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"misc"</font><font color=Cyan>,</font> misc <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>m<font color=Red>-&gt;</font>  return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CMisc m p<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line394)"></a>          <font color=Red>]</font> <font color=Cyan>`adjustErrP`</font> <font color=Cyan>(</font><font color=Magenta>"when looking for a content item,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line395)"></a>
-<a name="(line396)"></a><a name="elemtag"></a><font color=Blue>----</font>
-<a name="(line397)"></a>elemtag <font color=Red>::</font> HParser ElemTag
-<a name="(line398)"></a>elemtag <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line399)"></a>    n <font color=Red>&lt;-</font> name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"malformed element tag\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line400)"></a>    <font color=Green><u>as</u></font> <font color=Red>&lt;-</font> many attribute
-<a name="(line401)"></a>    return <font color=Cyan>(</font>ElemTag <font color=Cyan>(</font>map toLower n<font color=Cyan>)</font> <font color=Green><u>as</u></font><font color=Cyan>)</font>
-<a name="(line402)"></a>
-<a name="(line403)"></a><a name="attribute"></a>attribute <font color=Red>::</font> HParser Attribute
-<a name="(line404)"></a>attribute <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line405)"></a>    n <font color=Red>&lt;-</font> name
-<a name="(line406)"></a>    v <font color=Red>&lt;-</font> <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokEqual
-<a name="(line407)"></a>             attvalue<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line408)"></a>         <font color=Cyan>(</font>return <font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Magenta>"TRUE"</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line409)"></a>    return <font color=Cyan>(</font>map toLower n<font color=Cyan>,</font>v<font color=Cyan>)</font>
-<a name="(line410)"></a>
-<a name="(line411)"></a><font color=Blue>--elementdecl :: HParser ElementDecl</font>
-<a name="(line412)"></a><font color=Blue>--elementdecl = do</font>
-<a name="(line413)"></a><font color=Blue>--    tok TokSpecialOpen</font>
-<a name="(line414)"></a><font color=Blue>--    tok (TokSpecial ELEMENTx)</font>
-<a name="(line415)"></a><font color=Blue>--    n &lt;- name `onFail` failP "missing identifier in ELEMENT decl"</font>
-<a name="(line416)"></a><font color=Blue>--    c &lt;- contentspec `onFail` failP "missing content spec in ELEMENT decl"</font>
-<a name="(line417)"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating ELEMENT decl"</font>
-<a name="(line418)"></a><font color=Blue>--    return (ElementDecl n c)</font>
-<a name="(line419)"></a><font color=Blue>--</font>
-<a name="(line420)"></a><font color=Blue>--contentspec :: HParser ContentSpec</font>
-<a name="(line421)"></a><font color=Blue>--contentspec =</font>
-<a name="(line422)"></a><font color=Blue>--    ( word "EMPTY" &gt;&gt; return EMPTY) `onFail`</font>
-<a name="(line423)"></a><font color=Blue>--    ( word "ANY" &gt;&gt; return ANY) `onFail`</font>
-<a name="(line424)"></a><font color=Blue>--    ( mixed &gt;&gt;= return . Mixed) `onFail`</font>
-<a name="(line425)"></a><font color=Blue>--    ( cp &gt;&gt;= return . ContentSpec) `onFail`</font>
-<a name="(line426)"></a><font color=Blue>--    PEREF(ContentPE,contentspec)</font>
-<a name="(line427)"></a><font color=Blue>--</font>
-<a name="(line428)"></a><font color=Blue>--choice :: HParser [CP]</font>
-<a name="(line429)"></a><font color=Blue>--choice = do</font>
-<a name="(line430)"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
-<a name="(line431)"></a><font color=Blue>--            (cp `sepby1` (tok TokPipe))</font>
-<a name="(line432)"></a><font color=Blue>--</font>
-<a name="(line433)"></a><font color=Blue>--sequence :: HParser [CP]</font>
-<a name="(line434)"></a><font color=Blue>--sequence = do</font>
-<a name="(line435)"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
-<a name="(line436)"></a><font color=Blue>--            (cp `sepby1` (tok TokComma))</font>
-<a name="(line437)"></a><font color=Blue>--</font>
-<a name="(line438)"></a><font color=Blue>--cp :: HParser CP</font>
-<a name="(line439)"></a><font color=Blue>--cp =</font>
-<a name="(line440)"></a><font color=Blue>--    ( do n &lt;- name</font>
-<a name="(line441)"></a><font color=Blue>--         m &lt;- modifier</font>
-<a name="(line442)"></a><font color=Blue>--         return (TagName n m)) `onFail`</font>
-<a name="(line443)"></a><font color=Blue>--    ( do ss &lt;- sequence</font>
-<a name="(line444)"></a><font color=Blue>--         m &lt;- modifier</font>
-<a name="(line445)"></a><font color=Blue>--         return (Seq ss m)) `onFail`</font>
-<a name="(line446)"></a><font color=Blue>--    ( do cs &lt;- choice</font>
-<a name="(line447)"></a><font color=Blue>--         m &lt;- modifier</font>
-<a name="(line448)"></a><font color=Blue>--         return (Choice cs m)) `onFail`</font>
-<a name="(line449)"></a><font color=Blue>--    PEREF(CPPE,cp)</font>
-<a name="(line450)"></a><font color=Blue>--</font>
-<a name="(line451)"></a><font color=Blue>--modifier :: HParser Modifier</font>
-<a name="(line452)"></a><font color=Blue>--modifier =</font>
-<a name="(line453)"></a><font color=Blue>--    ( tok TokStar &gt;&gt; return Star) `onFail`</font>
-<a name="(line454)"></a><font color=Blue>--    ( tok TokQuery &gt;&gt; return Query) `onFail`</font>
-<a name="(line455)"></a><font color=Blue>--    ( tok TokPlus &gt;&gt; return Plus) `onFail`</font>
-<a name="(line456)"></a><font color=Blue>--    ( return None)</font>
-<a name="(line457)"></a><font color=Blue>--</font>
-<a name="(line458)"></a><font color=Blue>--mixed :: HParser Mixed</font>
-<a name="(line459)"></a><font color=Blue>--mixed = do</font>
-<a name="(line460)"></a><font color=Blue>--    tok TokBraOpen</font>
-<a name="(line461)"></a><font color=Blue>--    tok TokHash</font>
-<a name="(line462)"></a><font color=Blue>--    word "PCDATA"</font>
-<a name="(line463)"></a><font color=Blue>--    cont</font>
-<a name="(line464)"></a><font color=Blue>--  where</font>
-<a name="(line465)"></a><font color=Blue>--    cont = ( tok TokBraClose &gt;&gt; return PCDATA) `onFail`</font>
-<a name="(line466)"></a><font color=Blue>--           ( do cs &lt;- many ( do tok TokPipe</font>
-<a name="(line467)"></a><font color=Blue>--                                n &lt;- name</font>
-<a name="(line468)"></a><font color=Blue>--                                return n)</font>
-<a name="(line469)"></a><font color=Blue>--                tok TokBraClose</font>
-<a name="(line470)"></a><font color=Blue>--                tok TokStar</font>
-<a name="(line471)"></a><font color=Blue>--                return (PCDATAplus cs))</font>
-<a name="(line472)"></a><font color=Blue>--</font>
-<a name="(line473)"></a><font color=Blue>--attlistdecl :: HParser AttListDecl</font>
-<a name="(line474)"></a><font color=Blue>--attlistdecl = do</font>
-<a name="(line475)"></a><font color=Blue>--    tok TokSpecialOpen</font>
-<a name="(line476)"></a><font color=Blue>--    tok (TokSpecial ATTLISTx)</font>
-<a name="(line477)"></a><font color=Blue>--    n &lt;- name `onFail` failP "missing identifier in ATTLIST"</font>
-<a name="(line478)"></a><font color=Blue>--    ds &lt;- many attdef</font>
-<a name="(line479)"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "missing &gt; terminating ATTLIST"</font>
-<a name="(line480)"></a><font color=Blue>--    return (AttListDecl n ds)</font>
-<a name="(line481)"></a><font color=Blue>--</font>
-<a name="(line482)"></a><font color=Blue>--attdef :: HParser AttDef</font>
-<a name="(line483)"></a><font color=Blue>--attdef = do</font>
-<a name="(line484)"></a><font color=Blue>--    n &lt;- name</font>
-<a name="(line485)"></a><font color=Blue>--    t &lt;- atttype `onFail` failP "missing attribute type in attlist defn"</font>
-<a name="(line486)"></a><font color=Blue>--    d &lt;- defaultdecl</font>
-<a name="(line487)"></a><font color=Blue>--    return (AttDef n t d)</font>
-<a name="(line488)"></a><font color=Blue>--</font>
-<a name="(line489)"></a><font color=Blue>--atttype :: HParser AttType</font>
-<a name="(line490)"></a><font color=Blue>--atttype =</font>
-<a name="(line491)"></a><font color=Blue>--    ( word "CDATA" &gt;&gt; return StringType) `onFail`</font>
-<a name="(line492)"></a><font color=Blue>--    ( tokenizedtype &gt;&gt;= return . TokenizedType) `onFail`</font>
-<a name="(line493)"></a><font color=Blue>--    ( enumeratedtype &gt;&gt;= return . EnumeratedType)</font>
-<a name="(line494)"></a><font color=Blue>--</font>
-<a name="(line495)"></a><font color=Blue>--tokenizedtype :: HParser TokenizedType</font>
-<a name="(line496)"></a><font color=Blue>--tokenizedtype =</font>
-<a name="(line497)"></a><font color=Blue>--    ( word "ID" &gt;&gt; return ID) `onFail`</font>
-<a name="(line498)"></a><font color=Blue>--    ( word "IDREF" &gt;&gt; return IDREF) `onFail`</font>
-<a name="(line499)"></a><font color=Blue>--    ( word "IDREFS" &gt;&gt; return IDREFS) `onFail`</font>
-<a name="(line500)"></a><font color=Blue>--    ( word "ENTITY" &gt;&gt; return ENTITY) `onFail`</font>
-<a name="(line501)"></a><font color=Blue>--    ( word "ENTITIES" &gt;&gt; return ENTITIES) `onFail`</font>
-<a name="(line502)"></a><font color=Blue>--    ( word "NMTOKEN" &gt;&gt; return NMTOKEN) `onFail`</font>
-<a name="(line503)"></a><font color=Blue>--    ( word "NMTOKENS" &gt;&gt; return NMTOKENS)</font>
-<a name="(line504)"></a><font color=Blue>--</font>
-<a name="(line505)"></a><font color=Blue>--enumeratedtype :: HParser EnumeratedType</font>
-<a name="(line506)"></a><font color=Blue>--enumeratedtype =</font>
-<a name="(line507)"></a><font color=Blue>--    ( notationtype &gt;&gt;= return . NotationType) `onFail`</font>
-<a name="(line508)"></a><font color=Blue>--    ( enumeration &gt;&gt;= return . Enumeration)</font>
-<a name="(line509)"></a><font color=Blue>--</font>
-<a name="(line510)"></a><font color=Blue>--notationtype :: HParser NotationType</font>
-<a name="(line511)"></a><font color=Blue>--notationtype = do</font>
-<a name="(line512)"></a><font color=Blue>--    word "NOTATION"</font>
-<a name="(line513)"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
-<a name="(line514)"></a><font color=Blue>--            (name `sepby1` (tok TokPipe))</font>
-<a name="(line515)"></a><font color=Blue>--</font>
-<a name="(line516)"></a><font color=Blue>--enumeration :: HParser Enumeration</font>
-<a name="(line517)"></a><font color=Blue>--enumeration =</font>
-<a name="(line518)"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
-<a name="(line519)"></a><font color=Blue>--            (nmtoken `sepby1` (tok TokPipe))</font>
-<a name="(line520)"></a><font color=Blue>--</font>
-<a name="(line521)"></a><font color=Blue>--defaultdecl :: HParser DefaultDecl</font>
-<a name="(line522)"></a><font color=Blue>--defaultdecl =</font>
-<a name="(line523)"></a><font color=Blue>--    ( tok TokHash &gt;&gt; word "REQUIRED" &gt;&gt; return REQUIRED) `onFail`</font>
-<a name="(line524)"></a><font color=Blue>--    ( tok TokHash &gt;&gt; word "IMPLIED" &gt;&gt; return IMPLIED) `onFail`</font>
-<a name="(line525)"></a><font color=Blue>--    ( do f &lt;- maybe (tok TokHash &gt;&gt; word "FIXED" &gt;&gt; return FIXED)</font>
-<a name="(line526)"></a><font color=Blue>--         a &lt;- attvalue</font>
-<a name="(line527)"></a><font color=Blue>--         return (DefaultTo a f))</font>
-<a name="(line528)"></a><font color=Blue>--</font>
-<a name="(line529)"></a><font color=Blue>--conditionalsect :: HParser ConditionalSect</font>
-<a name="(line530)"></a><font color=Blue>--conditionalsect =</font>
-<a name="(line531)"></a><font color=Blue>--    ( do tok TokSectionOpen</font>
-<a name="(line532)"></a><font color=Blue>--         tok (TokSection INCLUDEx)</font>
-<a name="(line533)"></a><font color=Blue>--         tok TokSqOpen `onFail` failP "missing [ after INCLUDE"</font>
-<a name="(line534)"></a><font color=Blue>--         i &lt;- extsubsetdecl `onFail` failP "missing ExtSubsetDecl in INCLUDE"</font>
-<a name="(line535)"></a><font color=Blue>--         tok TokSectionClose `onFail` failP "missing ] after INCLUDE"</font>
-<a name="(line536)"></a><font color=Blue>--         return (IncludeSect i)) `onFail`</font>
-<a name="(line537)"></a><font color=Blue>--    ( do tok TokSectionOpen</font>
-<a name="(line538)"></a><font color=Blue>--         tok (TokSection IGNOREx)</font>
-<a name="(line539)"></a><font color=Blue>--         tok TokSqOpen `onFail` failP "missing [ after IGNORE"</font>
-<a name="(line540)"></a><font color=Blue>--         i &lt;- many ignoresectcontents</font>
-<a name="(line541)"></a><font color=Blue>--         tok TokSectionClose `onFail` failP "missing ] after IGNORE"</font>
-<a name="(line542)"></a><font color=Blue>--         return (IgnoreSect i))</font>
-<a name="(line543)"></a><font color=Blue>--</font>
-<a name="(line544)"></a><font color=Blue>--ignoresectcontents :: HParser IgnoreSectContents</font>
-<a name="(line545)"></a><font color=Blue>--ignoresectcontents = do</font>
-<a name="(line546)"></a><font color=Blue>--    i &lt;- ignore</font>
-<a name="(line547)"></a><font color=Blue>--    is &lt;- many (do tok TokSectionOpen</font>
-<a name="(line548)"></a><font color=Blue>--                   ic &lt;- ignoresectcontents</font>
-<a name="(line549)"></a><font color=Blue>--                   tok TokSectionClose</font>
-<a name="(line550)"></a><font color=Blue>--                   ig &lt;- ignore</font>
-<a name="(line551)"></a><font color=Blue>--                   return (ic,ig))</font>
-<a name="(line552)"></a><font color=Blue>--    return (IgnoreSectContents i is)</font>
-<a name="(line553)"></a><font color=Blue>--</font>
-<a name="(line554)"></a><font color=Blue>--ignore :: HParser Ignore</font>
-<a name="(line555)"></a><font color=Blue>--ignore = freetext &gt;&gt;= return . Ignore</font>
-<a name="(line556)"></a>
-<a name="(line557)"></a><a name="reference"></a>reference <font color=Red>::</font> HParser Reference
-<a name="(line558)"></a>reference <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line559)"></a>    bracket <font color=Cyan>(</font>tok TokAmp<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSemi<font color=Cyan>)</font> <font color=Cyan>(</font>freetext <font color=Cyan>&gt;&gt;=</font> val<font color=Cyan>)</font>
-<a name="(line560)"></a>  <font color=Green><u>where</u></font>
-<a name="(line561)"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font><font color=Magenta>'x'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font> <font color=Red>|</font> all isHexDigit i
-<a name="(line562)"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readHex <font color=Cyan>$</font> i
-<a name="(line563)"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font>     <font color=Red>|</font> all isDigit i
-<a name="(line564)"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readDec <font color=Cyan>$</font> i
-<a name="(line565)"></a>    val name        <font color=Red>=</font> return <font color=Cyan>.</font> RefEntity <font color=Cyan>$</font> name
-<a name="(line566)"></a>
-<a name="(line567)"></a><font color=Blue>{-
-<a name="(line568)"></a>reference :: HParser Reference
-<a name="(line569)"></a>reference =
-<a name="(line570)"></a>    ( charref &gt;&gt;= return . RefChar) `onFail`
-<a name="(line571)"></a>    ( entityref &gt;&gt;= return . RefEntity)
-<a name="(line572)"></a>
-<a name="(line573)"></a>entityref :: HParser EntityRef
-<a name="(line574)"></a>entityref = do
-<a name="(line575)"></a>    n &lt;- bracket (tok TokAmp) (tok TokSemi) name
-<a name="(line576)"></a>    return n
-<a name="(line577)"></a>
-<a name="(line578)"></a>charref :: HParser CharRef
-<a name="(line579)"></a>charref = do
-<a name="(line580)"></a>    bracket (tok TokAmp) (tok TokSemi) (freetext &gt;&gt;= readCharVal)
-<a name="(line581)"></a>  where
-<a name="(line582)"></a>    readCharVal ('#':'x':i) = return . fst . head . readHex $ i
-<a name="(line583)"></a>    readCharVal ('#':i)     = return . fst . head . readDec $ i
-<a name="(line584)"></a>    readCharVal _           = mzero
-<a name="(line585)"></a>-}</font>
-<a name="(line586)"></a>
-<a name="(line587)"></a><font color=Blue>--pereference :: HParser PEReference</font>
-<a name="(line588)"></a><font color=Blue>--pereference = do</font>
-<a name="(line589)"></a><font color=Blue>--    bracket (tok TokPercent) (tok TokSemi) nmtoken</font>
-<a name="(line590)"></a><font color=Blue>--</font>
-<a name="(line591)"></a><font color=Blue>--entitydecl :: HParser EntityDecl</font>
-<a name="(line592)"></a><font color=Blue>--entitydecl =</font>
-<a name="(line593)"></a><font color=Blue>--    ( gedecl &gt;&gt;= return . EntityGEDecl) `onFail`</font>
-<a name="(line594)"></a><font color=Blue>--    ( pedecl &gt;&gt;= return . EntityPEDecl)</font>
-<a name="(line595)"></a><font color=Blue>--</font>
-<a name="(line596)"></a><font color=Blue>--gedecl :: HParser GEDecl</font>
-<a name="(line597)"></a><font color=Blue>--gedecl = do</font>
-<a name="(line598)"></a><font color=Blue>--    tok TokSpecialOpen</font>
-<a name="(line599)"></a><font color=Blue>--    tok (TokSpecial ENTITYx)</font>
-<a name="(line600)"></a><font color=Blue>--    n &lt;- name</font>
-<a name="(line601)"></a><font color=Blue>--    e &lt;- entitydef `onFail` failP "missing entity defn in G ENTITY decl"</font>
-<a name="(line602)"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating G ENTITY decl"</font>
-<a name="(line603)"></a><font color=Blue>--    return (GEDecl n e)</font>
-<a name="(line604)"></a><font color=Blue>--</font>
-<a name="(line605)"></a><font color=Blue>--pedecl :: HParser PEDecl</font>
-<a name="(line606)"></a><font color=Blue>--pedecl = do</font>
-<a name="(line607)"></a><font color=Blue>--    tok TokSpecialOpen</font>
-<a name="(line608)"></a><font color=Blue>--    tok (TokSpecial ENTITYx)</font>
-<a name="(line609)"></a><font color=Blue>--    tok TokPercent</font>
-<a name="(line610)"></a><font color=Blue>--    n &lt;- name</font>
-<a name="(line611)"></a><font color=Blue>--    e &lt;- pedef `onFail` failP "missing entity defn in P ENTITY decl"</font>
-<a name="(line612)"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating P ENTITY decl"</font>
-<a name="(line613)"></a><font color=Blue>--    return (PEDecl n e)</font>
-<a name="(line614)"></a><font color=Blue>--</font>
-<a name="(line615)"></a><font color=Blue>--entitydef :: HParser EntityDef</font>
-<a name="(line616)"></a><font color=Blue>--entitydef =</font>
-<a name="(line617)"></a><font color=Blue>--    ( entityvalue &gt;&gt;= return . DefEntityValue) `onFail`</font>
-<a name="(line618)"></a><font color=Blue>--    ( do eid &lt;- externalid</font>
-<a name="(line619)"></a><font color=Blue>--         ndd &lt;- maybe ndatadecl</font>
-<a name="(line620)"></a><font color=Blue>--         return (DefExternalID eid ndd))</font>
-<a name="(line621)"></a><font color=Blue>--</font>
-<a name="(line622)"></a><font color=Blue>--pedef :: HParser PEDef</font>
-<a name="(line623)"></a><font color=Blue>--pedef =</font>
-<a name="(line624)"></a><font color=Blue>--    ( entityvalue &gt;&gt;= return . PEDefEntityValue) `onFail`</font>
-<a name="(line625)"></a><font color=Blue>--    ( externalid &gt;&gt;= return . PEDefExternalID)</font>
-<a name="(line626)"></a>
-<a name="(line627)"></a><a name="externalid"></a>externalid <font color=Red>::</font> HParser ExternalID
-<a name="(line628)"></a>externalid <font color=Red>=</font>
-<a name="(line629)"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> word <font color=Magenta>"SYSTEM"</font>
-<a name="(line630)"></a>         s <font color=Red>&lt;-</font> systemliteral
-<a name="(line631)"></a>         return <font color=Cyan>(</font>SYSTEM s<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line632)"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> word <font color=Magenta>"PUBLIC"</font>
-<a name="(line633)"></a>         p <font color=Red>&lt;-</font> pubidliteral
-<a name="(line634)"></a>         s <font color=Red>&lt;-</font> <font color=Cyan>(</font>systemliteral <font color=Cyan>`onFail`</font> return <font color=Cyan>(</font>SystemLiteral <font color=Magenta>""</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line635)"></a>         return <font color=Cyan>(</font>PUBLIC p s<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line636)"></a>
-<a name="(line637)"></a><font color=Blue>--ndatadecl :: HParser NDataDecl</font>
-<a name="(line638)"></a><font color=Blue>--ndatadecl = do</font>
-<a name="(line639)"></a><font color=Blue>--    word "NDATA"</font>
-<a name="(line640)"></a><font color=Blue>--    n &lt;- name</font>
-<a name="(line641)"></a><font color=Blue>--    return (NDATA n)</font>
-<a name="(line642)"></a>
-<a name="(line643)"></a><a name="textdecl"></a>textdecl <font color=Red>::</font> HParser TextDecl
-<a name="(line644)"></a>textdecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line645)"></a>    tok TokPIOpen
-<a name="(line646)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
-<a name="(line647)"></a>    v <font color=Red>&lt;-</font> maybe versioninfo
-<a name="(line648)"></a>    e <font color=Red>&lt;-</font> encodingdecl
-<a name="(line649)"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failP <font color=Magenta>"expected ?&gt; terminating text decl"</font>
-<a name="(line650)"></a>    return <font color=Cyan>(</font>TextDecl v e<font color=Cyan>)</font>
-<a name="(line651)"></a>
-<a name="(line652)"></a><font color=Blue>--extparsedent :: HParser ExtParsedEnt</font>
-<a name="(line653)"></a><font color=Blue>--extparsedent = do</font>
-<a name="(line654)"></a><font color=Blue>--    t &lt;- maybe textdecl</font>
-<a name="(line655)"></a><font color=Blue>--    (_,c) &lt;- (content "")</font>
-<a name="(line656)"></a><font color=Blue>--    return (ExtParsedEnt t c)</font>
-<a name="(line657)"></a><font color=Blue>--</font>
-<a name="(line658)"></a><font color=Blue>--extpe :: HParser ExtPE</font>
-<a name="(line659)"></a><font color=Blue>--extpe = do</font>
-<a name="(line660)"></a><font color=Blue>--    t &lt;- maybe textdecl</font>
-<a name="(line661)"></a><font color=Blue>--    e &lt;- extsubsetdecl</font>
-<a name="(line662)"></a><font color=Blue>--    return (ExtPE t e)</font>
-<a name="(line663)"></a>
-<a name="(line664)"></a><a name="encodingdecl"></a>encodingdecl <font color=Red>::</font> HParser EncodingDecl
-<a name="(line665)"></a>encodingdecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line666)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"encoding"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"ENCODING"</font><font color=Cyan>)</font>
-<a name="(line667)"></a>    tok TokEqual <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"expected = in 'encoding' decl"</font>
-<a name="(line668)"></a>    f <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line669)"></a>    return <font color=Cyan>(</font>EncodingDecl f<font color=Cyan>)</font>
-<a name="(line670)"></a>
-<a name="(line671)"></a><font color=Blue>--notationdecl :: HParser NotationDecl</font>
-<a name="(line672)"></a><font color=Blue>--notationdecl = do</font>
-<a name="(line673)"></a><font color=Blue>--    tok TokSpecialOpen</font>
-<a name="(line674)"></a><font color=Blue>--    word "NOTATION"</font>
-<a name="(line675)"></a><font color=Blue>--    n &lt;- name</font>
-<a name="(line676)"></a><font color=Blue>--    e &lt;- either externalid publicid</font>
-<a name="(line677)"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating NOTATION decl"</font>
-<a name="(line678)"></a><font color=Blue>--    return (NOTATION n e)</font>
-<a name="(line679)"></a>
-<a name="(line680)"></a><a name="publicid"></a>publicid <font color=Red>::</font> HParser PublicID
-<a name="(line681)"></a>publicid <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line682)"></a>    word <font color=Magenta>"PUBLICID"</font>
-<a name="(line683)"></a>    p <font color=Red>&lt;-</font> pubidliteral
-<a name="(line684)"></a>    return <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>
-<a name="(line685)"></a>
-<a name="(line686)"></a><a name="entityvalue"></a>entityvalue <font color=Red>::</font> HParser EntityValue
-<a name="(line687)"></a>entityvalue <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line688)"></a>    evs <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>many ev<font color=Cyan>)</font>
-<a name="(line689)"></a>    return <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>
-<a name="(line690)"></a>
-<a name="(line691)"></a><a name="ev"></a>ev <font color=Red>::</font> HParser EV
-<a name="(line692)"></a>ev <font color=Red>=</font>
-<a name="(line693)"></a>    <font color=Cyan>(</font> freetext <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVString<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line694)"></a><font color=Blue>--  PEREF(EVPERef,ev) `onFail`</font>
-<a name="(line695)"></a>    <font color=Cyan>(</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVRef<font color=Cyan>)</font>
-<a name="(line696)"></a>
-<a name="(line697)"></a><a name="attvalue"></a>attvalue <font color=Red>::</font> HParser AttValue
-<a name="(line698)"></a>attvalue <font color=Red>=</font>
-<a name="(line699)"></a>  <font color=Cyan>(</font> <font color=Green><u>do</u></font> avs <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
-<a name="(line700)"></a>                      <font color=Cyan>(</font>many <font color=Cyan>(</font>either freetext reference<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line701)"></a>       return <font color=Cyan>(</font>AttValue avs<font color=Cyan>)</font> <font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line702)"></a>  <font color=Cyan>(</font> <font color=Green><u>do</u></font> v <font color=Red>&lt;-</font> nmtoken
-<a name="(line703)"></a>       s <font color=Red>&lt;-</font> <font color=Cyan>(</font>tok TokPercent <font color=Cyan>&gt;&gt;</font> return <font color=Magenta>"%"</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font> return <font color=Magenta>""</font>
-<a name="(line704)"></a>       return <font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Cyan>(</font>v<font color=Cyan>++</font>s<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line705)"></a>  <font color=Cyan>(</font> <font color=Green><u>do</u></font> s <font color=Red>&lt;-</font> oneOf <font color=Red>[</font> tok TokPlus <font color=Cyan>&gt;&gt;</font> return <font color=Magenta>"+"</font>
-<a name="(line706)"></a>                  <font color=Cyan>,</font> tok TokHash <font color=Cyan>&gt;&gt;</font> return <font color=Magenta>"#"</font>
-<a name="(line707)"></a>                  <font color=Red>]</font>
-<a name="(line708)"></a>       v <font color=Red>&lt;-</font> nmtoken
-<a name="(line709)"></a>       return <font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Cyan>(</font>s<font color=Cyan>++</font>v<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line710)"></a>  failP <font color=Magenta>"Badly formatted attribute value"</font>
-<a name="(line711)"></a>
-<a name="(line712)"></a><a name="systemliteral"></a>systemliteral <font color=Red>::</font> HParser SystemLiteral
-<a name="(line713)"></a>systemliteral <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line714)"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line715)"></a>    return <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>		<font color=Blue>-- note: need to fold &amp;...; escapes</font>
-<a name="(line716)"></a>
-<a name="(line717)"></a><a name="pubidliteral"></a>pubidliteral <font color=Red>::</font> HParser PubidLiteral
-<a name="(line718)"></a>pubidliteral <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line719)"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line720)"></a>    return <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>		<font color=Blue>-- note: need to fold &amp;...; escapes</font>
-<a name="(line721)"></a>
-<a name="(line722)"></a><a name="chardata"></a>chardata <font color=Red>::</font> HParser CharData
-<a name="(line723)"></a>chardata <font color=Red>=</font> freetext <font color=Blue>-- &gt;&gt;= return . CharData</font>
-<a name="(line724)"></a>
-</pre>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Html/Parse.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | This is a parser for HTML documents.  Unlike for XML documents, it</font>
+<a name="line-2"></a><font color=Blue>--   must include a certain amount of error-correction to account for</font>
+<a name="line-3"></a><font color=Blue>--   HTML features like self-terminating tags, unterminated tags, and</font>
+<a name="line-4"></a><font color=Blue>--   incorrect nesting.  The input is tokenised by the</font>
+<a name="line-5"></a><font color=Blue>--   XML lexer (a separate lexer is not required for HTML).</font>
+<a name="line-6"></a>
+<a name="line-7"></a><font color=Blue>-- It uses a slightly extended version of the Hutton/Meijer parser</font>
+<a name="line-8"></a><font color=Blue>-- combinators.</font>
+<a name="line-9"></a>
+<a name="line-10"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Parse
+<a name="line-11"></a>  <font color=Cyan>(</font> htmlParse
+<a name="line-12"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-13"></a>
+<a name="line-14"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>either<font color=Cyan>,</font>maybe<font color=Cyan>,</font>sequence<font color=Cyan>)</font>
+<a name="line-15"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Prelude <font color=Cyan>(</font>either<font color=Cyan>)</font>
+<a name="line-16"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
+<a name="line-17"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>toLower<font color=Cyan>,</font> isSpace<font color=Cyan>,</font> isDigit<font color=Cyan>,</font> isHexDigit<font color=Cyan>)</font>
+<a name="line-18"></a><font color=Green><u>import</u></font> Numeric <font color=Cyan>(</font>readDec<font color=Cyan>,</font>readHex<font color=Cyan>)</font>
+<a name="line-19"></a><font color=Green><u>import</u></font> Monad
+<a name="line-20"></a>
+<a name="line-21"></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="line-22"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Lex
+<a name="line-23"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn
+<a name="line-24"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly<font color=Cyan>.</font>NoLeak<font color=Cyan>.</font>Plain
+<a name="line-25"></a>
+<a name="line-26"></a><font color=Blue>--  #define DEBUG</font>
+<a name="line-27"></a> 
+<a name="line-28"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>
+<a name="line-29"></a><font color=Magenta><em>#  if ( defined(__GLASGOW_HASKELL__) &amp;&amp; __GLASGOW_HASKELL__ &gt; 502 ) || \</em></font>
+<a name="line-30"></a>      <font color=Cyan>(</font> defined<font color=Cyan>(</font><b><font color=Magenta>__NHC__</font></b><font color=Cyan>)</font> <font color=Cyan>&amp;&amp;</font> <b><font color=Magenta>__NHC__</font></b> <font color=Cyan>&gt;</font> <font color=Magenta>114</font> <font color=Cyan>)</font> <font color=Cyan>||</font> defined<font color=Cyan>(</font><b><font color=Magenta>__HUGS__</font></b><font color=Cyan>)</font>
+<a name="line-31"></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="line-32"></a><font color=Magenta><em>#  elif defined(__GLASGOW_HASKELL__)</em></font>
+<a name="line-33"></a><font color=Green><u>import</u></font> IOExts<font color=Cyan>(</font>trace<font color=Cyan>)</font>
+<a name="line-34"></a><font color=Magenta><em>#  elif defined(__NHC__) || defined(__HBC__)</em></font>
+<a name="line-35"></a><font color=Green><u>import</u></font> NonStdTrace
+<a name="line-36"></a><font color=Magenta><em>#  endif</em></font>
+<a name="line-37"></a><a name="debug"></a><font color=Blue>debug</font> <font color=Red>::</font> Monad m <font color=Red>=&gt;</font> String <font color=Red>-&gt;</font> m ()
+<a name="line-38"></a><font color=Blue>debug</font> s <font color=Red>=</font> trace s <font color=Cyan>(</font>return ()<font color=Cyan>)</font>
+<a name="line-39"></a><font color=Magenta><em>#else</em></font>
+<a name="line-40"></a><font color=Blue>debug</font> <font color=Red>::</font> Monad m <font color=Red>=&gt;</font> String <font color=Red>-&gt;</font> m ()
+<a name="line-41"></a><font color=Blue>debug</font> s <font color=Red>=</font> return ()
+<a name="line-42"></a><font color=Magenta><em>#endif</em></font>
+<a name="line-43"></a>
+<a name="line-44"></a>
+<a name="line-45"></a><a name="htmlParse"></a><font color=Blue>-- | The first argument is the name of the file, the second is the string</font>
+<a name="line-46"></a><font color=Blue>--   contents of the file.  The result is the generic representation of</font>
+<a name="line-47"></a><font color=Blue>--   an XML document.  Any errors cause program failure with message to stderr.</font>
+<a name="line-48"></a><font color=Blue>htmlParse</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Document Posn
+<a name="line-49"></a><font color=Blue>htmlParse</font> name <font color=Red>=</font> Prelude<font color=Cyan>.</font>either error id <font color=Cyan>.</font> htmlParse' name
+<a name="line-50"></a>
+<a name="line-51"></a><a name="htmlParse'"></a><font color=Blue>-- | The first argument is the name of the file, the second is the string</font>
+<a name="line-52"></a><font color=Blue>--   contents of the file.  The result is the generic representation of</font>
+<a name="line-53"></a><font color=Blue>--   an XML document.  Any parsing errors are returned in the @Either@ type.</font>
+<a name="line-54"></a><font color=Blue>htmlParse'</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Either String <font color=Cyan>(</font>Document Posn<font color=Cyan>)</font>
+<a name="line-55"></a><font color=Blue>htmlParse'</font> name <font color=Red>=</font> Prelude<font color=Cyan>.</font>either Left <font color=Cyan>(</font>Right <font color=Cyan>.</font> simplify<font color=Cyan>)</font> <font color=Cyan>.</font> fst
+<a name="line-56"></a>                  <font color=Cyan>.</font> runParser document <font color=Cyan>.</font> xmlLex name
+<a name="line-57"></a>
+<a name="line-58"></a><font color=Blue>---- Document simplification ----</font>
+<a name="line-59"></a>
+<a name="line-60"></a><a name="simplify"></a><font color=Blue>simplify</font> <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Document i
+<a name="line-61"></a><font color=Blue>simplify</font> <font color=Cyan>(</font>Document p st <font color=Cyan>(</font>Elem n avs cs<font color=Cyan>)</font> ms<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-62"></a>    Document p st <font color=Cyan>(</font>Elem n avs <font color=Cyan>(</font>deepfilter simp cs<font color=Cyan>)</font><font color=Cyan>)</font> ms
+<a name="line-63"></a>  <font color=Green><u>where</u></font>
+<a name="line-64"></a>    simp <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"null"</font> [] []<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> False
+<a name="line-65"></a>    simp <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem  n     <font color=Green><u>_</u></font>  []<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>|</font> n <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"font"</font><font color=Cyan>,</font><font color=Magenta>"p"</font><font color=Cyan>,</font><font color=Magenta>"i"</font><font color=Cyan>,</font><font color=Magenta>"b"</font><font color=Cyan>,</font><font color=Magenta>"em"</font>
+<a name="line-66"></a>                                                  <font color=Cyan>,</font><font color=Magenta>"tt"</font><font color=Cyan>,</font><font color=Magenta>"big"</font><font color=Cyan>,</font><font color=Magenta>"small"</font><font color=Red>]</font> <font color=Red>=</font> False
+<a name="line-67"></a> <font color=Blue>-- simp (CString False s _) | all isSpace s = False</font>
+<a name="line-68"></a>    simp <font color=Green><u>_</u></font> <font color=Red>=</font> True
+<a name="line-69"></a>    deepfilter p <font color=Red>=</font>
+<a name="line-70"></a>        filter p <font color=Cyan>.</font> map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>
+<a name="line-71"></a>                          CElem <font color=Cyan>(</font>Elem n avs cs<font color=Cyan>)</font> i
+<a name="line-72"></a>                                  <font color=Red>-&gt;</font> CElem <font color=Cyan>(</font>Elem n avs <font color=Cyan>(</font>deepfilter p cs<font color=Cyan>)</font><font color=Cyan>)</font> i
+<a name="line-73"></a>                          <font color=Green><u>_</u></font>       <font color=Red>-&gt;</font> c<font color=Cyan>)</font>
+<a name="line-74"></a>
+<a name="line-75"></a><a name="selfclosingtags"></a><font color=Blue>-- opening any of these, they close again immediately</font>
+<a name="line-76"></a><font color=Blue>selfclosingtags</font> <font color=Red>=</font> <font color=Red>[</font><font color=Magenta>"img"</font><font color=Cyan>,</font><font color=Magenta>"hr"</font><font color=Cyan>,</font><font color=Magenta>"br"</font><font color=Cyan>,</font><font color=Magenta>"meta"</font><font color=Cyan>,</font><font color=Magenta>"col"</font><font color=Cyan>,</font><font color=Magenta>"link"</font><font color=Cyan>,</font><font color=Magenta>"base"</font>
+<a name="line-77"></a>                  <font color=Cyan>,</font><font color=Magenta>"param"</font><font color=Cyan>,</font><font color=Magenta>"area"</font><font color=Cyan>,</font><font color=Magenta>"frame"</font><font color=Cyan>,</font><font color=Magenta>"input"</font><font color=Red>]</font>
+<a name="line-78"></a>
+<a name="line-79"></a><a name="closeInnerTags"></a><font color=Blue>--closing this, implicitly closes any of those which are contained in it</font>
+<a name="line-80"></a><font color=Blue>closeInnerTags</font> <font color=Red>=</font>
+<a name="line-81"></a>  <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"ul"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"li"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-82"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ol"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"li"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-83"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"dl"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"dt"</font><font color=Cyan>,</font><font color=Magenta>"dd"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-84"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tr"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-85"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"div"</font><font color=Cyan>,</font>     <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-86"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"thead"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-87"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tfoot"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-88"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tbody"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-89"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"table"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Cyan>,</font><font color=Magenta>"thead"</font><font color=Cyan>,</font><font color=Magenta>"tfoot"</font><font color=Cyan>,</font><font color=Magenta>"tbody"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-90"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"caption"</font><font color=Cyan>,</font> <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-91"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"th"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-92"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"td"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-93"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"li"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-94"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"dt"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-95"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"dd"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-96"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"object"</font><font color=Cyan>,</font>  <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-97"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"map"</font><font color=Cyan>,</font>     <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-98"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"body"</font><font color=Cyan>,</font>    <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-99"></a>  <font color=Red>]</font>
+<a name="line-100"></a>
+<a name="line-101"></a><a name="closes"></a><font color=Blue>--opening this, implicitly closes that</font>
+<a name="line-102"></a><font color=Blue>closes</font> <font color=Red>::</font> Name <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> Bool
+<a name="line-103"></a><font color=Magenta>"a"</font>  <font color=Cyan>`closes`</font> <font color=Magenta>"a"</font>   <font color=Red>=</font>  True
+<a name="line-104"></a><font color=Magenta>"li"</font> <font color=Cyan>`closes`</font> <font color=Magenta>"li"</font>  <font color=Red>=</font>  True
+<a name="line-105"></a><font color=Magenta>"th"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font>      <font color=Red>=</font>  True
+<a name="line-106"></a><font color=Magenta>"td"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font>      <font color=Red>=</font>  True
+<a name="line-107"></a><font color=Magenta>"tr"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Red>]</font> <font color=Red>=</font>  True
+<a name="line-108"></a><font color=Magenta>"dt"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"dt"</font><font color=Cyan>,</font><font color=Magenta>"dd"</font><font color=Red>]</font>      <font color=Red>=</font>  True
+<a name="line-109"></a><font color=Magenta>"dd"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"dt"</font><font color=Cyan>,</font><font color=Magenta>"dd"</font><font color=Red>]</font>      <font color=Red>=</font>  True
+<a name="line-110"></a><font color=Magenta>"form"</font>  <font color=Cyan>`closes`</font> <font color=Magenta>"form"</font>      <font color=Red>=</font> True
+<a name="line-111"></a><font color=Magenta>"label"</font> <font color=Cyan>`closes`</font> <font color=Magenta>"label"</font>     <font color=Red>=</font> True
+<a name="line-112"></a><font color=Green><u>_</u></font>       <font color=Cyan>`closes`</font> <font color=Magenta>"option"</font>    <font color=Red>=</font> True
+<a name="line-113"></a><font color=Magenta>"thead"</font> <font color=Cyan>`closes`</font> t  <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"colgroup"</font><font color=Red>]</font>          <font color=Red>=</font> True
+<a name="line-114"></a><font color=Magenta>"tfoot"</font> <font color=Cyan>`closes`</font> t  <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"thead"</font><font color=Cyan>,</font><font color=Magenta>"colgroup"</font><font color=Red>]</font>  <font color=Red>=</font> True
+<a name="line-115"></a><font color=Magenta>"tbody"</font> <font color=Cyan>`closes`</font> t  <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"tbody"</font><font color=Cyan>,</font><font color=Magenta>"tfoot"</font><font color=Cyan>,</font><font color=Magenta>"thead"</font><font color=Cyan>,</font><font color=Magenta>"colgroup"</font><font color=Red>]</font> <font color=Red>=</font> True
+<a name="line-116"></a><font color=Magenta>"colgroup"</font> <font color=Cyan>`closes`</font> <font color=Magenta>"colgroup"</font>  <font color=Red>=</font> True
+<a name="line-117"></a><a name="closes"></a><font color=Blue>t</font> <font color=Cyan>`closes`</font> <font color=Magenta>"p"</font>
+<a name="line-118"></a>    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"p"</font><font color=Cyan>,</font><font color=Magenta>"h1"</font><font color=Cyan>,</font><font color=Magenta>"h2"</font><font color=Cyan>,</font><font color=Magenta>"h3"</font><font color=Cyan>,</font><font color=Magenta>"h4"</font><font color=Cyan>,</font><font color=Magenta>"h5"</font><font color=Cyan>,</font><font color=Magenta>"h6"</font>
+<a name="line-119"></a>               <font color=Cyan>,</font><font color=Magenta>"hr"</font><font color=Cyan>,</font><font color=Magenta>"div"</font><font color=Cyan>,</font><font color=Magenta>"ul"</font><font color=Cyan>,</font><font color=Magenta>"dl"</font><font color=Cyan>,</font><font color=Magenta>"ol"</font><font color=Cyan>,</font><font color=Magenta>"table"</font><font color=Red>]</font>  <font color=Red>=</font>  True
+<a name="line-120"></a><font color=Green><u>_</u></font> <font color=Cyan>`closes`</font> <font color=Green><u>_</u></font> <font color=Red>=</font> False
+<a name="line-121"></a>
+<a name="line-122"></a>
+<a name="line-123"></a>
+<a name="line-124"></a><font color=Blue>---- Misc ----</font>
+<a name="line-125"></a>
+<a name="line-126"></a><a name="fst3"></a><font color=Blue>fst3</font> <font color=Cyan>(</font>a<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> a
+<a name="line-127"></a><a name="snd3"></a><font color=Blue>snd3</font> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> a
+<a name="line-128"></a><a name="thd3"></a><font color=Blue>thd3</font> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>)</font> <font color=Red>=</font> a
+<a name="line-129"></a>
+<a name="line-130"></a>
+<a name="line-131"></a>
+<a name="line-132"></a><font color=Blue>---- Auxiliary Parsing Functions ----</font>
+<a name="line-133"></a>
+<a name="line-134"></a><a name="HParser"></a><font color=Green><u>type</u></font> HParser a <font color=Red>=</font> Parser <font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font> a
+<a name="line-135"></a>
+<a name="line-136"></a><a name="tok"></a><font color=Blue>tok</font> <font color=Red>::</font> TokenT <font color=Red>-&gt;</font> HParser TokenT
+<a name="line-137"></a><font color=Blue>tok</font> t <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t'<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-138"></a>           <font color=Green><u>case</u></font> t' <font color=Green><u>of</u></font> TokError s    <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
+<a name="line-139"></a>                      <font color=Green><u>_</u></font> <font color=Red>|</font> t'<font color=Cyan>==</font>t     <font color=Red>-&gt;</font> return t
+<a name="line-140"></a>                        <font color=Red>|</font> otherwise <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
+<a name="line-141"></a>
+<a name="line-142"></a><a name="name"></a><font color=Blue>name</font> <font color=Red>::</font> HParser Name
+<a name="line-143"></a><font color=Blue>--name = do {(p,TokName s) &lt;- next; return s}</font>
+<a name="line-144"></a><font color=Blue>name</font> <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>tok<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-145"></a>          <font color=Green><u>case</u></font> tok <font color=Green><u>of</u></font> 
+<a name="line-146"></a>            TokName s  <font color=Red>-&gt;</font> return s 
+<a name="line-147"></a>            TokError s <font color=Red>-&gt;</font> report failBad <font color=Magenta>"a name"</font> p tok
+<a name="line-148"></a>            <font color=Green><u>_</u></font>          <font color=Red>-&gt;</font> report fail <font color=Magenta>"a name"</font> p tok
+<a name="line-149"></a>
+<a name="line-150"></a><a name="string"></a><font color=Blue>string</font><font color=Cyan>,</font> freetext <font color=Red>::</font> HParser String
+<a name="line-151"></a><font color=Blue>string</font>   <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-152"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokName s <font color=Red>-&gt;</font> return s
+<a name="line-153"></a>                        <font color=Green><u>_</u></font>         <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
+<a name="line-154"></a><a name="freetext"></a><font color=Blue>freetext</font> <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-155"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokFreeText s <font color=Red>-&gt;</font> return s
+<a name="line-156"></a>                        <font color=Green><u>_</u></font>             <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
+<a name="line-157"></a>
+<a name="line-158"></a><a name="maybe"></a><font color=Blue>maybe</font> <font color=Red>::</font> HParser a <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font>
+<a name="line-159"></a><font color=Blue>maybe</font> p <font color=Red>=</font>
+<a name="line-160"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Just<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-161"></a>    <font color=Cyan>(</font> return Nothing<font color=Cyan>)</font>
+<a name="line-162"></a>
+<a name="line-163"></a><a name="either"></a><font color=Blue>either</font> <font color=Red>::</font> HParser a <font color=Red>-&gt;</font> HParser b <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Either a b<font color=Cyan>)</font>
+<a name="line-164"></a><font color=Blue>either</font> p q <font color=Red>=</font>
+<a name="line-165"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Left<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-166"></a>    <font color=Cyan>(</font> q <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Right<font color=Cyan>)</font>
+<a name="line-167"></a>
+<a name="line-168"></a><a name="word"></a><font color=Blue>word</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> HParser ()
+<a name="line-169"></a><font color=Blue>word</font> s <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x <font color=Red>&lt;-</font> next
+<a name="line-170"></a>            <font color=Cyan>;</font> <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>
+<a name="line-171"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokName n<font color=Cyan>)</font>     <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
+<a name="line-172"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokFreeText n<font color=Cyan>)</font> <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
+<a name="line-173"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Red>@</font><font color=Cyan>(</font>TokError <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
+<a name="line-174"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
+<a name="line-175"></a>            <font color=Cyan>}</font>
+<a name="line-176"></a>
+<a name="line-177"></a><a name="posn"></a><font color=Blue>posn</font> <font color=Red>::</font> HParser Posn
+<a name="line-178"></a><font color=Blue>posn</font> <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x<font color=Red>@</font><font color=Cyan>(</font>p<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-179"></a>          <font color=Cyan>;</font> reparse <font color=Red>[</font>x<font color=Red>]</font>
+<a name="line-180"></a>          <font color=Cyan>;</font> return p
+<a name="line-181"></a>          <font color=Cyan>}</font> <font color=Cyan>`onFail`</font> return noPos
+<a name="line-182"></a>
+<a name="line-183"></a><a name="nmtoken"></a><font color=Blue>nmtoken</font> <font color=Red>::</font> HParser NmToken
+<a name="line-184"></a><font color=Blue>nmtoken</font> <font color=Red>=</font> <font color=Cyan>(</font>string <font color=Cyan>`onFail`</font> freetext<font color=Cyan>)</font>
+<a name="line-185"></a>
+<a name="line-186"></a><a name="failP"></a><font color=Blue>failP</font><font color=Cyan>,</font> failBadP <font color=Red>::</font> String <font color=Red>-&gt;</font> HParser a
+<a name="line-187"></a><font color=Blue>failP</font> msg    <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> fail <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="line-188"></a><a name="failBadP"></a><font color=Blue>failBadP</font> msg <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> failBad <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="line-189"></a>
+<a name="line-190"></a><a name="report"></a><font color=Blue>report</font> <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>HParser a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> TokenT <font color=Red>-&gt;</font> HParser a
+<a name="line-191"></a><font color=Blue>report</font> fail exp p t <font color=Red>=</font> fail <font color=Cyan>(</font><font color=Magenta>"Expected "</font><font color=Cyan>++</font>show exp<font color=Cyan>++</font><font color=Magenta>" but found "</font><font color=Cyan>++</font>show t
+<a name="line-192"></a>                           <font color=Cyan>++</font><font color=Magenta>"\n  at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
+<a name="line-193"></a>
+<a name="line-194"></a><a name="adjustErrP"></a><font color=Blue>adjustErrP</font> <font color=Red>::</font> HParser a <font color=Red>-&gt;</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> HParser a
+<a name="line-195"></a><a name="adjustErrP"></a><font color=Blue>p</font> <font color=Cyan>`adjustErrP`</font> f <font color=Red>=</font> p <font color=Cyan>`onFail`</font> <font color=Green><u>do</u></font> pn <font color=Red>&lt;-</font> posn
+<a name="line-196"></a>                                 <font color=Cyan>(</font>p <font color=Cyan>`adjustErr`</font> f<font color=Cyan>)</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font>show pn<font color=Cyan>)</font>
+<a name="line-197"></a>
+<a name="line-198"></a><font color=Blue>---- XML Parsing Functions ----</font>
+<a name="line-199"></a>
+<a name="line-200"></a><a name="document"></a><font color=Blue>document</font> <font color=Red>::</font> HParser <font color=Cyan>(</font>Document Posn<font color=Cyan>)</font>
+<a name="line-201"></a><font color=Blue>document</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-202"></a>    p     <font color=Red>&lt;-</font> prolog <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"unrecognisable XML prolog\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-203"></a>    es    <font color=Red>&lt;-</font> many1 <font color=Cyan>(</font>element <font color=Magenta>"HTML document"</font><font color=Cyan>)</font>
+<a name="line-204"></a>    ms    <font color=Red>&lt;-</font> many misc
+<a name="line-205"></a>    return <font color=Cyan>(</font>Document p emptyST <font color=Cyan>(</font><font color=Green><u>case</u></font> map snd es <font color=Green><u>of</u></font>
+<a name="line-206"></a>                                  <font color=Red>[</font>e<font color=Red>]</font> <font color=Red>-&gt;</font> e
+<a name="line-207"></a>                                  es  <font color=Red>-&gt;</font> Elem <font color=Magenta>"html"</font> [] <font color=Cyan>(</font>map mkCElem es<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-208"></a>                               ms<font color=Cyan>)</font>
+<a name="line-209"></a>  <font color=Green><u>where</u></font> mkCElem e <font color=Red>=</font> CElem e noPos
+<a name="line-210"></a>
+<a name="line-211"></a><a name="comment"></a><font color=Blue>comment</font> <font color=Red>::</font> HParser Comment
+<a name="line-212"></a><font color=Blue>comment</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-213"></a>    bracket <font color=Cyan>(</font>tok TokCommentOpen<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokCommentClose<font color=Cyan>)</font> freetext
+<a name="line-214"></a>
+<a name="line-215"></a><a name="processinginstruction"></a><font color=Blue>processinginstruction</font> <font color=Red>::</font> HParser ProcessingInstruction
+<a name="line-216"></a><font color=Blue>processinginstruction</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-217"></a>    tok TokPIOpen
+<a name="line-218"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-219"></a>      n <font color=Red>&lt;-</font> string  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"processing instruction has no target"</font>
+<a name="line-220"></a>      f <font color=Red>&lt;-</font> freetext
+<a name="line-221"></a>      <font color=Cyan>(</font>tok TokPIClose <font color=Cyan>`onFail`</font> tok TokAnyClose<font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing ?&gt; or &gt;"</font>
+<a name="line-222"></a>      return <font color=Cyan>(</font>n<font color=Cyan>,</font> f<font color=Cyan>)</font>
+<a name="line-223"></a>
+<a name="line-224"></a><a name="cdsect"></a><font color=Blue>cdsect</font> <font color=Red>::</font> HParser CDSect
+<a name="line-225"></a><font color=Blue>cdsect</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-226"></a>    tok TokSectionOpen
+<a name="line-227"></a>    bracket <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection CDATAx<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSectionClose<font color=Cyan>)</font> chardata
+<a name="line-228"></a>
+<a name="line-229"></a><a name="prolog"></a><font color=Blue>prolog</font> <font color=Red>::</font> HParser Prolog
+<a name="line-230"></a><font color=Blue>prolog</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-231"></a>    x <font color=Red>&lt;-</font> maybe xmldecl
+<a name="line-232"></a>    m1 <font color=Red>&lt;-</font> many misc
+<a name="line-233"></a>    dtd <font color=Red>&lt;-</font> maybe doctypedecl
+<a name="line-234"></a>    m2 <font color=Red>&lt;-</font> many misc
+<a name="line-235"></a>    return <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font>
+<a name="line-236"></a>
+<a name="line-237"></a><a name="xmldecl"></a><font color=Blue>xmldecl</font> <font color=Red>::</font> HParser XMLDecl
+<a name="line-238"></a><font color=Blue>xmldecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-239"></a>    tok TokPIOpen
+<a name="line-240"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
+<a name="line-241"></a>    p <font color=Red>&lt;-</font> posn
+<a name="line-242"></a>    s <font color=Red>&lt;-</font> freetext
+<a name="line-243"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing ?&gt; in &lt;?xml ...?&gt;"</font>
+<a name="line-244"></a>    <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>either failP return <font color=Cyan>.</font> fst <font color=Cyan>.</font> runParser aux <font color=Cyan>.</font> xmlReLex p<font color=Cyan>)</font> s
+<a name="line-245"></a>  <font color=Green><u>where</u></font>
+<a name="line-246"></a>    aux <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-247"></a>      v <font color=Red>&lt;-</font> versioninfo  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing XML version info"</font>
+<a name="line-248"></a>      e <font color=Red>&lt;-</font> maybe encodingdecl
+<a name="line-249"></a>      s <font color=Red>&lt;-</font> maybe sddecl
+<a name="line-250"></a>      return <font color=Cyan>(</font>XMLDecl v e s<font color=Cyan>)</font>
+<a name="line-251"></a>
+<a name="line-252"></a><a name="versioninfo"></a><font color=Blue>versioninfo</font> <font color=Red>::</font> HParser VersionInfo
+<a name="line-253"></a><font color=Blue>versioninfo</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-254"></a>    <font color=Cyan>(</font>word <font color=Magenta>"version"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"VERSION"</font><font color=Cyan>)</font>
+<a name="line-255"></a>    tok TokEqual
+<a name="line-256"></a>    bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-257"></a>
+<a name="line-258"></a><a name="misc"></a><font color=Blue>misc</font> <font color=Red>::</font> HParser Misc
+<a name="line-259"></a><font color=Blue>misc</font> <font color=Red>=</font> 
+<a name="line-260"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"&lt;!--comment--&gt;"</font><font color=Cyan>,</font> comment <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Comment<font color=Cyan>)</font>
+<a name="line-261"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"&lt;?PI?&gt;"</font><font color=Cyan>,</font>         processinginstruction <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PI<font color=Cyan>)</font>
+<a name="line-262"></a>           <font color=Red>]</font>
+<a name="line-263"></a>
+<a name="line-264"></a>
+<a name="line-265"></a><font color=Blue>-- Question: for HTML, should we disallow in-line DTDs, allowing only externals?</font>
+<a name="line-266"></a><font color=Blue>-- Answer: I think so.</font>
+<a name="line-267"></a>
+<a name="line-268"></a><a name="doctypedecl"></a><font color=Blue>doctypedecl</font> <font color=Red>::</font> HParser DocTypeDecl
+<a name="line-269"></a><font color=Blue>doctypedecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-270"></a>    tok TokSpecialOpen
+<a name="line-271"></a>    tok <font color=Cyan>(</font>TokSpecial DOCTYPEx<font color=Cyan>)</font>
+<a name="line-272"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-273"></a>      n <font color=Red>&lt;-</font> name
+<a name="line-274"></a>      eid <font color=Red>&lt;-</font> maybe externalid
+<a name="line-275"></a><font color=Blue>--    es &lt;- maybe (bracket (tok TokSqOpen) (tok TokSqClose)) (many markupdecl)</font>
+<a name="line-276"></a>      tok TokAnyClose  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing &gt; in DOCTYPE decl"</font>
+<a name="line-277"></a><font color=Blue>--    return (DTD n eid (case es of { Nothing -&gt; []; Just e -&gt; e }))</font>
+<a name="line-278"></a>      return <font color=Cyan>(</font>DTD n eid []<font color=Cyan>)</font>
+<a name="line-279"></a>
+<a name="line-280"></a><font color=Blue>--markupdecl :: HParser MarkupDecl</font>
+<a name="line-281"></a><font color=Blue>--markupdecl =</font>
+<a name="line-282"></a><font color=Blue>--    ( elementdecl &gt;&gt;= return . Element) `onFail`</font>
+<a name="line-283"></a><font color=Blue>--    ( attlistdecl &gt;&gt;= return . AttList) `onFail`</font>
+<a name="line-284"></a><font color=Blue>--    ( entitydecl &gt;&gt;= return . Entity) `onFail`</font>
+<a name="line-285"></a><font color=Blue>--    ( notationdecl &gt;&gt;= return . Notation) `onFail`</font>
+<a name="line-286"></a><font color=Blue>--    ( misc &gt;&gt;= return . MarkupMisc) `onFail`</font>
+<a name="line-287"></a><font color=Blue>--    PEREF(MarkupPE,markupdecl)</font>
+<a name="line-288"></a><font color=Blue>--</font>
+<a name="line-289"></a><font color=Blue>--extsubset :: HParser ExtSubset</font>
+<a name="line-290"></a><font color=Blue>--extsubset = do</font>
+<a name="line-291"></a><font color=Blue>--    td &lt;- maybe textdecl</font>
+<a name="line-292"></a><font color=Blue>--    ds &lt;- many extsubsetdecl</font>
+<a name="line-293"></a><font color=Blue>--    return (ExtSubset td ds)</font>
+<a name="line-294"></a><font color=Blue>--</font>
+<a name="line-295"></a><font color=Blue>--extsubsetdecl :: HParser ExtSubsetDecl</font>
+<a name="line-296"></a><font color=Blue>--extsubsetdecl =</font>
+<a name="line-297"></a><font color=Blue>--    ( markupdecl &gt;&gt;= return . ExtMarkupDecl) `onFail`</font>
+<a name="line-298"></a><font color=Blue>--    ( conditionalsect &gt;&gt;= return . ExtConditionalSect) `onFail`</font>
+<a name="line-299"></a><font color=Blue>--    PEREF(ExtPEReference,extsubsetdecl)</font>
+<a name="line-300"></a>
+<a name="line-301"></a><a name="sddecl"></a><font color=Blue>sddecl</font> <font color=Red>::</font> HParser SDDecl
+<a name="line-302"></a><font color=Blue>sddecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-303"></a>    <font color=Cyan>(</font>word <font color=Magenta>"standalone"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"STANDALONE"</font><font color=Cyan>)</font>
+<a name="line-304"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-305"></a>      tok TokEqual <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing = in 'standalone' decl"</font>
+<a name="line-306"></a>      bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
+<a name="line-307"></a>              <font color=Cyan>(</font> <font color=Cyan>(</font>word <font color=Magenta>"yes"</font> <font color=Cyan>&gt;&gt;</font> return True<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-308"></a>                <font color=Cyan>(</font>word <font color=Magenta>"no"</font> <font color=Cyan>&gt;&gt;</font> return False<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-309"></a>                failP <font color=Magenta>"'standalone' decl requires 'yes' or 'no' value"</font> <font color=Cyan>)</font>
+<a name="line-310"></a>
+<a name="line-311"></a>
+<a name="line-312"></a>
+<a name="line-313"></a>
+<a name="line-314"></a><a name="Stack"></a><font color=Blue>----</font>
+<a name="line-315"></a><a name="Stack"></a><font color=Blue>-- VERY IMPORTANT NOTE: The stack returned here contains those tags which</font>
+<a name="line-316"></a><a name="Stack"></a><font color=Blue>-- have been closed implicitly and need to be reopened again at the</font>
+<a name="line-317"></a><a name="Stack"></a><font color=Blue>-- earliest opportunity.</font>
+<a name="line-318"></a><a name="Stack"></a><font color=Green><u>type</u></font> Stack <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>Attribute<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-319"></a>
+<a name="line-320"></a><a name="element"></a><font color=Blue>element</font> <font color=Red>::</font> Name <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Stack<font color=Cyan>,</font>Element Posn<font color=Cyan>)</font>
+<a name="line-321"></a><font color=Blue>element</font> ctx <font color=Red>=</font>
+<a name="line-322"></a>  <font color=Green><u>do</u></font>
+<a name="line-323"></a>    tok TokAnyOpen
+<a name="line-324"></a>    <font color=Cyan>(</font>ElemTag e avs<font color=Cyan>)</font> <font color=Red>&lt;-</font> elemtag
+<a name="line-325"></a>    <font color=Cyan>(</font> <font color=Green><u>if</u></font> e <font color=Cyan>`closes`</font> ctx <font color=Green><u>then</u></font>
+<a name="line-326"></a>         <font color=Blue>-- insert the missing close-tag, fail forward, and reparse.</font>
+<a name="line-327"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> debug <font color=Cyan>(</font><font color=Magenta>"/"</font><font color=Cyan>)</font>
+<a name="line-328"></a>              unparse <font color=Cyan>(</font><font color=Red>[</font>TokEndOpen<font color=Cyan>,</font> TokName ctx<font color=Cyan>,</font> TokAnyClose<font color=Cyan>,</font>
+<a name="line-329"></a>                        TokAnyOpen<font color=Cyan>,</font> TokName e<font color=Red>]</font> <font color=Cyan>++</font> reformatAttrs avs<font color=Cyan>)</font>
+<a name="line-330"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem <font color=Magenta>"null"</font> [] []<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-331"></a>      <font color=Green><u>else</u></font> <font color=Green><u>if</u></font> e <font color=Cyan>`elem`</font> selfclosingtags <font color=Green><u>then</u></font>
+<a name="line-332"></a>         <font color=Blue>-- complete the parse straightaway.</font>
+<a name="line-333"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokEndClose	<font color=Blue>-- self-closing &lt;tag /&gt; </font>
+<a name="line-334"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"[+]"</font><font color=Cyan>)</font>
+<a name="line-335"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem e avs []<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-336"></a>     <font color=Blue>--  ( do tok TokAnyClose	-- sequence &lt;tag&gt;&lt;/tag&gt;	(**not HTML?**)</font>
+<a name="line-337"></a>     <font color=Blue>--       debug (e++"[+")</font>
+<a name="line-338"></a>     <font color=Blue>--       n &lt;- bracket (tok TokEndOpen) (tok TokAnyClose) name</font>
+<a name="line-339"></a>     <font color=Blue>--       debug "]"</font>
+<a name="line-340"></a>     <font color=Blue>--       if e == (map toLower n :: Name) </font>
+<a name="line-341"></a>     <font color=Blue>--         then return ([], Elem e avs [])      </font>
+<a name="line-342"></a>     <font color=Blue>--         else return (error "no nesting in empty tag")) `onFail`</font>
+<a name="line-343"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokAnyClose	<font color=Blue>-- &lt;tag&gt; with no close (e.g. &lt;IMG&gt;)</font>
+<a name="line-344"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"[+]"</font><font color=Cyan>)</font>
+<a name="line-345"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem e avs []<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-346"></a>      <font color=Green><u>else</u></font>
+<a name="line-347"></a>        <font color=Cyan>(</font><font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokEndClose
+<a name="line-348"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"[]"</font><font color=Cyan>)</font>
+<a name="line-349"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem e avs []<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-350"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokAnyClose <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing &gt; or /&gt; in element tag"</font>
+<a name="line-351"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"["</font><font color=Cyan>)</font>
+<a name="line-352"></a>           <font color=Blue>-- zz &lt;- many (content e)</font>
+<a name="line-353"></a>           <font color=Blue>-- n &lt;- bracket (tok TokEndOpen) (tok TokAnyClose) name</font>
+<a name="line-354"></a>              zz <font color=Red>&lt;-</font> manyFinally <font color=Cyan>(</font>content e<font color=Cyan>)</font>
+<a name="line-355"></a>                                <font color=Cyan>(</font>tok TokEndOpen<font color=Cyan>)</font>
+<a name="line-356"></a>              n <font color=Red>&lt;-</font> name
+<a name="line-357"></a>              commit <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font>
+<a name="line-358"></a>              debug <font color=Magenta>"]"</font>
+<a name="line-359"></a>              <font color=Green><u>let</u></font> <font color=Cyan>(</font>ss<font color=Cyan>,</font>cs<font color=Cyan>)</font> <font color=Red>=</font> unzip zz
+<a name="line-360"></a>              <font color=Green><u>let</u></font> s       <font color=Red>=</font> <font color=Green><u>if</u></font> null ss <font color=Green><u>then</u></font> [] <font color=Green><u>else</u></font> last ss
+<a name="line-361"></a>              <font color=Cyan>(</font> <font color=Green><u>if</u></font> e <font color=Cyan>==</font> <font color=Cyan>(</font>map toLower n <font color=Red>::</font> Name<font color=Cyan>)</font> <font color=Green><u>then</u></font>
+<a name="line-362"></a>                  <font color=Green><u>do</u></font> unparse <font color=Cyan>(</font>reformatTags <font color=Cyan>(</font>closeInner e s<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-363"></a>                     debug <font color=Magenta>"^"</font>
+<a name="line-364"></a>                     return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem e avs cs<font color=Cyan>)</font>
+<a name="line-365"></a>                <font color=Green><u>else</u></font>
+<a name="line-366"></a>                  <font color=Green><u>do</u></font> unparse <font color=Red>[</font>TokEndOpen<font color=Cyan>,</font> TokName n<font color=Cyan>,</font> TokAnyClose<font color=Red>]</font>
+<a name="line-367"></a>                     debug <font color=Magenta>"-"</font>
+<a name="line-368"></a>                     return <font color=Cyan>(</font><font color=Cyan>(</font><font color=Cyan>(</font>e<font color=Cyan>,</font>avs<font color=Cyan>)</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font><font color=Cyan>,</font> Elem e avs cs<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-369"></a>         <font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failP <font color=Cyan>(</font><font color=Magenta>"failed to repair non-matching tags in context: "</font><font color=Cyan>++</font>ctx<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-370"></a>
+<a name="line-371"></a><a name="closeInner"></a><font color=Blue>closeInner</font> <font color=Red>::</font> Name <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>Attribute<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>Attribute<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-372"></a><font color=Blue>closeInner</font> c ts <font color=Red>=</font>
+<a name="line-373"></a>    <font color=Green><u>case</u></font> lookup c closeInnerTags <font color=Green><u>of</u></font>
+<a name="line-374"></a>      <font color=Cyan>(</font>Just these<font color=Cyan>)</font> <font color=Red>-&gt;</font> filter <font color=Cyan>(</font><font color=Cyan>(</font><font color=Cyan>`notElem`</font> these<font color=Cyan>)</font><font color=Cyan>.</font>fst<font color=Cyan>)</font> ts
+<a name="line-375"></a>      Nothing      <font color=Red>-&gt;</font> ts
+<a name="line-376"></a>
+<a name="line-377"></a><a name="unparse"></a><font color=Blue>unparse</font> ts <font color=Red>=</font> <font color=Green><u>do</u></font> p <font color=Red>&lt;-</font> posn
+<a name="line-378"></a>                reparse <font color=Cyan>(</font>zip <font color=Cyan>(</font>repeat p<font color=Cyan>)</font> ts<font color=Cyan>)</font>
+<a name="line-379"></a>
+<a name="line-380"></a><a name="reformatAttrs"></a><font color=Blue>reformatAttrs</font> avs <font color=Red>=</font> concatMap f0 avs
+<a name="line-381"></a>    <font color=Green><u>where</u></font> f0 <font color=Cyan>(</font>a<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=Red>[</font>TokName a<font color=Cyan>,</font> TokEqual<font color=Cyan>,</font> TokQuote<font color=Cyan>,</font>
+<a name="line-382"></a>                                       TokFreeText <font color=Cyan>(</font>show v<font color=Cyan>)</font><font color=Cyan>,</font> TokQuote<font color=Red>]</font>
+<a name="line-383"></a><a name="reformatTags"></a><font color=Blue>reformatTags</font> ts <font color=Red>=</font> concatMap f0 ts
+<a name="line-384"></a>    <font color=Green><u>where</u></font> f0 <font color=Cyan>(</font>t<font color=Cyan>,</font>avs<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>TokAnyOpen<font color=Cyan>,</font> TokName t<font color=Red>]</font><font color=Cyan>++</font>reformatAttrs avs<font color=Cyan>++</font><font color=Red>[</font>TokAnyClose<font color=Red>]</font>
+<a name="line-385"></a>
+<a name="line-386"></a><a name="content"></a><font color=Blue>content</font> <font color=Red>::</font> Name <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Stack<font color=Cyan>,</font>Content Posn<font color=Cyan>)</font>
+<a name="line-387"></a><font color=Blue>content</font> ctx <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn <font color=Cyan>;</font> content' p ctx <font color=Cyan>}</font>
+<a name="line-388"></a>  <font color=Green><u>where</u></font> content' p ctx <font color=Red>=</font> oneOf'
+<a name="line-389"></a>          <font color=Red>[</font> <font color=Cyan>(</font> <font color=Magenta>"element"</font><font color=Cyan>,</font> element ctx <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font><font color=Cyan>(</font>s<font color=Cyan>,</font>e<font color=Cyan>)</font><font color=Red>-&gt;</font> return <font color=Cyan>(</font>s<font color=Cyan>,</font> CElem e p<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-390"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"chardata"</font><font color=Cyan>,</font> chardata <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>s<font color=Red>-&gt;</font> return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CString False s p<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-391"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"reference"</font><font color=Cyan>,</font> reference <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>r<font color=Red>-&gt;</font> return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CRef r p<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-392"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"cdsect"</font><font color=Cyan>,</font> cdsect <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>c<font color=Red>-&gt;</font> return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CString True c p<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-393"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"misc"</font><font color=Cyan>,</font> misc <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>m<font color=Red>-&gt;</font>  return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CMisc m p<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-394"></a>          <font color=Red>]</font> <font color=Cyan>`adjustErrP`</font> <font color=Cyan>(</font><font color=Magenta>"when looking for a content item,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-395"></a>
+<a name="line-396"></a><a name="elemtag"></a><font color=Blue>----</font>
+<a name="line-397"></a><font color=Blue>elemtag</font> <font color=Red>::</font> HParser ElemTag
+<a name="line-398"></a><font color=Blue>elemtag</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-399"></a>    n <font color=Red>&lt;-</font> name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"malformed element tag\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-400"></a>    <font color=Green><u>as</u></font> <font color=Red>&lt;-</font> many attribute
+<a name="line-401"></a>    return <font color=Cyan>(</font>ElemTag <font color=Cyan>(</font>map toLower n<font color=Cyan>)</font> <font color=Green><u>as</u></font><font color=Cyan>)</font>
+<a name="line-402"></a>
+<a name="line-403"></a><a name="attribute"></a><font color=Blue>attribute</font> <font color=Red>::</font> HParser Attribute
+<a name="line-404"></a><font color=Blue>attribute</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-405"></a>    n <font color=Red>&lt;-</font> name
+<a name="line-406"></a>    v <font color=Red>&lt;-</font> <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokEqual
+<a name="line-407"></a>             attvalue<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-408"></a>         <font color=Cyan>(</font>return <font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Magenta>"TRUE"</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-409"></a>    return <font color=Cyan>(</font>map toLower n<font color=Cyan>,</font>v<font color=Cyan>)</font>
+<a name="line-410"></a>
+<a name="line-411"></a><font color=Blue>--elementdecl :: HParser ElementDecl</font>
+<a name="line-412"></a><font color=Blue>--elementdecl = do</font>
+<a name="line-413"></a><font color=Blue>--    tok TokSpecialOpen</font>
+<a name="line-414"></a><font color=Blue>--    tok (TokSpecial ELEMENTx)</font>
+<a name="line-415"></a><font color=Blue>--    n &lt;- name `onFail` failP "missing identifier in ELEMENT decl"</font>
+<a name="line-416"></a><font color=Blue>--    c &lt;- contentspec `onFail` failP "missing content spec in ELEMENT decl"</font>
+<a name="line-417"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating ELEMENT decl"</font>
+<a name="line-418"></a><font color=Blue>--    return (ElementDecl n c)</font>
+<a name="line-419"></a><font color=Blue>--</font>
+<a name="line-420"></a><font color=Blue>--contentspec :: HParser ContentSpec</font>
+<a name="line-421"></a><font color=Blue>--contentspec =</font>
+<a name="line-422"></a><font color=Blue>--    ( word "EMPTY" &gt;&gt; return EMPTY) `onFail`</font>
+<a name="line-423"></a><font color=Blue>--    ( word "ANY" &gt;&gt; return ANY) `onFail`</font>
+<a name="line-424"></a><font color=Blue>--    ( mixed &gt;&gt;= return . Mixed) `onFail`</font>
+<a name="line-425"></a><font color=Blue>--    ( cp &gt;&gt;= return . ContentSpec) `onFail`</font>
+<a name="line-426"></a><font color=Blue>--    PEREF(ContentPE,contentspec)</font>
+<a name="line-427"></a><font color=Blue>--</font>
+<a name="line-428"></a><font color=Blue>--choice :: HParser [CP]</font>
+<a name="line-429"></a><font color=Blue>--choice = do</font>
+<a name="line-430"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
+<a name="line-431"></a><font color=Blue>--            (cp `sepby1` (tok TokPipe))</font>
+<a name="line-432"></a><font color=Blue>--</font>
+<a name="line-433"></a><font color=Blue>--sequence :: HParser [CP]</font>
+<a name="line-434"></a><font color=Blue>--sequence = do</font>
+<a name="line-435"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
+<a name="line-436"></a><font color=Blue>--            (cp `sepby1` (tok TokComma))</font>
+<a name="line-437"></a><font color=Blue>--</font>
+<a name="line-438"></a><font color=Blue>--cp :: HParser CP</font>
+<a name="line-439"></a><font color=Blue>--cp =</font>
+<a name="line-440"></a><font color=Blue>--    ( do n &lt;- name</font>
+<a name="line-441"></a><font color=Blue>--         m &lt;- modifier</font>
+<a name="line-442"></a><font color=Blue>--         return (TagName n m)) `onFail`</font>
+<a name="line-443"></a><font color=Blue>--    ( do ss &lt;- sequence</font>
+<a name="line-444"></a><font color=Blue>--         m &lt;- modifier</font>
+<a name="line-445"></a><font color=Blue>--         return (Seq ss m)) `onFail`</font>
+<a name="line-446"></a><font color=Blue>--    ( do cs &lt;- choice</font>
+<a name="line-447"></a><font color=Blue>--         m &lt;- modifier</font>
+<a name="line-448"></a><font color=Blue>--         return (Choice cs m)) `onFail`</font>
+<a name="line-449"></a><font color=Blue>--    PEREF(CPPE,cp)</font>
+<a name="line-450"></a><font color=Blue>--</font>
+<a name="line-451"></a><font color=Blue>--modifier :: HParser Modifier</font>
+<a name="line-452"></a><font color=Blue>--modifier =</font>
+<a name="line-453"></a><font color=Blue>--    ( tok TokStar &gt;&gt; return Star) `onFail`</font>
+<a name="line-454"></a><font color=Blue>--    ( tok TokQuery &gt;&gt; return Query) `onFail`</font>
+<a name="line-455"></a><font color=Blue>--    ( tok TokPlus &gt;&gt; return Plus) `onFail`</font>
+<a name="line-456"></a><font color=Blue>--    ( return None)</font>
+<a name="line-457"></a><font color=Blue>--</font>
+<a name="line-458"></a><font color=Blue>--mixed :: HParser Mixed</font>
+<a name="line-459"></a><font color=Blue>--mixed = do</font>
+<a name="line-460"></a><font color=Blue>--    tok TokBraOpen</font>
+<a name="line-461"></a><font color=Blue>--    tok TokHash</font>
+<a name="line-462"></a><font color=Blue>--    word "PCDATA"</font>
+<a name="line-463"></a><font color=Blue>--    cont</font>
+<a name="line-464"></a><font color=Blue>--  where</font>
+<a name="line-465"></a><font color=Blue>--    cont = ( tok TokBraClose &gt;&gt; return PCDATA) `onFail`</font>
+<a name="line-466"></a><font color=Blue>--           ( do cs &lt;- many ( do tok TokPipe</font>
+<a name="line-467"></a><font color=Blue>--                                n &lt;- name</font>
+<a name="line-468"></a><font color=Blue>--                                return n)</font>
+<a name="line-469"></a><font color=Blue>--                tok TokBraClose</font>
+<a name="line-470"></a><font color=Blue>--                tok TokStar</font>
+<a name="line-471"></a><font color=Blue>--                return (PCDATAplus cs))</font>
+<a name="line-472"></a><font color=Blue>--</font>
+<a name="line-473"></a><font color=Blue>--attlistdecl :: HParser AttListDecl</font>
+<a name="line-474"></a><font color=Blue>--attlistdecl = do</font>
+<a name="line-475"></a><font color=Blue>--    tok TokSpecialOpen</font>
+<a name="line-476"></a><font color=Blue>--    tok (TokSpecial ATTLISTx)</font>
+<a name="line-477"></a><font color=Blue>--    n &lt;- name `onFail` failP "missing identifier in ATTLIST"</font>
+<a name="line-478"></a><font color=Blue>--    ds &lt;- many attdef</font>
+<a name="line-479"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "missing &gt; terminating ATTLIST"</font>
+<a name="line-480"></a><font color=Blue>--    return (AttListDecl n ds)</font>
+<a name="line-481"></a><font color=Blue>--</font>
+<a name="line-482"></a><font color=Blue>--attdef :: HParser AttDef</font>
+<a name="line-483"></a><font color=Blue>--attdef = do</font>
+<a name="line-484"></a><font color=Blue>--    n &lt;- name</font>
+<a name="line-485"></a><font color=Blue>--    t &lt;- atttype `onFail` failP "missing attribute type in attlist defn"</font>
+<a name="line-486"></a><font color=Blue>--    d &lt;- defaultdecl</font>
+<a name="line-487"></a><font color=Blue>--    return (AttDef n t d)</font>
+<a name="line-488"></a><font color=Blue>--</font>
+<a name="line-489"></a><font color=Blue>--atttype :: HParser AttType</font>
+<a name="line-490"></a><font color=Blue>--atttype =</font>
+<a name="line-491"></a><font color=Blue>--    ( word "CDATA" &gt;&gt; return StringType) `onFail`</font>
+<a name="line-492"></a><font color=Blue>--    ( tokenizedtype &gt;&gt;= return . TokenizedType) `onFail`</font>
+<a name="line-493"></a><font color=Blue>--    ( enumeratedtype &gt;&gt;= return . EnumeratedType)</font>
+<a name="line-494"></a><font color=Blue>--</font>
+<a name="line-495"></a><font color=Blue>--tokenizedtype :: HParser TokenizedType</font>
+<a name="line-496"></a><font color=Blue>--tokenizedtype =</font>
+<a name="line-497"></a><font color=Blue>--    ( word "ID" &gt;&gt; return ID) `onFail`</font>
+<a name="line-498"></a><font color=Blue>--    ( word "IDREF" &gt;&gt; return IDREF) `onFail`</font>
+<a name="line-499"></a><font color=Blue>--    ( word "IDREFS" &gt;&gt; return IDREFS) `onFail`</font>
+<a name="line-500"></a><font color=Blue>--    ( word "ENTITY" &gt;&gt; return ENTITY) `onFail`</font>
+<a name="line-501"></a><font color=Blue>--    ( word "ENTITIES" &gt;&gt; return ENTITIES) `onFail`</font>
+<a name="line-502"></a><font color=Blue>--    ( word "NMTOKEN" &gt;&gt; return NMTOKEN) `onFail`</font>
+<a name="line-503"></a><font color=Blue>--    ( word "NMTOKENS" &gt;&gt; return NMTOKENS)</font>
+<a name="line-504"></a><font color=Blue>--</font>
+<a name="line-505"></a><font color=Blue>--enumeratedtype :: HParser EnumeratedType</font>
+<a name="line-506"></a><font color=Blue>--enumeratedtype =</font>
+<a name="line-507"></a><font color=Blue>--    ( notationtype &gt;&gt;= return . NotationType) `onFail`</font>
+<a name="line-508"></a><font color=Blue>--    ( enumeration &gt;&gt;= return . Enumeration)</font>
+<a name="line-509"></a><font color=Blue>--</font>
+<a name="line-510"></a><font color=Blue>--notationtype :: HParser NotationType</font>
+<a name="line-511"></a><font color=Blue>--notationtype = do</font>
+<a name="line-512"></a><font color=Blue>--    word "NOTATION"</font>
+<a name="line-513"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
+<a name="line-514"></a><font color=Blue>--            (name `sepby1` (tok TokPipe))</font>
+<a name="line-515"></a><font color=Blue>--</font>
+<a name="line-516"></a><font color=Blue>--enumeration :: HParser Enumeration</font>
+<a name="line-517"></a><font color=Blue>--enumeration =</font>
+<a name="line-518"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
+<a name="line-519"></a><font color=Blue>--            (nmtoken `sepby1` (tok TokPipe))</font>
+<a name="line-520"></a><font color=Blue>--</font>
+<a name="line-521"></a><font color=Blue>--defaultdecl :: HParser DefaultDecl</font>
+<a name="line-522"></a><font color=Blue>--defaultdecl =</font>
+<a name="line-523"></a><font color=Blue>--    ( tok TokHash &gt;&gt; word "REQUIRED" &gt;&gt; return REQUIRED) `onFail`</font>
+<a name="line-524"></a><font color=Blue>--    ( tok TokHash &gt;&gt; word "IMPLIED" &gt;&gt; return IMPLIED) `onFail`</font>
+<a name="line-525"></a><font color=Blue>--    ( do f &lt;- maybe (tok TokHash &gt;&gt; word "FIXED" &gt;&gt; return FIXED)</font>
+<a name="line-526"></a><font color=Blue>--         a &lt;- attvalue</font>
+<a name="line-527"></a><font color=Blue>--         return (DefaultTo a f))</font>
+<a name="line-528"></a><font color=Blue>--</font>
+<a name="line-529"></a><font color=Blue>--conditionalsect :: HParser ConditionalSect</font>
+<a name="line-530"></a><font color=Blue>--conditionalsect =</font>
+<a name="line-531"></a><font color=Blue>--    ( do tok TokSectionOpen</font>
+<a name="line-532"></a><font color=Blue>--         tok (TokSection INCLUDEx)</font>
+<a name="line-533"></a><font color=Blue>--         tok TokSqOpen `onFail` failP "missing [ after INCLUDE"</font>
+<a name="line-534"></a><font color=Blue>--         i &lt;- extsubsetdecl `onFail` failP "missing ExtSubsetDecl in INCLUDE"</font>
+<a name="line-535"></a><font color=Blue>--         tok TokSectionClose `onFail` failP "missing ] after INCLUDE"</font>
+<a name="line-536"></a><font color=Blue>--         return (IncludeSect i)) `onFail`</font>
+<a name="line-537"></a><font color=Blue>--    ( do tok TokSectionOpen</font>
+<a name="line-538"></a><font color=Blue>--         tok (TokSection IGNOREx)</font>
+<a name="line-539"></a><font color=Blue>--         tok TokSqOpen `onFail` failP "missing [ after IGNORE"</font>
+<a name="line-540"></a><font color=Blue>--         i &lt;- many ignoresectcontents</font>
+<a name="line-541"></a><font color=Blue>--         tok TokSectionClose `onFail` failP "missing ] after IGNORE"</font>
+<a name="line-542"></a><font color=Blue>--         return (IgnoreSect i))</font>
+<a name="line-543"></a><font color=Blue>--</font>
+<a name="line-544"></a><font color=Blue>--ignoresectcontents :: HParser IgnoreSectContents</font>
+<a name="line-545"></a><font color=Blue>--ignoresectcontents = do</font>
+<a name="line-546"></a><font color=Blue>--    i &lt;- ignore</font>
+<a name="line-547"></a><font color=Blue>--    is &lt;- many (do tok TokSectionOpen</font>
+<a name="line-548"></a><font color=Blue>--                   ic &lt;- ignoresectcontents</font>
+<a name="line-549"></a><font color=Blue>--                   tok TokSectionClose</font>
+<a name="line-550"></a><font color=Blue>--                   ig &lt;- ignore</font>
+<a name="line-551"></a><font color=Blue>--                   return (ic,ig))</font>
+<a name="line-552"></a><font color=Blue>--    return (IgnoreSectContents i is)</font>
+<a name="line-553"></a><font color=Blue>--</font>
+<a name="line-554"></a><font color=Blue>--ignore :: HParser Ignore</font>
+<a name="line-555"></a><font color=Blue>--ignore = freetext &gt;&gt;= return . Ignore</font>
+<a name="line-556"></a>
+<a name="line-557"></a><a name="reference"></a><font color=Blue>reference</font> <font color=Red>::</font> HParser Reference
+<a name="line-558"></a><font color=Blue>reference</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-559"></a>    bracket <font color=Cyan>(</font>tok TokAmp<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSemi<font color=Cyan>)</font> <font color=Cyan>(</font>freetext <font color=Cyan>&gt;&gt;=</font> val<font color=Cyan>)</font>
+<a name="line-560"></a>  <font color=Green><u>where</u></font>
+<a name="line-561"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font><font color=Magenta>'x'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font> <font color=Red>|</font> all isHexDigit i
+<a name="line-562"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readHex <font color=Cyan>$</font> i
+<a name="line-563"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font>     <font color=Red>|</font> all isDigit i
+<a name="line-564"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readDec <font color=Cyan>$</font> i
+<a name="line-565"></a>    val name        <font color=Red>=</font> return <font color=Cyan>.</font> RefEntity <font color=Cyan>$</font> name
+<a name="line-566"></a>
+<a name="line-567"></a><font color=Blue>{-
+<a name="line-568"></a>reference :: HParser Reference
+<a name="line-569"></a>reference =
+<a name="line-570"></a>    ( charref &gt;&gt;= return . RefChar) `onFail`
+<a name="line-571"></a>    ( entityref &gt;&gt;= return . RefEntity)
+<a name="line-572"></a>
+<a name="line-573"></a>entityref :: HParser EntityRef
+<a name="line-574"></a>entityref = do
+<a name="line-575"></a>    n &lt;- bracket (tok TokAmp) (tok TokSemi) name
+<a name="line-576"></a>    return n
+<a name="line-577"></a>
+<a name="line-578"></a>charref :: HParser CharRef
+<a name="line-579"></a>charref = do
+<a name="line-580"></a>    bracket (tok TokAmp) (tok TokSemi) (freetext &gt;&gt;= readCharVal)
+<a name="line-581"></a>  where
+<a name="line-582"></a>    readCharVal ('#':'x':i) = return . fst . head . readHex $ i
+<a name="line-583"></a>    readCharVal ('#':i)     = return . fst . head . readDec $ i
+<a name="line-584"></a>    readCharVal _           = mzero
+<a name="line-585"></a>-}</font>
+<a name="line-586"></a>
+<a name="line-587"></a><font color=Blue>--pereference :: HParser PEReference</font>
+<a name="line-588"></a><font color=Blue>--pereference = do</font>
+<a name="line-589"></a><font color=Blue>--    bracket (tok TokPercent) (tok TokSemi) nmtoken</font>
+<a name="line-590"></a><font color=Blue>--</font>
+<a name="line-591"></a><font color=Blue>--entitydecl :: HParser EntityDecl</font>
+<a name="line-592"></a><font color=Blue>--entitydecl =</font>
+<a name="line-593"></a><font color=Blue>--    ( gedecl &gt;&gt;= return . EntityGEDecl) `onFail`</font>
+<a name="line-594"></a><font color=Blue>--    ( pedecl &gt;&gt;= return . EntityPEDecl)</font>
+<a name="line-595"></a><font color=Blue>--</font>
+<a name="line-596"></a><font color=Blue>--gedecl :: HParser GEDecl</font>
+<a name="line-597"></a><font color=Blue>--gedecl = do</font>
+<a name="line-598"></a><font color=Blue>--    tok TokSpecialOpen</font>
+<a name="line-599"></a><font color=Blue>--    tok (TokSpecial ENTITYx)</font>
+<a name="line-600"></a><font color=Blue>--    n &lt;- name</font>
+<a name="line-601"></a><font color=Blue>--    e &lt;- entitydef `onFail` failP "missing entity defn in G ENTITY decl"</font>
+<a name="line-602"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating G ENTITY decl"</font>
+<a name="line-603"></a><font color=Blue>--    return (GEDecl n e)</font>
+<a name="line-604"></a><font color=Blue>--</font>
+<a name="line-605"></a><font color=Blue>--pedecl :: HParser PEDecl</font>
+<a name="line-606"></a><font color=Blue>--pedecl = do</font>
+<a name="line-607"></a><font color=Blue>--    tok TokSpecialOpen</font>
+<a name="line-608"></a><font color=Blue>--    tok (TokSpecial ENTITYx)</font>
+<a name="line-609"></a><font color=Blue>--    tok TokPercent</font>
+<a name="line-610"></a><font color=Blue>--    n &lt;- name</font>
+<a name="line-611"></a><font color=Blue>--    e &lt;- pedef `onFail` failP "missing entity defn in P ENTITY decl"</font>
+<a name="line-612"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating P ENTITY decl"</font>
+<a name="line-613"></a><font color=Blue>--    return (PEDecl n e)</font>
+<a name="line-614"></a><font color=Blue>--</font>
+<a name="line-615"></a><font color=Blue>--entitydef :: HParser EntityDef</font>
+<a name="line-616"></a><font color=Blue>--entitydef =</font>
+<a name="line-617"></a><font color=Blue>--    ( entityvalue &gt;&gt;= return . DefEntityValue) `onFail`</font>
+<a name="line-618"></a><font color=Blue>--    ( do eid &lt;- externalid</font>
+<a name="line-619"></a><font color=Blue>--         ndd &lt;- maybe ndatadecl</font>
+<a name="line-620"></a><font color=Blue>--         return (DefExternalID eid ndd))</font>
+<a name="line-621"></a><font color=Blue>--</font>
+<a name="line-622"></a><font color=Blue>--pedef :: HParser PEDef</font>
+<a name="line-623"></a><font color=Blue>--pedef =</font>
+<a name="line-624"></a><font color=Blue>--    ( entityvalue &gt;&gt;= return . PEDefEntityValue) `onFail`</font>
+<a name="line-625"></a><font color=Blue>--    ( externalid &gt;&gt;= return . PEDefExternalID)</font>
+<a name="line-626"></a>
+<a name="line-627"></a><a name="externalid"></a><font color=Blue>externalid</font> <font color=Red>::</font> HParser ExternalID
+<a name="line-628"></a><font color=Blue>externalid</font> <font color=Red>=</font>
+<a name="line-629"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> word <font color=Magenta>"SYSTEM"</font>
+<a name="line-630"></a>         s <font color=Red>&lt;-</font> systemliteral
+<a name="line-631"></a>         return <font color=Cyan>(</font>SYSTEM s<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-632"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> word <font color=Magenta>"PUBLIC"</font>
+<a name="line-633"></a>         p <font color=Red>&lt;-</font> pubidliteral
+<a name="line-634"></a>         s <font color=Red>&lt;-</font> <font color=Cyan>(</font>systemliteral <font color=Cyan>`onFail`</font> return <font color=Cyan>(</font>SystemLiteral <font color=Magenta>""</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-635"></a>         return <font color=Cyan>(</font>PUBLIC p s<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-636"></a>
+<a name="line-637"></a><font color=Blue>--ndatadecl :: HParser NDataDecl</font>
+<a name="line-638"></a><font color=Blue>--ndatadecl = do</font>
+<a name="line-639"></a><font color=Blue>--    word "NDATA"</font>
+<a name="line-640"></a><font color=Blue>--    n &lt;- name</font>
+<a name="line-641"></a><font color=Blue>--    return (NDATA n)</font>
+<a name="line-642"></a>
+<a name="line-643"></a><a name="textdecl"></a><font color=Blue>textdecl</font> <font color=Red>::</font> HParser TextDecl
+<a name="line-644"></a><font color=Blue>textdecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-645"></a>    tok TokPIOpen
+<a name="line-646"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
+<a name="line-647"></a>    v <font color=Red>&lt;-</font> maybe versioninfo
+<a name="line-648"></a>    e <font color=Red>&lt;-</font> encodingdecl
+<a name="line-649"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failP <font color=Magenta>"expected ?&gt; terminating text decl"</font>
+<a name="line-650"></a>    return <font color=Cyan>(</font>TextDecl v e<font color=Cyan>)</font>
+<a name="line-651"></a>
+<a name="line-652"></a><font color=Blue>--extparsedent :: HParser ExtParsedEnt</font>
+<a name="line-653"></a><font color=Blue>--extparsedent = do</font>
+<a name="line-654"></a><font color=Blue>--    t &lt;- maybe textdecl</font>
+<a name="line-655"></a><font color=Blue>--    (_,c) &lt;- (content "")</font>
+<a name="line-656"></a><font color=Blue>--    return (ExtParsedEnt t c)</font>
+<a name="line-657"></a><font color=Blue>--</font>
+<a name="line-658"></a><font color=Blue>--extpe :: HParser ExtPE</font>
+<a name="line-659"></a><font color=Blue>--extpe = do</font>
+<a name="line-660"></a><font color=Blue>--    t &lt;- maybe textdecl</font>
+<a name="line-661"></a><font color=Blue>--    e &lt;- extsubsetdecl</font>
+<a name="line-662"></a><font color=Blue>--    return (ExtPE t e)</font>
+<a name="line-663"></a>
+<a name="line-664"></a><a name="encodingdecl"></a><font color=Blue>encodingdecl</font> <font color=Red>::</font> HParser EncodingDecl
+<a name="line-665"></a><font color=Blue>encodingdecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-666"></a>    <font color=Cyan>(</font>word <font color=Magenta>"encoding"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"ENCODING"</font><font color=Cyan>)</font>
+<a name="line-667"></a>    tok TokEqual <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"expected = in 'encoding' decl"</font>
+<a name="line-668"></a>    f <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-669"></a>    return <font color=Cyan>(</font>EncodingDecl f<font color=Cyan>)</font>
+<a name="line-670"></a>
+<a name="line-671"></a><font color=Blue>--notationdecl :: HParser NotationDecl</font>
+<a name="line-672"></a><font color=Blue>--notationdecl = do</font>
+<a name="line-673"></a><font color=Blue>--    tok TokSpecialOpen</font>
+<a name="line-674"></a><font color=Blue>--    word "NOTATION"</font>
+<a name="line-675"></a><font color=Blue>--    n &lt;- name</font>
+<a name="line-676"></a><font color=Blue>--    e &lt;- either externalid publicid</font>
+<a name="line-677"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating NOTATION decl"</font>
+<a name="line-678"></a><font color=Blue>--    return (NOTATION n e)</font>
+<a name="line-679"></a>
+<a name="line-680"></a><a name="publicid"></a><font color=Blue>publicid</font> <font color=Red>::</font> HParser PublicID
+<a name="line-681"></a><font color=Blue>publicid</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-682"></a>    word <font color=Magenta>"PUBLICID"</font>
+<a name="line-683"></a>    p <font color=Red>&lt;-</font> pubidliteral
+<a name="line-684"></a>    return <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>
+<a name="line-685"></a>
+<a name="line-686"></a><a name="entityvalue"></a><font color=Blue>entityvalue</font> <font color=Red>::</font> HParser EntityValue
+<a name="line-687"></a><font color=Blue>entityvalue</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-688"></a>    evs <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>many ev<font color=Cyan>)</font>
+<a name="line-689"></a>    return <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>
+<a name="line-690"></a>
+<a name="line-691"></a><a name="ev"></a><font color=Blue>ev</font> <font color=Red>::</font> HParser EV
+<a name="line-692"></a><font color=Blue>ev</font> <font color=Red>=</font>
+<a name="line-693"></a>    <font color=Cyan>(</font> freetext <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVString<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-694"></a><font color=Blue>--  PEREF(EVPERef,ev) `onFail`</font>
+<a name="line-695"></a>    <font color=Cyan>(</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVRef<font color=Cyan>)</font>
+<a name="line-696"></a>
+<a name="line-697"></a><a name="attvalue"></a><font color=Blue>attvalue</font> <font color=Red>::</font> HParser AttValue
+<a name="line-698"></a><font color=Blue>attvalue</font> <font color=Red>=</font>
+<a name="line-699"></a>  <font color=Cyan>(</font> <font color=Green><u>do</u></font> avs <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
+<a name="line-700"></a>                      <font color=Cyan>(</font>many <font color=Cyan>(</font>either freetext reference<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-701"></a>       return <font color=Cyan>(</font>AttValue avs<font color=Cyan>)</font> <font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-702"></a>  <font color=Cyan>(</font> <font color=Green><u>do</u></font> v <font color=Red>&lt;-</font> nmtoken
+<a name="line-703"></a>       s <font color=Red>&lt;-</font> <font color=Cyan>(</font>tok TokPercent <font color=Cyan>&gt;&gt;</font> return <font color=Magenta>"%"</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font> return <font color=Magenta>""</font>
+<a name="line-704"></a>       return <font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Cyan>(</font>v<font color=Cyan>++</font>s<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-705"></a>  <font color=Cyan>(</font> <font color=Green><u>do</u></font> s <font color=Red>&lt;-</font> oneOf <font color=Red>[</font> tok TokPlus <font color=Cyan>&gt;&gt;</font> return <font color=Magenta>"+"</font>
+<a name="line-706"></a>                  <font color=Cyan>,</font> tok TokHash <font color=Cyan>&gt;&gt;</font> return <font color=Magenta>"#"</font>
+<a name="line-707"></a>                  <font color=Red>]</font>
+<a name="line-708"></a>       v <font color=Red>&lt;-</font> nmtoken
+<a name="line-709"></a>       return <font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Cyan>(</font>s<font color=Cyan>++</font>v<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-710"></a>  failP <font color=Magenta>"Badly formatted attribute value"</font>
+<a name="line-711"></a>
+<a name="line-712"></a><a name="systemliteral"></a><font color=Blue>systemliteral</font> <font color=Red>::</font> HParser SystemLiteral
+<a name="line-713"></a><font color=Blue>systemliteral</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-714"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-715"></a>    return <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>		<font color=Blue>-- note: need to fold &amp;...; escapes</font>
+<a name="line-716"></a>
+<a name="line-717"></a><a name="pubidliteral"></a><font color=Blue>pubidliteral</font> <font color=Red>::</font> HParser PubidLiteral
+<a name="line-718"></a><font color=Blue>pubidliteral</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-719"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-720"></a>    return <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>		<font color=Blue>-- note: need to fold &amp;...; escapes</font>
+<a name="line-721"></a>
+<a name="line-722"></a><a name="chardata"></a><font color=Blue>chardata</font> <font color=Red>::</font> HParser CharData
+<a name="line-723"></a><font color=Blue>chardata</font> <font color=Red>=</font> freetext <font color=Blue>-- &gt;&gt;= return . CharData</font>
+<a name="line-724"></a>
+</pre>
+</body>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Html/ParseLazy.html b/docs/HaXml/src/Text/XML/HaXml/Html/ParseLazy.html
--- a/docs/HaXml/src/Text/XML/HaXml/Html/ParseLazy.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Html/ParseLazy.html
@@ -1,732 +1,738 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | This is a parser for HTML documents.  Unlike for XML documents, it</font>
-<a name="(line2)"></a><font color=Blue>--   must include a certain amount of error-correction to account for</font>
-<a name="(line3)"></a><font color=Blue>--   HTML features like self-terminating tags, unterminated tags, and</font>
-<a name="(line4)"></a><font color=Blue>--   incorrect nesting.  The input is tokenised by the</font>
-<a name="(line5)"></a><font color=Blue>--   XML lexer (a separate lexer is not required for HTML).</font>
-<a name="(line6)"></a>
-<a name="(line7)"></a><font color=Blue>-- It uses a slightly extended version of the Hutton/Meijer parser</font>
-<a name="(line8)"></a><font color=Blue>-- combinators.</font>
-<a name="(line9)"></a>
-<a name="(line10)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>ParseLazy
-<a name="(line11)"></a>  <font color=Cyan>(</font> htmlParse
-<a name="(line12)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line13)"></a>
-<a name="(line14)"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>either<font color=Cyan>,</font>maybe<font color=Cyan>,</font>sequence<font color=Cyan>)</font>
-<a name="(line15)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Prelude <font color=Cyan>(</font>either<font color=Cyan>)</font>
-<a name="(line16)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
-<a name="(line17)"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>toLower<font color=Cyan>,</font> isSpace<font color=Cyan>,</font> isDigit<font color=Cyan>,</font> isHexDigit<font color=Cyan>)</font>
-<a name="(line18)"></a><font color=Green><u>import</u></font> Numeric <font color=Cyan>(</font>readDec<font color=Cyan>,</font>readHex<font color=Cyan>)</font>
-<a name="(line19)"></a><font color=Green><u>import</u></font> Monad
-<a name="(line20)"></a>
-<a name="(line21)"></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="(line22)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Lex
-<a name="(line23)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn
-<a name="(line24)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly<font color=Cyan>.</font>NoLeak<font color=Cyan>.</font>Lazy
-<a name="(line25)"></a>
-<a name="(line26)"></a><font color=Blue>--  #define DEBUG</font>
-<a name="(line27)"></a> 
-<a name="(line28)"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>
-<a name="(line29)"></a><font color=Magenta><em>#  if ( defined(__GLASGOW_HASKELL__) &amp;&amp; __GLASGOW_HASKELL__ &gt; 502 ) || \</em></font>
-<a name="(line30)"></a>      <font color=Cyan>(</font> defined<font color=Cyan>(</font><b><font color=Magenta>__NHC__</font></b><font color=Cyan>)</font> <font color=Cyan>&amp;&amp;</font> <b><font color=Magenta>__NHC__</font></b> <font color=Cyan>&gt;</font> <font color=Magenta>114</font> <font color=Cyan>)</font> <font color=Cyan>||</font> defined<font color=Cyan>(</font><b><font color=Magenta>__HUGS__</font></b><font color=Cyan>)</font>
-<a name="(line31)"></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="(line32)"></a><font color=Magenta><em>#  elif defined(__GLASGOW_HASKELL__)</em></font>
-<a name="(line33)"></a><font color=Green><u>import</u></font> IOExts<font color=Cyan>(</font>trace<font color=Cyan>)</font>
-<a name="(line34)"></a><font color=Magenta><em>#  elif defined(__NHC__) || defined(__HBC__)</em></font>
-<a name="(line35)"></a><font color=Green><u>import</u></font> NonStdTrace
-<a name="(line36)"></a><font color=Magenta><em>#  endif</em></font>
-<a name="(line37)"></a><a name="debug"></a>debug <font color=Red>::</font> Monad m <font color=Red>=&gt;</font> String <font color=Red>-&gt;</font> m ()
-<a name="(line38)"></a>debug s <font color=Red>=</font> trace s <font color=Cyan>(</font>return ()<font color=Cyan>)</font>
-<a name="(line39)"></a><font color=Magenta><em>#else</em></font>
-<a name="(line40)"></a>debug <font color=Red>::</font> Monad m <font color=Red>=&gt;</font> String <font color=Red>-&gt;</font> m ()
-<a name="(line41)"></a>debug s <font color=Red>=</font> return ()
-<a name="(line42)"></a><font color=Magenta><em>#endif</em></font>
-<a name="(line43)"></a>
-<a name="(line44)"></a>
-<a name="(line45)"></a><a name="htmlParse"></a><font color=Blue>-- | The first argument is the name of the file, the second is the string</font>
-<a name="(line46)"></a><font color=Blue>--   contents of the file.  The result is the generic representation of</font>
-<a name="(line47)"></a><font color=Blue>--   an XML document.  Any errors cause program failure with message to stderr.</font>
-<a name="(line48)"></a>htmlParse <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Document Posn
-<a name="(line49)"></a>htmlParse name <font color=Red>=</font> <font color=Blue>{-simplify .-}</font> fst <font color=Cyan>.</font> runParser document <font color=Cyan>.</font> xmlLex name
-<a name="(line50)"></a>
-<a name="(line51)"></a><font color=Blue>{-
-<a name="(line52)"></a>-- | The first argument is the name of the file, the second is the string
-<a name="(line53)"></a>--   contents of the file.  The result is the generic representation of
-<a name="(line54)"></a>--   an XML document.  Any parsing errors are returned in the @Either@ type.
-<a name="(line55)"></a>htmlParse' :: String -&gt; String -&gt; Either String (Document Posn)
-<a name="(line56)"></a>htmlParse' name = Prelude.either Left (Right . simplify) . fst
-<a name="(line57)"></a>                  . runParser document . xmlLex name
-<a name="(line58)"></a>-}</font>
-<a name="(line59)"></a>
-<a name="(line60)"></a><font color=Blue>---- Document simplification ----</font>
-<a name="(line61)"></a>
-<a name="(line62)"></a><a name="simplify"></a>simplify <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Document i
-<a name="(line63)"></a>simplify <font color=Cyan>(</font>Document p st <font color=Cyan>(</font>Elem n avs cs<font color=Cyan>)</font> ms<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line64)"></a>    Document p st <font color=Cyan>(</font>Elem n avs <font color=Cyan>(</font>deepfilter simp cs<font color=Cyan>)</font><font color=Cyan>)</font> ms
-<a name="(line65)"></a>  <font color=Green><u>where</u></font>
-<a name="(line66)"></a>    simp <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"null"</font> [] []<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> False
-<a name="(line67)"></a>    simp <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem  n     <font color=Green><u>_</u></font>  []<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>|</font> n <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"font"</font><font color=Cyan>,</font><font color=Magenta>"p"</font><font color=Cyan>,</font><font color=Magenta>"i"</font><font color=Cyan>,</font><font color=Magenta>"b"</font><font color=Cyan>,</font><font color=Magenta>"em"</font>
-<a name="(line68)"></a>                                                  <font color=Cyan>,</font><font color=Magenta>"tt"</font><font color=Cyan>,</font><font color=Magenta>"big"</font><font color=Cyan>,</font><font color=Magenta>"small"</font><font color=Red>]</font> <font color=Red>=</font> False
-<a name="(line69)"></a> <font color=Blue>-- simp (CString False s _) | all isSpace s = False</font>
-<a name="(line70)"></a>    simp <font color=Green><u>_</u></font> <font color=Red>=</font> True
-<a name="(line71)"></a>    deepfilter p <font color=Red>=</font>
-<a name="(line72)"></a>        filter p <font color=Cyan>.</font> map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>
-<a name="(line73)"></a>                          CElem <font color=Cyan>(</font>Elem n avs cs<font color=Cyan>)</font> i
-<a name="(line74)"></a>                                  <font color=Red>-&gt;</font> CElem <font color=Cyan>(</font>Elem n avs <font color=Cyan>(</font>deepfilter p cs<font color=Cyan>)</font><font color=Cyan>)</font> i
-<a name="(line75)"></a>                          <font color=Green><u>_</u></font>       <font color=Red>-&gt;</font> c<font color=Cyan>)</font>
-<a name="(line76)"></a>
-<a name="(line77)"></a><a name="selfclosingtags"></a><font color=Blue>-- opening any of these, they close again immediately</font>
-<a name="(line78)"></a>selfclosingtags <font color=Red>=</font> <font color=Red>[</font><font color=Magenta>"img"</font><font color=Cyan>,</font><font color=Magenta>"hr"</font><font color=Cyan>,</font><font color=Magenta>"br"</font><font color=Cyan>,</font><font color=Magenta>"meta"</font><font color=Cyan>,</font><font color=Magenta>"col"</font><font color=Cyan>,</font><font color=Magenta>"link"</font><font color=Cyan>,</font><font color=Magenta>"base"</font>
-<a name="(line79)"></a>                  <font color=Cyan>,</font><font color=Magenta>"param"</font><font color=Cyan>,</font><font color=Magenta>"area"</font><font color=Cyan>,</font><font color=Magenta>"frame"</font><font color=Cyan>,</font><font color=Magenta>"input"</font><font color=Red>]</font>
-<a name="(line80)"></a>
-<a name="(line81)"></a><a name="closeInnerTags"></a><font color=Blue>--closing this, implicitly closes any of those which are contained in it</font>
-<a name="(line82)"></a>closeInnerTags <font color=Red>=</font>
-<a name="(line83)"></a>  <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"ul"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"li"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line84)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ol"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"li"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line85)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"dl"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"dt"</font><font color=Cyan>,</font><font color=Magenta>"dd"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line86)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tr"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line87)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"div"</font><font color=Cyan>,</font>     <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line88)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"thead"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line89)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tfoot"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line90)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tbody"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line91)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"table"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Cyan>,</font><font color=Magenta>"thead"</font><font color=Cyan>,</font><font color=Magenta>"tfoot"</font><font color=Cyan>,</font><font color=Magenta>"tbody"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line92)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"caption"</font><font color=Cyan>,</font> <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line93)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"th"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line94)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"td"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line95)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"li"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line96)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"dt"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line97)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"dd"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line98)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"object"</font><font color=Cyan>,</font>  <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line99)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"map"</font><font color=Cyan>,</font>     <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line100)"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"body"</font><font color=Cyan>,</font>    <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line101)"></a>  <font color=Red>]</font>
-<a name="(line102)"></a>
-<a name="(line103)"></a><a name="closes"></a><font color=Blue>--opening this, implicitly closes that</font>
-<a name="(line104)"></a>closes <font color=Red>::</font> Name <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> Bool
-<a name="(line105)"></a><font color=Magenta>"a"</font>  <font color=Cyan>`closes`</font> <font color=Magenta>"a"</font>   <font color=Red>=</font>  True
-<a name="(line106)"></a><font color=Magenta>"li"</font> <font color=Cyan>`closes`</font> <font color=Magenta>"li"</font>  <font color=Red>=</font>  True
-<a name="(line107)"></a><font color=Magenta>"th"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font>      <font color=Red>=</font>  True
-<a name="(line108)"></a><font color=Magenta>"td"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font>      <font color=Red>=</font>  True
-<a name="(line109)"></a><font color=Magenta>"tr"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Red>]</font> <font color=Red>=</font>  True
-<a name="(line110)"></a><font color=Magenta>"dt"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"dt"</font><font color=Cyan>,</font><font color=Magenta>"dd"</font><font color=Red>]</font>      <font color=Red>=</font>  True
-<a name="(line111)"></a><font color=Magenta>"dd"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"dt"</font><font color=Cyan>,</font><font color=Magenta>"dd"</font><font color=Red>]</font>      <font color=Red>=</font>  True
-<a name="(line112)"></a><font color=Magenta>"form"</font>  <font color=Cyan>`closes`</font> <font color=Magenta>"form"</font>      <font color=Red>=</font> True
-<a name="(line113)"></a><font color=Magenta>"label"</font> <font color=Cyan>`closes`</font> <font color=Magenta>"label"</font>     <font color=Red>=</font> True
-<a name="(line114)"></a><font color=Green><u>_</u></font>       <font color=Cyan>`closes`</font> <font color=Magenta>"option"</font>    <font color=Red>=</font> True
-<a name="(line115)"></a><font color=Magenta>"thead"</font> <font color=Cyan>`closes`</font> t  <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"colgroup"</font><font color=Red>]</font>          <font color=Red>=</font> True
-<a name="(line116)"></a><font color=Magenta>"tfoot"</font> <font color=Cyan>`closes`</font> t  <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"thead"</font><font color=Cyan>,</font><font color=Magenta>"colgroup"</font><font color=Red>]</font>  <font color=Red>=</font> True
-<a name="(line117)"></a><font color=Magenta>"tbody"</font> <font color=Cyan>`closes`</font> t  <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"tbody"</font><font color=Cyan>,</font><font color=Magenta>"tfoot"</font><font color=Cyan>,</font><font color=Magenta>"thead"</font><font color=Cyan>,</font><font color=Magenta>"colgroup"</font><font color=Red>]</font> <font color=Red>=</font> True
-<a name="(line118)"></a><font color=Magenta>"colgroup"</font> <font color=Cyan>`closes`</font> <font color=Magenta>"colgroup"</font>  <font color=Red>=</font> True
-<a name="(line119)"></a><a name="closes"></a>t <font color=Cyan>`closes`</font> <font color=Magenta>"p"</font>
-<a name="(line120)"></a>    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"p"</font><font color=Cyan>,</font><font color=Magenta>"h1"</font><font color=Cyan>,</font><font color=Magenta>"h2"</font><font color=Cyan>,</font><font color=Magenta>"h3"</font><font color=Cyan>,</font><font color=Magenta>"h4"</font><font color=Cyan>,</font><font color=Magenta>"h5"</font><font color=Cyan>,</font><font color=Magenta>"h6"</font>
-<a name="(line121)"></a>               <font color=Cyan>,</font><font color=Magenta>"hr"</font><font color=Cyan>,</font><font color=Magenta>"div"</font><font color=Cyan>,</font><font color=Magenta>"ul"</font><font color=Cyan>,</font><font color=Magenta>"dl"</font><font color=Cyan>,</font><font color=Magenta>"ol"</font><font color=Cyan>,</font><font color=Magenta>"table"</font><font color=Red>]</font>  <font color=Red>=</font>  True
-<a name="(line122)"></a><font color=Green><u>_</u></font> <font color=Cyan>`closes`</font> <font color=Green><u>_</u></font> <font color=Red>=</font> False
-<a name="(line123)"></a>
-<a name="(line124)"></a>
-<a name="(line125)"></a>
-<a name="(line126)"></a><font color=Blue>---- Misc ----</font>
-<a name="(line127)"></a>
-<a name="(line128)"></a><a name="fst3"></a>fst3 <font color=Cyan>(</font>a<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> a
-<a name="(line129)"></a><a name="snd3"></a>snd3 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> a
-<a name="(line130)"></a><a name="thd3"></a>thd3 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>)</font> <font color=Red>=</font> a
-<a name="(line131)"></a>
-<a name="(line132)"></a>
-<a name="(line133)"></a>
-<a name="(line134)"></a><font color=Blue>---- Auxiliary Parsing Functions ----</font>
-<a name="(line135)"></a>
-<a name="(line136)"></a><a name="HParser"></a><font color=Green><u>type</u></font> HParser a <font color=Red>=</font> Parser <font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font> a
-<a name="(line137)"></a>
-<a name="(line138)"></a><a name="tok"></a>tok <font color=Red>::</font> TokenT <font color=Red>-&gt;</font> HParser TokenT
-<a name="(line139)"></a>tok t <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t'<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line140)"></a>           <font color=Green><u>case</u></font> t' <font color=Green><u>of</u></font> TokError s    <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
-<a name="(line141)"></a>                      <font color=Green><u>_</u></font> <font color=Red>|</font> t'<font color=Cyan>==</font>t     <font color=Red>-&gt;</font> return t
-<a name="(line142)"></a>                        <font color=Red>|</font> otherwise <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
-<a name="(line143)"></a>
-<a name="(line144)"></a><a name="name"></a>name <font color=Red>::</font> HParser Name
-<a name="(line145)"></a><font color=Blue>--name = do {(p,TokName s) &lt;- next; return s}</font>
-<a name="(line146)"></a>name <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>tok<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line147)"></a>          <font color=Green><u>case</u></font> tok <font color=Green><u>of</u></font> 
-<a name="(line148)"></a>            TokName s  <font color=Red>-&gt;</font> return s 
-<a name="(line149)"></a>            TokError s <font color=Red>-&gt;</font> report failBad <font color=Magenta>"a name"</font> p tok
-<a name="(line150)"></a>            <font color=Green><u>_</u></font>          <font color=Red>-&gt;</font> report fail <font color=Magenta>"a name"</font> p tok
-<a name="(line151)"></a>
-<a name="(line152)"></a><a name="string"></a>string<font color=Cyan>,</font> freetext <font color=Red>::</font> HParser String
-<a name="(line153)"></a>string   <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line154)"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokName s <font color=Red>-&gt;</font> return s
-<a name="(line155)"></a>                        <font color=Green><u>_</u></font>         <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
-<a name="(line156)"></a><a name="freetext"></a>freetext <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line157)"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokFreeText s <font color=Red>-&gt;</font> return s
-<a name="(line158)"></a>                        <font color=Green><u>_</u></font>             <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
-<a name="(line159)"></a>
-<a name="(line160)"></a><a name="maybe"></a>maybe <font color=Red>::</font> HParser a <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font>
-<a name="(line161)"></a>maybe p <font color=Red>=</font>
-<a name="(line162)"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Just<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line163)"></a>    <font color=Cyan>(</font> return Nothing<font color=Cyan>)</font>
-<a name="(line164)"></a>
-<a name="(line165)"></a><a name="either"></a>either <font color=Red>::</font> HParser a <font color=Red>-&gt;</font> HParser b <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Either a b<font color=Cyan>)</font>
-<a name="(line166)"></a>either p q <font color=Red>=</font>
-<a name="(line167)"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Left<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line168)"></a>    <font color=Cyan>(</font> q <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Right<font color=Cyan>)</font>
-<a name="(line169)"></a>
-<a name="(line170)"></a><a name="word"></a>word <font color=Red>::</font> String <font color=Red>-&gt;</font> HParser ()
-<a name="(line171)"></a>word s <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x <font color=Red>&lt;-</font> next
-<a name="(line172)"></a>            <font color=Cyan>;</font> <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>
-<a name="(line173)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokName n<font color=Cyan>)</font>     <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
-<a name="(line174)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokFreeText n<font color=Cyan>)</font> <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
-<a name="(line175)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Red>@</font><font color=Cyan>(</font>TokError <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
-<a name="(line176)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
-<a name="(line177)"></a>            <font color=Cyan>}</font>
-<a name="(line178)"></a>
-<a name="(line179)"></a><a name="posn"></a>posn <font color=Red>::</font> HParser Posn
-<a name="(line180)"></a>posn <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x<font color=Red>@</font><font color=Cyan>(</font>p<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line181)"></a>          <font color=Cyan>;</font> reparse <font color=Red>[</font>x<font color=Red>]</font>
-<a name="(line182)"></a>          <font color=Cyan>;</font> return p
-<a name="(line183)"></a>          <font color=Cyan>}</font> <font color=Cyan>`onFail`</font> return noPos
-<a name="(line184)"></a>
-<a name="(line185)"></a><a name="nmtoken"></a>nmtoken <font color=Red>::</font> HParser NmToken
-<a name="(line186)"></a>nmtoken <font color=Red>=</font> <font color=Cyan>(</font>string <font color=Cyan>`onFail`</font> freetext<font color=Cyan>)</font>
-<a name="(line187)"></a>
-<a name="(line188)"></a><a name="failP"></a>failP<font color=Cyan>,</font> failBadP <font color=Red>::</font> String <font color=Red>-&gt;</font> HParser a
-<a name="(line189)"></a>failP msg    <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> fail <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line190)"></a><a name="failBadP"></a>failBadP msg <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> failBad <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line191)"></a>
-<a name="(line192)"></a><a name="report"></a>report <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>HParser a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> TokenT <font color=Red>-&gt;</font> HParser a
-<a name="(line193)"></a>report fail exp p t <font color=Red>=</font> fail <font color=Cyan>(</font><font color=Magenta>"Expected "</font><font color=Cyan>++</font>show exp<font color=Cyan>++</font><font color=Magenta>" but found "</font><font color=Cyan>++</font>show t
-<a name="(line194)"></a>                           <font color=Cyan>++</font><font color=Magenta>"\n  at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
-<a name="(line195)"></a>
-<a name="(line196)"></a><a name="adjustErrP"></a>adjustErrP <font color=Red>::</font> HParser a <font color=Red>-&gt;</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> HParser a
-<a name="(line197)"></a><a name="adjustErrP"></a>p <font color=Cyan>`adjustErrP`</font> f <font color=Red>=</font> p <font color=Cyan>`onFail`</font> <font color=Green><u>do</u></font> pn <font color=Red>&lt;-</font> posn
-<a name="(line198)"></a>                                 <font color=Cyan>(</font>p <font color=Cyan>`adjustErr`</font> f<font color=Cyan>)</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font>show pn<font color=Cyan>)</font>
-<a name="(line199)"></a>
-<a name="(line200)"></a><font color=Blue>---- XML Parsing Functions ----</font>
-<a name="(line201)"></a>
-<a name="(line202)"></a><a name="document"></a>document <font color=Red>::</font> HParser <font color=Cyan>(</font>Document Posn<font color=Cyan>)</font>
-<a name="(line203)"></a>document <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line204)"></a>    return Document
-<a name="(line205)"></a>        <font color=Cyan>`apply`</font> <font color=Cyan>(</font>prolog <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"unrecognisable XML prolog\n"</font><font color=Cyan>++</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line206)"></a>        <font color=Cyan>`apply`</font> <font color=Cyan>(</font>return emptyST<font color=Cyan>)</font>
-<a name="(line207)"></a>        <font color=Cyan>`apply`</font> <font color=Cyan>(</font><font color=Green><u>do</u></font> es <font color=Red>&lt;-</font> many1 <font color=Cyan>(</font>element <font color=Magenta>"HTML document"</font><font color=Cyan>)</font>
-<a name="(line208)"></a>                    return <font color=Cyan>(</font><font color=Green><u>case</u></font> map snd es <font color=Green><u>of</u></font>
-<a name="(line209)"></a>                                <font color=Red>[</font>e<font color=Red>]</font> <font color=Red>-&gt;</font> e
-<a name="(line210)"></a>                                es  <font color=Red>-&gt;</font> Elem <font color=Magenta>"html"</font> [] <font color=Cyan>(</font>map mkCElem es<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line211)"></a>        <font color=Cyan>`apply`</font> <font color=Cyan>(</font>many misc<font color=Cyan>)</font>
-<a name="(line212)"></a>  <font color=Green><u>where</u></font> mkCElem e <font color=Red>=</font> CElem e noPos
-<a name="(line213)"></a>
-<a name="(line214)"></a><a name="comment"></a>comment <font color=Red>::</font> HParser Comment
-<a name="(line215)"></a>comment <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line216)"></a>    bracket <font color=Cyan>(</font>tok TokCommentOpen<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokCommentClose<font color=Cyan>)</font> freetext
-<a name="(line217)"></a>
-<a name="(line218)"></a><a name="processinginstruction"></a>processinginstruction <font color=Red>::</font> HParser ProcessingInstruction
-<a name="(line219)"></a>processinginstruction <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line220)"></a>    tok TokPIOpen
-<a name="(line221)"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
-<a name="(line222)"></a>      n <font color=Red>&lt;-</font> string  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"processing instruction has no target"</font>
-<a name="(line223)"></a>      f <font color=Red>&lt;-</font> freetext
-<a name="(line224)"></a>      <font color=Cyan>(</font>tok TokPIClose <font color=Cyan>`onFail`</font> tok TokAnyClose<font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing ?&gt; or &gt;"</font>
-<a name="(line225)"></a>      return <font color=Cyan>(</font>n<font color=Cyan>,</font> f<font color=Cyan>)</font>
-<a name="(line226)"></a>
-<a name="(line227)"></a><a name="cdsect"></a>cdsect <font color=Red>::</font> HParser CDSect
-<a name="(line228)"></a>cdsect <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line229)"></a>    tok TokSectionOpen
-<a name="(line230)"></a>    bracket <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection CDATAx<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSectionClose<font color=Cyan>)</font> chardata
-<a name="(line231)"></a>
-<a name="(line232)"></a><a name="prolog"></a>prolog <font color=Red>::</font> HParser Prolog
-<a name="(line233)"></a>prolog <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line234)"></a>    x <font color=Red>&lt;-</font> maybe xmldecl
-<a name="(line235)"></a>    m1 <font color=Red>&lt;-</font> many misc
-<a name="(line236)"></a>    dtd <font color=Red>&lt;-</font> maybe doctypedecl
-<a name="(line237)"></a>    m2 <font color=Red>&lt;-</font> many misc
-<a name="(line238)"></a>    return <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font>
-<a name="(line239)"></a>
-<a name="(line240)"></a><a name="xmldecl"></a>xmldecl <font color=Red>::</font> HParser XMLDecl
-<a name="(line241)"></a>xmldecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line242)"></a>    tok TokPIOpen
-<a name="(line243)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
-<a name="(line244)"></a>    p <font color=Red>&lt;-</font> posn
-<a name="(line245)"></a>    s <font color=Red>&lt;-</font> freetext
-<a name="(line246)"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing ?&gt; in &lt;?xml ...?&gt;"</font>
-<a name="(line247)"></a>    <font color=Cyan>(</font>return <font color=Cyan>.</font> fst <font color=Cyan>.</font> runParser aux <font color=Cyan>.</font> xmlReLex p<font color=Cyan>)</font> s
-<a name="(line248)"></a>  <font color=Green><u>where</u></font>
-<a name="(line249)"></a>    aux <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line250)"></a>      v <font color=Red>&lt;-</font> versioninfo  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing XML version info"</font>
-<a name="(line251)"></a>      e <font color=Red>&lt;-</font> maybe encodingdecl
-<a name="(line252)"></a>      s <font color=Red>&lt;-</font> maybe sddecl
-<a name="(line253)"></a>      return <font color=Cyan>(</font>XMLDecl v e s<font color=Cyan>)</font>
-<a name="(line254)"></a>
-<a name="(line255)"></a><a name="versioninfo"></a>versioninfo <font color=Red>::</font> HParser VersionInfo
-<a name="(line256)"></a>versioninfo <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line257)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"version"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"VERSION"</font><font color=Cyan>)</font>
-<a name="(line258)"></a>    tok TokEqual
-<a name="(line259)"></a>    bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line260)"></a>
-<a name="(line261)"></a><a name="misc"></a>misc <font color=Red>::</font> HParser Misc
-<a name="(line262)"></a>misc <font color=Red>=</font> 
-<a name="(line263)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"&lt;!--comment--&gt;"</font><font color=Cyan>,</font> comment <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Comment<font color=Cyan>)</font>
-<a name="(line264)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"&lt;?PI?&gt;"</font><font color=Cyan>,</font>         processinginstruction <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PI<font color=Cyan>)</font>
-<a name="(line265)"></a>           <font color=Red>]</font>
-<a name="(line266)"></a>
-<a name="(line267)"></a>
-<a name="(line268)"></a><font color=Blue>-- Question: for HTML, should we disallow in-line DTDs, allowing only externals?</font>
-<a name="(line269)"></a><font color=Blue>-- Answer: I think so.</font>
-<a name="(line270)"></a>
-<a name="(line271)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> HParser DocTypeDecl
-<a name="(line272)"></a>doctypedecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line273)"></a>    tok TokSpecialOpen
-<a name="(line274)"></a>    tok <font color=Cyan>(</font>TokSpecial DOCTYPEx<font color=Cyan>)</font>
-<a name="(line275)"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
-<a name="(line276)"></a>      n <font color=Red>&lt;-</font> name
-<a name="(line277)"></a>      eid <font color=Red>&lt;-</font> maybe externalid
-<a name="(line278)"></a><font color=Blue>--    es &lt;- maybe (bracket (tok TokSqOpen) (tok TokSqClose)) (many markupdecl)</font>
-<a name="(line279)"></a>      tok TokAnyClose  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing &gt; in DOCTYPE decl"</font>
-<a name="(line280)"></a><font color=Blue>--    return (DTD n eid (case es of { Nothing -&gt; []; Just e -&gt; e }))</font>
-<a name="(line281)"></a>      return <font color=Cyan>(</font>DTD n eid []<font color=Cyan>)</font>
-<a name="(line282)"></a>
-<a name="(line283)"></a><font color=Blue>--markupdecl :: HParser MarkupDecl</font>
-<a name="(line284)"></a><font color=Blue>--markupdecl =</font>
-<a name="(line285)"></a><font color=Blue>--    ( elementdecl &gt;&gt;= return . Element) `onFail`</font>
-<a name="(line286)"></a><font color=Blue>--    ( attlistdecl &gt;&gt;= return . AttList) `onFail`</font>
-<a name="(line287)"></a><font color=Blue>--    ( entitydecl &gt;&gt;= return . Entity) `onFail`</font>
-<a name="(line288)"></a><font color=Blue>--    ( notationdecl &gt;&gt;= return . Notation) `onFail`</font>
-<a name="(line289)"></a><font color=Blue>--    ( misc &gt;&gt;= return . MarkupMisc) `onFail`</font>
-<a name="(line290)"></a><font color=Blue>--    PEREF(MarkupPE,markupdecl)</font>
-<a name="(line291)"></a><font color=Blue>--</font>
-<a name="(line292)"></a><font color=Blue>--extsubset :: HParser ExtSubset</font>
-<a name="(line293)"></a><font color=Blue>--extsubset = do</font>
-<a name="(line294)"></a><font color=Blue>--    td &lt;- maybe textdecl</font>
-<a name="(line295)"></a><font color=Blue>--    ds &lt;- many extsubsetdecl</font>
-<a name="(line296)"></a><font color=Blue>--    return (ExtSubset td ds)</font>
-<a name="(line297)"></a><font color=Blue>--</font>
-<a name="(line298)"></a><font color=Blue>--extsubsetdecl :: HParser ExtSubsetDecl</font>
-<a name="(line299)"></a><font color=Blue>--extsubsetdecl =</font>
-<a name="(line300)"></a><font color=Blue>--    ( markupdecl &gt;&gt;= return . ExtMarkupDecl) `onFail`</font>
-<a name="(line301)"></a><font color=Blue>--    ( conditionalsect &gt;&gt;= return . ExtConditionalSect) `onFail`</font>
-<a name="(line302)"></a><font color=Blue>--    PEREF(ExtPEReference,extsubsetdecl)</font>
-<a name="(line303)"></a>
-<a name="(line304)"></a><a name="sddecl"></a>sddecl <font color=Red>::</font> HParser SDDecl
-<a name="(line305)"></a>sddecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line306)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"standalone"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"STANDALONE"</font><font color=Cyan>)</font>
-<a name="(line307)"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
-<a name="(line308)"></a>      tok TokEqual <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing = in 'standalone' decl"</font>
-<a name="(line309)"></a>      bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
-<a name="(line310)"></a>              <font color=Cyan>(</font> <font color=Cyan>(</font>word <font color=Magenta>"yes"</font> <font color=Cyan>&gt;&gt;</font> return True<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line311)"></a>                <font color=Cyan>(</font>word <font color=Magenta>"no"</font> <font color=Cyan>&gt;&gt;</font> return False<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line312)"></a>                failP <font color=Magenta>"'standalone' decl requires 'yes' or 'no' value"</font> <font color=Cyan>)</font>
-<a name="(line313)"></a>
-<a name="(line314)"></a>
-<a name="(line315)"></a>
-<a name="(line316)"></a>
-<a name="(line317)"></a><a name="Stack"></a><font color=Blue>----</font>
-<a name="(line318)"></a><a name="Stack"></a><font color=Blue>-- VERY IMPORTANT NOTE: The stack returned here contains those tags which</font>
-<a name="(line319)"></a><a name="Stack"></a><font color=Blue>-- have been closed implicitly and need to be reopened again at the</font>
-<a name="(line320)"></a><a name="Stack"></a><font color=Blue>-- earliest opportunity.</font>
-<a name="(line321)"></a><a name="Stack"></a><font color=Green><u>type</u></font> Stack <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>Attribute<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line322)"></a>
-<a name="(line323)"></a><a name="element"></a>element <font color=Red>::</font> Name <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Stack<font color=Cyan>,</font>Element Posn<font color=Cyan>)</font>
-<a name="(line324)"></a>element ctx <font color=Red>=</font>
-<a name="(line325)"></a>  <font color=Green><u>do</u></font>
-<a name="(line326)"></a>    tok TokAnyOpen
-<a name="(line327)"></a>    <font color=Cyan>(</font>ElemTag e avs<font color=Cyan>)</font> <font color=Red>&lt;-</font> elemtag
-<a name="(line328)"></a>    <font color=Cyan>(</font> <font color=Green><u>if</u></font> e <font color=Cyan>`closes`</font> ctx <font color=Green><u>then</u></font>
-<a name="(line329)"></a>         <font color=Blue>-- insert the missing close-tag, fail forward, and reparse.</font>
-<a name="(line330)"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> debug <font color=Cyan>(</font><font color=Magenta>"/"</font><font color=Cyan>)</font>
-<a name="(line331)"></a>              unparse <font color=Cyan>(</font><font color=Red>[</font>TokEndOpen<font color=Cyan>,</font> TokName ctx<font color=Cyan>,</font> TokAnyClose<font color=Cyan>,</font>
-<a name="(line332)"></a>                        TokAnyOpen<font color=Cyan>,</font> TokName e<font color=Red>]</font> <font color=Cyan>++</font> reformatAttrs avs<font color=Cyan>)</font>
-<a name="(line333)"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem <font color=Magenta>"null"</font> [] []<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line334)"></a>      <font color=Green><u>else</u></font> <font color=Green><u>if</u></font> e <font color=Cyan>`elem`</font> selfclosingtags <font color=Green><u>then</u></font>
-<a name="(line335)"></a>         <font color=Blue>-- complete the parse straightaway.</font>
-<a name="(line336)"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokEndClose	<font color=Blue>-- self-closing &lt;tag /&gt; </font>
-<a name="(line337)"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"[+]"</font><font color=Cyan>)</font>
-<a name="(line338)"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem e avs []<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line339)"></a>     <font color=Blue>--  ( do tok TokAnyClose	-- sequence &lt;tag&gt;&lt;/tag&gt;	(**not HTML?**)</font>
-<a name="(line340)"></a>     <font color=Blue>--       debug (e++"[+")</font>
-<a name="(line341)"></a>     <font color=Blue>--       n &lt;- bracket (tok TokEndOpen) (tok TokAnyClose) name</font>
-<a name="(line342)"></a>     <font color=Blue>--       debug "]"</font>
-<a name="(line343)"></a>     <font color=Blue>--       if e == (map toLower n :: Name) </font>
-<a name="(line344)"></a>     <font color=Blue>--         then return ([], Elem e avs [])      </font>
-<a name="(line345)"></a>     <font color=Blue>--         else return (error "no nesting in empty tag")) `onFail`</font>
-<a name="(line346)"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokAnyClose	<font color=Blue>-- &lt;tag&gt; with no close (e.g. &lt;IMG&gt;)</font>
-<a name="(line347)"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"[+]"</font><font color=Cyan>)</font>
-<a name="(line348)"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem e avs []<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line349)"></a>      <font color=Green><u>else</u></font>
-<a name="(line350)"></a>        <font color=Cyan>(</font><font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokEndClose
-<a name="(line351)"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"[]"</font><font color=Cyan>)</font>
-<a name="(line352)"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem e avs []<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line353)"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokAnyClose <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing &gt; or /&gt; in element tag"</font>
-<a name="(line354)"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"["</font><font color=Cyan>)</font>
-<a name="(line355)"></a>              return <font color=Cyan>(</font><font color=Red>\</font> interior<font color=Red>-&gt;</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>stack<font color=Cyan>,</font>contained<font color=Cyan>)</font> <font color=Red>=</font> interior
-<a name="(line356)"></a>                                   <font color=Green><u>in</u></font>  <font color=Cyan>(</font>stack<font color=Cyan>,</font> Elem e avs contained<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line357)"></a>                  <font color=Cyan>`apply`</font>
-<a name="(line358)"></a>                  <font color=Cyan>(</font><font color=Green><u>do</u></font> zz <font color=Red>&lt;-</font> manyFinally <font color=Cyan>(</font>content e<font color=Cyan>)</font>
-<a name="(line359)"></a>                                        <font color=Cyan>(</font>tok TokEndOpen<font color=Cyan>)</font>
-<a name="(line360)"></a>                      n <font color=Red>&lt;-</font> name
-<a name="(line361)"></a>                      commit <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font>
-<a name="(line362)"></a>                      debug <font color=Magenta>"]"</font>
-<a name="(line363)"></a>                      <font color=Green><u>let</u></font> <font color=Cyan>(</font>ss<font color=Cyan>,</font>cs<font color=Cyan>)</font> <font color=Red>=</font> unzip zz
-<a name="(line364)"></a>                      <font color=Green><u>let</u></font> s       <font color=Red>=</font> <font color=Green><u>if</u></font> null ss <font color=Green><u>then</u></font> [] <font color=Green><u>else</u></font> last ss
-<a name="(line365)"></a>                      <font color=Cyan>(</font> <font color=Green><u>if</u></font> e <font color=Cyan>==</font> <font color=Cyan>(</font>map toLower n <font color=Red>::</font> Name<font color=Cyan>)</font> <font color=Green><u>then</u></font>
-<a name="(line366)"></a>                          <font color=Green><u>do</u></font> unparse <font color=Cyan>(</font>reformatTags <font color=Cyan>(</font>closeInner e s<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line367)"></a>                             debug <font color=Magenta>"^"</font>
-<a name="(line368)"></a>                             return <font color=Cyan>(</font>[]<font color=Cyan>,</font> cs<font color=Cyan>)</font>
-<a name="(line369)"></a>                        <font color=Green><u>else</u></font>
-<a name="(line370)"></a>                          <font color=Green><u>do</u></font> unparse <font color=Red>[</font>TokEndOpen<font color=Cyan>,</font> TokName n<font color=Cyan>,</font> TokAnyClose<font color=Red>]</font>
-<a name="(line371)"></a>                             debug <font color=Magenta>"-"</font>
-<a name="(line372)"></a>                             return <font color=Cyan>(</font><font color=Cyan>(</font><font color=Cyan>(</font>e<font color=Cyan>,</font>avs<font color=Cyan>)</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line373)"></a>         <font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failP <font color=Cyan>(</font><font color=Magenta>"failed to repair non-matching tags in context: "</font><font color=Cyan>++</font>ctx<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line374)"></a>
-<a name="(line375)"></a><a name="closeInner"></a>closeInner <font color=Red>::</font> Name <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>Attribute<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>Attribute<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line376)"></a>closeInner c ts <font color=Red>=</font>
-<a name="(line377)"></a>    <font color=Green><u>case</u></font> lookup c closeInnerTags <font color=Green><u>of</u></font>
-<a name="(line378)"></a>      <font color=Cyan>(</font>Just these<font color=Cyan>)</font> <font color=Red>-&gt;</font> filter <font color=Cyan>(</font><font color=Cyan>(</font><font color=Cyan>`notElem`</font> these<font color=Cyan>)</font><font color=Cyan>.</font>fst<font color=Cyan>)</font> ts
-<a name="(line379)"></a>      Nothing      <font color=Red>-&gt;</font> ts
-<a name="(line380)"></a>
-<a name="(line381)"></a><a name="unparse"></a>unparse ts <font color=Red>=</font> <font color=Green><u>do</u></font> p <font color=Red>&lt;-</font> posn
-<a name="(line382)"></a>                reparse <font color=Cyan>(</font>zip <font color=Cyan>(</font>repeat p<font color=Cyan>)</font> ts<font color=Cyan>)</font>
-<a name="(line383)"></a>
-<a name="(line384)"></a><a name="reformatAttrs"></a>reformatAttrs avs <font color=Red>=</font> concatMap f0 avs
-<a name="(line385)"></a>    <font color=Green><u>where</u></font> f0 <font color=Cyan>(</font>a<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=Red>[</font>TokName a<font color=Cyan>,</font> TokEqual<font color=Cyan>,</font> TokQuote<font color=Cyan>,</font>
-<a name="(line386)"></a>                                       TokFreeText <font color=Cyan>(</font>show v<font color=Cyan>)</font><font color=Cyan>,</font> TokQuote<font color=Red>]</font>
-<a name="(line387)"></a><a name="reformatTags"></a>reformatTags ts <font color=Red>=</font> concatMap f0 ts
-<a name="(line388)"></a>    <font color=Green><u>where</u></font> f0 <font color=Cyan>(</font>t<font color=Cyan>,</font>avs<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>TokAnyOpen<font color=Cyan>,</font> TokName t<font color=Red>]</font><font color=Cyan>++</font>reformatAttrs avs<font color=Cyan>++</font><font color=Red>[</font>TokAnyClose<font color=Red>]</font>
-<a name="(line389)"></a>
-<a name="(line390)"></a><a name="content"></a>content <font color=Red>::</font> Name <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Stack<font color=Cyan>,</font>Content Posn<font color=Cyan>)</font>
-<a name="(line391)"></a>content ctx <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn <font color=Cyan>;</font> content' p ctx <font color=Cyan>}</font>
-<a name="(line392)"></a>  <font color=Green><u>where</u></font> content' p ctx <font color=Red>=</font> oneOf'
-<a name="(line393)"></a>          <font color=Red>[</font> <font color=Cyan>(</font> <font color=Magenta>"element"</font><font color=Cyan>,</font> element ctx <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font><font color=Cyan>(</font>s<font color=Cyan>,</font>e<font color=Cyan>)</font><font color=Red>-&gt;</font> return <font color=Cyan>(</font>s<font color=Cyan>,</font> CElem e p<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line394)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"chardata"</font><font color=Cyan>,</font> chardata <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>s<font color=Red>-&gt;</font> return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CString False s p<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line395)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"reference"</font><font color=Cyan>,</font> reference <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>r<font color=Red>-&gt;</font> return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CRef r p<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line396)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"cdsect"</font><font color=Cyan>,</font> cdsect <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>c<font color=Red>-&gt;</font> return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CString True c p<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line397)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"misc"</font><font color=Cyan>,</font> misc <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>m<font color=Red>-&gt;</font>  return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CMisc m p<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line398)"></a>          <font color=Red>]</font> <font color=Cyan>`adjustErrP`</font> <font color=Cyan>(</font><font color=Magenta>"when looking for a content item,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line399)"></a>
-<a name="(line400)"></a><a name="elemtag"></a><font color=Blue>----</font>
-<a name="(line401)"></a>elemtag <font color=Red>::</font> HParser ElemTag
-<a name="(line402)"></a>elemtag <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line403)"></a>    n <font color=Red>&lt;-</font> name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"malformed element tag\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line404)"></a>    <font color=Green><u>as</u></font> <font color=Red>&lt;-</font> many attribute
-<a name="(line405)"></a>    return <font color=Cyan>(</font>ElemTag <font color=Cyan>(</font>map toLower n<font color=Cyan>)</font> <font color=Green><u>as</u></font><font color=Cyan>)</font>
-<a name="(line406)"></a>
-<a name="(line407)"></a><a name="attribute"></a>attribute <font color=Red>::</font> HParser Attribute
-<a name="(line408)"></a>attribute <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line409)"></a>    n <font color=Red>&lt;-</font> name
-<a name="(line410)"></a>    v <font color=Red>&lt;-</font> <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokEqual
-<a name="(line411)"></a>             attvalue<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line412)"></a>         <font color=Cyan>(</font>return <font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Magenta>"TRUE"</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line413)"></a>    return <font color=Cyan>(</font>map toLower n<font color=Cyan>,</font>v<font color=Cyan>)</font>
-<a name="(line414)"></a>
-<a name="(line415)"></a><font color=Blue>--elementdecl :: HParser ElementDecl</font>
-<a name="(line416)"></a><font color=Blue>--elementdecl = do</font>
-<a name="(line417)"></a><font color=Blue>--    tok TokSpecialOpen</font>
-<a name="(line418)"></a><font color=Blue>--    tok (TokSpecial ELEMENTx)</font>
-<a name="(line419)"></a><font color=Blue>--    n &lt;- name `onFail` failP "missing identifier in ELEMENT decl"</font>
-<a name="(line420)"></a><font color=Blue>--    c &lt;- contentspec `onFail` failP "missing content spec in ELEMENT decl"</font>
-<a name="(line421)"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating ELEMENT decl"</font>
-<a name="(line422)"></a><font color=Blue>--    return (ElementDecl n c)</font>
-<a name="(line423)"></a><font color=Blue>--</font>
-<a name="(line424)"></a><font color=Blue>--contentspec :: HParser ContentSpec</font>
-<a name="(line425)"></a><font color=Blue>--contentspec =</font>
-<a name="(line426)"></a><font color=Blue>--    ( word "EMPTY" &gt;&gt; return EMPTY) `onFail`</font>
-<a name="(line427)"></a><font color=Blue>--    ( word "ANY" &gt;&gt; return ANY) `onFail`</font>
-<a name="(line428)"></a><font color=Blue>--    ( mixed &gt;&gt;= return . Mixed) `onFail`</font>
-<a name="(line429)"></a><font color=Blue>--    ( cp &gt;&gt;= return . ContentSpec) `onFail`</font>
-<a name="(line430)"></a><font color=Blue>--    PEREF(ContentPE,contentspec)</font>
-<a name="(line431)"></a><font color=Blue>--</font>
-<a name="(line432)"></a><font color=Blue>--choice :: HParser [CP]</font>
-<a name="(line433)"></a><font color=Blue>--choice = do</font>
-<a name="(line434)"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
-<a name="(line435)"></a><font color=Blue>--            (cp `sepby1` (tok TokPipe))</font>
-<a name="(line436)"></a><font color=Blue>--</font>
-<a name="(line437)"></a><font color=Blue>--sequence :: HParser [CP]</font>
-<a name="(line438)"></a><font color=Blue>--sequence = do</font>
-<a name="(line439)"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
-<a name="(line440)"></a><font color=Blue>--            (cp `sepby1` (tok TokComma))</font>
-<a name="(line441)"></a><font color=Blue>--</font>
-<a name="(line442)"></a><font color=Blue>--cp :: HParser CP</font>
-<a name="(line443)"></a><font color=Blue>--cp =</font>
-<a name="(line444)"></a><font color=Blue>--    ( do n &lt;- name</font>
-<a name="(line445)"></a><font color=Blue>--         m &lt;- modifier</font>
-<a name="(line446)"></a><font color=Blue>--         return (TagName n m)) `onFail`</font>
-<a name="(line447)"></a><font color=Blue>--    ( do ss &lt;- sequence</font>
-<a name="(line448)"></a><font color=Blue>--         m &lt;- modifier</font>
-<a name="(line449)"></a><font color=Blue>--         return (Seq ss m)) `onFail`</font>
-<a name="(line450)"></a><font color=Blue>--    ( do cs &lt;- choice</font>
-<a name="(line451)"></a><font color=Blue>--         m &lt;- modifier</font>
-<a name="(line452)"></a><font color=Blue>--         return (Choice cs m)) `onFail`</font>
-<a name="(line453)"></a><font color=Blue>--    PEREF(CPPE,cp)</font>
-<a name="(line454)"></a><font color=Blue>--</font>
-<a name="(line455)"></a><font color=Blue>--modifier :: HParser Modifier</font>
-<a name="(line456)"></a><font color=Blue>--modifier =</font>
-<a name="(line457)"></a><font color=Blue>--    ( tok TokStar &gt;&gt; return Star) `onFail`</font>
-<a name="(line458)"></a><font color=Blue>--    ( tok TokQuery &gt;&gt; return Query) `onFail`</font>
-<a name="(line459)"></a><font color=Blue>--    ( tok TokPlus &gt;&gt; return Plus) `onFail`</font>
-<a name="(line460)"></a><font color=Blue>--    ( return None)</font>
-<a name="(line461)"></a><font color=Blue>--</font>
-<a name="(line462)"></a><font color=Blue>--mixed :: HParser Mixed</font>
-<a name="(line463)"></a><font color=Blue>--mixed = do</font>
-<a name="(line464)"></a><font color=Blue>--    tok TokBraOpen</font>
-<a name="(line465)"></a><font color=Blue>--    tok TokHash</font>
-<a name="(line466)"></a><font color=Blue>--    word "PCDATA"</font>
-<a name="(line467)"></a><font color=Blue>--    cont</font>
-<a name="(line468)"></a><font color=Blue>--  where</font>
-<a name="(line469)"></a><font color=Blue>--    cont = ( tok TokBraClose &gt;&gt; return PCDATA) `onFail`</font>
-<a name="(line470)"></a><font color=Blue>--           ( do cs &lt;- many ( do tok TokPipe</font>
-<a name="(line471)"></a><font color=Blue>--                                n &lt;- name</font>
-<a name="(line472)"></a><font color=Blue>--                                return n)</font>
-<a name="(line473)"></a><font color=Blue>--                tok TokBraClose</font>
-<a name="(line474)"></a><font color=Blue>--                tok TokStar</font>
-<a name="(line475)"></a><font color=Blue>--                return (PCDATAplus cs))</font>
-<a name="(line476)"></a><font color=Blue>--</font>
-<a name="(line477)"></a><font color=Blue>--attlistdecl :: HParser AttListDecl</font>
-<a name="(line478)"></a><font color=Blue>--attlistdecl = do</font>
-<a name="(line479)"></a><font color=Blue>--    tok TokSpecialOpen</font>
-<a name="(line480)"></a><font color=Blue>--    tok (TokSpecial ATTLISTx)</font>
-<a name="(line481)"></a><font color=Blue>--    n &lt;- name `onFail` failP "missing identifier in ATTLIST"</font>
-<a name="(line482)"></a><font color=Blue>--    ds &lt;- many attdef</font>
-<a name="(line483)"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "missing &gt; terminating ATTLIST"</font>
-<a name="(line484)"></a><font color=Blue>--    return (AttListDecl n ds)</font>
-<a name="(line485)"></a><font color=Blue>--</font>
-<a name="(line486)"></a><font color=Blue>--attdef :: HParser AttDef</font>
-<a name="(line487)"></a><font color=Blue>--attdef = do</font>
-<a name="(line488)"></a><font color=Blue>--    n &lt;- name</font>
-<a name="(line489)"></a><font color=Blue>--    t &lt;- atttype `onFail` failP "missing attribute type in attlist defn"</font>
-<a name="(line490)"></a><font color=Blue>--    d &lt;- defaultdecl</font>
-<a name="(line491)"></a><font color=Blue>--    return (AttDef n t d)</font>
-<a name="(line492)"></a><font color=Blue>--</font>
-<a name="(line493)"></a><font color=Blue>--atttype :: HParser AttType</font>
-<a name="(line494)"></a><font color=Blue>--atttype =</font>
-<a name="(line495)"></a><font color=Blue>--    ( word "CDATA" &gt;&gt; return StringType) `onFail`</font>
-<a name="(line496)"></a><font color=Blue>--    ( tokenizedtype &gt;&gt;= return . TokenizedType) `onFail`</font>
-<a name="(line497)"></a><font color=Blue>--    ( enumeratedtype &gt;&gt;= return . EnumeratedType)</font>
-<a name="(line498)"></a><font color=Blue>--</font>
-<a name="(line499)"></a><font color=Blue>--tokenizedtype :: HParser TokenizedType</font>
-<a name="(line500)"></a><font color=Blue>--tokenizedtype =</font>
-<a name="(line501)"></a><font color=Blue>--    ( word "ID" &gt;&gt; return ID) `onFail`</font>
-<a name="(line502)"></a><font color=Blue>--    ( word "IDREF" &gt;&gt; return IDREF) `onFail`</font>
-<a name="(line503)"></a><font color=Blue>--    ( word "IDREFS" &gt;&gt; return IDREFS) `onFail`</font>
-<a name="(line504)"></a><font color=Blue>--    ( word "ENTITY" &gt;&gt; return ENTITY) `onFail`</font>
-<a name="(line505)"></a><font color=Blue>--    ( word "ENTITIES" &gt;&gt; return ENTITIES) `onFail`</font>
-<a name="(line506)"></a><font color=Blue>--    ( word "NMTOKEN" &gt;&gt; return NMTOKEN) `onFail`</font>
-<a name="(line507)"></a><font color=Blue>--    ( word "NMTOKENS" &gt;&gt; return NMTOKENS)</font>
-<a name="(line508)"></a><font color=Blue>--</font>
-<a name="(line509)"></a><font color=Blue>--enumeratedtype :: HParser EnumeratedType</font>
-<a name="(line510)"></a><font color=Blue>--enumeratedtype =</font>
-<a name="(line511)"></a><font color=Blue>--    ( notationtype &gt;&gt;= return . NotationType) `onFail`</font>
-<a name="(line512)"></a><font color=Blue>--    ( enumeration &gt;&gt;= return . Enumeration)</font>
-<a name="(line513)"></a><font color=Blue>--</font>
-<a name="(line514)"></a><font color=Blue>--notationtype :: HParser NotationType</font>
-<a name="(line515)"></a><font color=Blue>--notationtype = do</font>
-<a name="(line516)"></a><font color=Blue>--    word "NOTATION"</font>
-<a name="(line517)"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
-<a name="(line518)"></a><font color=Blue>--            (name `sepby1` (tok TokPipe))</font>
-<a name="(line519)"></a><font color=Blue>--</font>
-<a name="(line520)"></a><font color=Blue>--enumeration :: HParser Enumeration</font>
-<a name="(line521)"></a><font color=Blue>--enumeration =</font>
-<a name="(line522)"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
-<a name="(line523)"></a><font color=Blue>--            (nmtoken `sepby1` (tok TokPipe))</font>
-<a name="(line524)"></a><font color=Blue>--</font>
-<a name="(line525)"></a><font color=Blue>--defaultdecl :: HParser DefaultDecl</font>
-<a name="(line526)"></a><font color=Blue>--defaultdecl =</font>
-<a name="(line527)"></a><font color=Blue>--    ( tok TokHash &gt;&gt; word "REQUIRED" &gt;&gt; return REQUIRED) `onFail`</font>
-<a name="(line528)"></a><font color=Blue>--    ( tok TokHash &gt;&gt; word "IMPLIED" &gt;&gt; return IMPLIED) `onFail`</font>
-<a name="(line529)"></a><font color=Blue>--    ( do f &lt;- maybe (tok TokHash &gt;&gt; word "FIXED" &gt;&gt; return FIXED)</font>
-<a name="(line530)"></a><font color=Blue>--         a &lt;- attvalue</font>
-<a name="(line531)"></a><font color=Blue>--         return (DefaultTo a f))</font>
-<a name="(line532)"></a><font color=Blue>--</font>
-<a name="(line533)"></a><font color=Blue>--conditionalsect :: HParser ConditionalSect</font>
-<a name="(line534)"></a><font color=Blue>--conditionalsect =</font>
-<a name="(line535)"></a><font color=Blue>--    ( do tok TokSectionOpen</font>
-<a name="(line536)"></a><font color=Blue>--         tok (TokSection INCLUDEx)</font>
-<a name="(line537)"></a><font color=Blue>--         tok TokSqOpen `onFail` failP "missing [ after INCLUDE"</font>
-<a name="(line538)"></a><font color=Blue>--         i &lt;- extsubsetdecl `onFail` failP "missing ExtSubsetDecl in INCLUDE"</font>
-<a name="(line539)"></a><font color=Blue>--         tok TokSectionClose `onFail` failP "missing ] after INCLUDE"</font>
-<a name="(line540)"></a><font color=Blue>--         return (IncludeSect i)) `onFail`</font>
-<a name="(line541)"></a><font color=Blue>--    ( do tok TokSectionOpen</font>
-<a name="(line542)"></a><font color=Blue>--         tok (TokSection IGNOREx)</font>
-<a name="(line543)"></a><font color=Blue>--         tok TokSqOpen `onFail` failP "missing [ after IGNORE"</font>
-<a name="(line544)"></a><font color=Blue>--         i &lt;- many ignoresectcontents</font>
-<a name="(line545)"></a><font color=Blue>--         tok TokSectionClose `onFail` failP "missing ] after IGNORE"</font>
-<a name="(line546)"></a><font color=Blue>--         return (IgnoreSect i))</font>
-<a name="(line547)"></a><font color=Blue>--</font>
-<a name="(line548)"></a><font color=Blue>--ignoresectcontents :: HParser IgnoreSectContents</font>
-<a name="(line549)"></a><font color=Blue>--ignoresectcontents = do</font>
-<a name="(line550)"></a><font color=Blue>--    i &lt;- ignore</font>
-<a name="(line551)"></a><font color=Blue>--    is &lt;- many (do tok TokSectionOpen</font>
-<a name="(line552)"></a><font color=Blue>--                   ic &lt;- ignoresectcontents</font>
-<a name="(line553)"></a><font color=Blue>--                   tok TokSectionClose</font>
-<a name="(line554)"></a><font color=Blue>--                   ig &lt;- ignore</font>
-<a name="(line555)"></a><font color=Blue>--                   return (ic,ig))</font>
-<a name="(line556)"></a><font color=Blue>--    return (IgnoreSectContents i is)</font>
-<a name="(line557)"></a><font color=Blue>--</font>
-<a name="(line558)"></a><font color=Blue>--ignore :: HParser Ignore</font>
-<a name="(line559)"></a><font color=Blue>--ignore = freetext &gt;&gt;= return . Ignore</font>
-<a name="(line560)"></a>
-<a name="(line561)"></a><a name="reference"></a>reference <font color=Red>::</font> HParser Reference
-<a name="(line562)"></a>reference <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line563)"></a>    bracket <font color=Cyan>(</font>tok TokAmp<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSemi<font color=Cyan>)</font> <font color=Cyan>(</font>freetext <font color=Cyan>&gt;&gt;=</font> val<font color=Cyan>)</font>
-<a name="(line564)"></a>  <font color=Green><u>where</u></font>
-<a name="(line565)"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font><font color=Magenta>'x'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font> <font color=Red>|</font> all isHexDigit i
-<a name="(line566)"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readHex <font color=Cyan>$</font> i
-<a name="(line567)"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font>     <font color=Red>|</font> all isDigit i
-<a name="(line568)"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readDec <font color=Cyan>$</font> i
-<a name="(line569)"></a>    val name        <font color=Red>=</font> return <font color=Cyan>.</font> RefEntity <font color=Cyan>$</font> name
-<a name="(line570)"></a>
-<a name="(line571)"></a><font color=Blue>{-
-<a name="(line572)"></a>reference :: HParser Reference
-<a name="(line573)"></a>reference =
-<a name="(line574)"></a>    ( charref &gt;&gt;= return . RefChar) `onFail`
-<a name="(line575)"></a>    ( entityref &gt;&gt;= return . RefEntity)
-<a name="(line576)"></a>
-<a name="(line577)"></a>entityref :: HParser EntityRef
-<a name="(line578)"></a>entityref = do
-<a name="(line579)"></a>    n &lt;- bracket (tok TokAmp) (tok TokSemi) name
-<a name="(line580)"></a>    return n
-<a name="(line581)"></a>
-<a name="(line582)"></a>charref :: HParser CharRef
-<a name="(line583)"></a>charref = do
-<a name="(line584)"></a>    bracket (tok TokAmp) (tok TokSemi) (freetext &gt;&gt;= readCharVal)
-<a name="(line585)"></a>  where
-<a name="(line586)"></a>    readCharVal ('#':'x':i) = return . fst . head . readHex $ i
-<a name="(line587)"></a>    readCharVal ('#':i)     = return . fst . head . readDec $ i
-<a name="(line588)"></a>    readCharVal _           = mzero
-<a name="(line589)"></a>-}</font>
-<a name="(line590)"></a>
-<a name="(line591)"></a><font color=Blue>--pereference :: HParser PEReference</font>
-<a name="(line592)"></a><font color=Blue>--pereference = do</font>
-<a name="(line593)"></a><font color=Blue>--    bracket (tok TokPercent) (tok TokSemi) nmtoken</font>
-<a name="(line594)"></a><font color=Blue>--</font>
-<a name="(line595)"></a><font color=Blue>--entitydecl :: HParser EntityDecl</font>
-<a name="(line596)"></a><font color=Blue>--entitydecl =</font>
-<a name="(line597)"></a><font color=Blue>--    ( gedecl &gt;&gt;= return . EntityGEDecl) `onFail`</font>
-<a name="(line598)"></a><font color=Blue>--    ( pedecl &gt;&gt;= return . EntityPEDecl)</font>
-<a name="(line599)"></a><font color=Blue>--</font>
-<a name="(line600)"></a><font color=Blue>--gedecl :: HParser GEDecl</font>
-<a name="(line601)"></a><font color=Blue>--gedecl = do</font>
-<a name="(line602)"></a><font color=Blue>--    tok TokSpecialOpen</font>
-<a name="(line603)"></a><font color=Blue>--    tok (TokSpecial ENTITYx)</font>
-<a name="(line604)"></a><font color=Blue>--    n &lt;- name</font>
-<a name="(line605)"></a><font color=Blue>--    e &lt;- entitydef `onFail` failP "missing entity defn in G ENTITY decl"</font>
-<a name="(line606)"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating G ENTITY decl"</font>
-<a name="(line607)"></a><font color=Blue>--    return (GEDecl n e)</font>
-<a name="(line608)"></a><font color=Blue>--</font>
-<a name="(line609)"></a><font color=Blue>--pedecl :: HParser PEDecl</font>
-<a name="(line610)"></a><font color=Blue>--pedecl = do</font>
-<a name="(line611)"></a><font color=Blue>--    tok TokSpecialOpen</font>
-<a name="(line612)"></a><font color=Blue>--    tok (TokSpecial ENTITYx)</font>
-<a name="(line613)"></a><font color=Blue>--    tok TokPercent</font>
-<a name="(line614)"></a><font color=Blue>--    n &lt;- name</font>
-<a name="(line615)"></a><font color=Blue>--    e &lt;- pedef `onFail` failP "missing entity defn in P ENTITY decl"</font>
-<a name="(line616)"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating P ENTITY decl"</font>
-<a name="(line617)"></a><font color=Blue>--    return (PEDecl n e)</font>
-<a name="(line618)"></a><font color=Blue>--</font>
-<a name="(line619)"></a><font color=Blue>--entitydef :: HParser EntityDef</font>
-<a name="(line620)"></a><font color=Blue>--entitydef =</font>
-<a name="(line621)"></a><font color=Blue>--    ( entityvalue &gt;&gt;= return . DefEntityValue) `onFail`</font>
-<a name="(line622)"></a><font color=Blue>--    ( do eid &lt;- externalid</font>
-<a name="(line623)"></a><font color=Blue>--         ndd &lt;- maybe ndatadecl</font>
-<a name="(line624)"></a><font color=Blue>--         return (DefExternalID eid ndd))</font>
-<a name="(line625)"></a><font color=Blue>--</font>
-<a name="(line626)"></a><font color=Blue>--pedef :: HParser PEDef</font>
-<a name="(line627)"></a><font color=Blue>--pedef =</font>
-<a name="(line628)"></a><font color=Blue>--    ( entityvalue &gt;&gt;= return . PEDefEntityValue) `onFail`</font>
-<a name="(line629)"></a><font color=Blue>--    ( externalid &gt;&gt;= return . PEDefExternalID)</font>
-<a name="(line630)"></a>
-<a name="(line631)"></a><a name="externalid"></a>externalid <font color=Red>::</font> HParser ExternalID
-<a name="(line632)"></a>externalid <font color=Red>=</font>
-<a name="(line633)"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> word <font color=Magenta>"SYSTEM"</font>
-<a name="(line634)"></a>         s <font color=Red>&lt;-</font> systemliteral
-<a name="(line635)"></a>         return <font color=Cyan>(</font>SYSTEM s<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line636)"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> word <font color=Magenta>"PUBLIC"</font>
-<a name="(line637)"></a>         p <font color=Red>&lt;-</font> pubidliteral
-<a name="(line638)"></a>         s <font color=Red>&lt;-</font> <font color=Cyan>(</font>systemliteral <font color=Cyan>`onFail`</font> return <font color=Cyan>(</font>SystemLiteral <font color=Magenta>""</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line639)"></a>         return <font color=Cyan>(</font>PUBLIC p s<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line640)"></a>
-<a name="(line641)"></a><font color=Blue>--ndatadecl :: HParser NDataDecl</font>
-<a name="(line642)"></a><font color=Blue>--ndatadecl = do</font>
-<a name="(line643)"></a><font color=Blue>--    word "NDATA"</font>
-<a name="(line644)"></a><font color=Blue>--    n &lt;- name</font>
-<a name="(line645)"></a><font color=Blue>--    return (NDATA n)</font>
-<a name="(line646)"></a>
-<a name="(line647)"></a><a name="textdecl"></a>textdecl <font color=Red>::</font> HParser TextDecl
-<a name="(line648)"></a>textdecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line649)"></a>    tok TokPIOpen
-<a name="(line650)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
-<a name="(line651)"></a>    v <font color=Red>&lt;-</font> maybe versioninfo
-<a name="(line652)"></a>    e <font color=Red>&lt;-</font> encodingdecl
-<a name="(line653)"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failP <font color=Magenta>"expected ?&gt; terminating text decl"</font>
-<a name="(line654)"></a>    return <font color=Cyan>(</font>TextDecl v e<font color=Cyan>)</font>
-<a name="(line655)"></a>
-<a name="(line656)"></a><font color=Blue>--extparsedent :: HParser ExtParsedEnt</font>
-<a name="(line657)"></a><font color=Blue>--extparsedent = do</font>
-<a name="(line658)"></a><font color=Blue>--    t &lt;- maybe textdecl</font>
-<a name="(line659)"></a><font color=Blue>--    (_,c) &lt;- (content "")</font>
-<a name="(line660)"></a><font color=Blue>--    return (ExtParsedEnt t c)</font>
-<a name="(line661)"></a><font color=Blue>--</font>
-<a name="(line662)"></a><font color=Blue>--extpe :: HParser ExtPE</font>
-<a name="(line663)"></a><font color=Blue>--extpe = do</font>
-<a name="(line664)"></a><font color=Blue>--    t &lt;- maybe textdecl</font>
-<a name="(line665)"></a><font color=Blue>--    e &lt;- extsubsetdecl</font>
-<a name="(line666)"></a><font color=Blue>--    return (ExtPE t e)</font>
-<a name="(line667)"></a>
-<a name="(line668)"></a><a name="encodingdecl"></a>encodingdecl <font color=Red>::</font> HParser EncodingDecl
-<a name="(line669)"></a>encodingdecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line670)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"encoding"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"ENCODING"</font><font color=Cyan>)</font>
-<a name="(line671)"></a>    tok TokEqual <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"expected = in 'encoding' decl"</font>
-<a name="(line672)"></a>    f <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line673)"></a>    return <font color=Cyan>(</font>EncodingDecl f<font color=Cyan>)</font>
-<a name="(line674)"></a>
-<a name="(line675)"></a><font color=Blue>--notationdecl :: HParser NotationDecl</font>
-<a name="(line676)"></a><font color=Blue>--notationdecl = do</font>
-<a name="(line677)"></a><font color=Blue>--    tok TokSpecialOpen</font>
-<a name="(line678)"></a><font color=Blue>--    word "NOTATION"</font>
-<a name="(line679)"></a><font color=Blue>--    n &lt;- name</font>
-<a name="(line680)"></a><font color=Blue>--    e &lt;- either externalid publicid</font>
-<a name="(line681)"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating NOTATION decl"</font>
-<a name="(line682)"></a><font color=Blue>--    return (NOTATION n e)</font>
-<a name="(line683)"></a>
-<a name="(line684)"></a><a name="publicid"></a>publicid <font color=Red>::</font> HParser PublicID
-<a name="(line685)"></a>publicid <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line686)"></a>    word <font color=Magenta>"PUBLICID"</font>
-<a name="(line687)"></a>    p <font color=Red>&lt;-</font> pubidliteral
-<a name="(line688)"></a>    return <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>
-<a name="(line689)"></a>
-<a name="(line690)"></a><a name="entityvalue"></a>entityvalue <font color=Red>::</font> HParser EntityValue
-<a name="(line691)"></a>entityvalue <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line692)"></a>    evs <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>many ev<font color=Cyan>)</font>
-<a name="(line693)"></a>    return <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>
-<a name="(line694)"></a>
-<a name="(line695)"></a><a name="ev"></a>ev <font color=Red>::</font> HParser EV
-<a name="(line696)"></a>ev <font color=Red>=</font>
-<a name="(line697)"></a>    <font color=Cyan>(</font> freetext <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVString<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line698)"></a><font color=Blue>--  PEREF(EVPERef,ev) `onFail`</font>
-<a name="(line699)"></a>    <font color=Cyan>(</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVRef<font color=Cyan>)</font>
-<a name="(line700)"></a>
-<a name="(line701)"></a><a name="attvalue"></a>attvalue <font color=Red>::</font> HParser AttValue
-<a name="(line702)"></a>attvalue <font color=Red>=</font>
-<a name="(line703)"></a>  <font color=Cyan>(</font> <font color=Green><u>do</u></font> avs <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
-<a name="(line704)"></a>                      <font color=Cyan>(</font>many <font color=Cyan>(</font>either freetext reference<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line705)"></a>       return <font color=Cyan>(</font>AttValue avs<font color=Cyan>)</font> <font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line706)"></a>  <font color=Cyan>(</font> <font color=Green><u>do</u></font> v <font color=Red>&lt;-</font> nmtoken
-<a name="(line707)"></a>       s <font color=Red>&lt;-</font> <font color=Cyan>(</font>tok TokPercent <font color=Cyan>&gt;&gt;</font> return <font color=Magenta>"%"</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font> return <font color=Magenta>""</font>
-<a name="(line708)"></a>       return <font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Cyan>(</font>v<font color=Cyan>++</font>s<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line709)"></a>  <font color=Cyan>(</font> <font color=Green><u>do</u></font> s <font color=Red>&lt;-</font> oneOf <font color=Red>[</font> tok TokPlus <font color=Cyan>&gt;&gt;</font> return <font color=Magenta>"+"</font>
-<a name="(line710)"></a>                  <font color=Cyan>,</font> tok TokHash <font color=Cyan>&gt;&gt;</font> return <font color=Magenta>"#"</font>
-<a name="(line711)"></a>                  <font color=Red>]</font>
-<a name="(line712)"></a>       v <font color=Red>&lt;-</font> nmtoken
-<a name="(line713)"></a>       return <font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Cyan>(</font>s<font color=Cyan>++</font>v<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line714)"></a>  failP <font color=Magenta>"Badly formatted attribute value"</font>
-<a name="(line715)"></a>
-<a name="(line716)"></a><a name="systemliteral"></a>systemliteral <font color=Red>::</font> HParser SystemLiteral
-<a name="(line717)"></a>systemliteral <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line718)"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line719)"></a>    return <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>		<font color=Blue>-- note: need to fold &amp;...; escapes</font>
-<a name="(line720)"></a>
-<a name="(line721)"></a><a name="pubidliteral"></a>pubidliteral <font color=Red>::</font> HParser PubidLiteral
-<a name="(line722)"></a>pubidliteral <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line723)"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line724)"></a>    return <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>		<font color=Blue>-- note: need to fold &amp;...; escapes</font>
-<a name="(line725)"></a>
-<a name="(line726)"></a><a name="chardata"></a>chardata <font color=Red>::</font> HParser CharData
-<a name="(line727)"></a>chardata <font color=Red>=</font> freetext <font color=Blue>-- &gt;&gt;= return . CharData</font>
-<a name="(line728)"></a>
-</pre>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Html/ParseLazy.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | This is a parser for HTML documents.  Unlike for XML documents, it</font>
+<a name="line-2"></a><font color=Blue>--   must include a certain amount of error-correction to account for</font>
+<a name="line-3"></a><font color=Blue>--   HTML features like self-terminating tags, unterminated tags, and</font>
+<a name="line-4"></a><font color=Blue>--   incorrect nesting.  The input is tokenised by the</font>
+<a name="line-5"></a><font color=Blue>--   XML lexer (a separate lexer is not required for HTML).</font>
+<a name="line-6"></a>
+<a name="line-7"></a><font color=Blue>-- It uses a slightly extended version of the Hutton/Meijer parser</font>
+<a name="line-8"></a><font color=Blue>-- combinators.</font>
+<a name="line-9"></a>
+<a name="line-10"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>ParseLazy
+<a name="line-11"></a>  <font color=Cyan>(</font> htmlParse
+<a name="line-12"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-13"></a>
+<a name="line-14"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>either<font color=Cyan>,</font>maybe<font color=Cyan>,</font>sequence<font color=Cyan>)</font>
+<a name="line-15"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Prelude <font color=Cyan>(</font>either<font color=Cyan>)</font>
+<a name="line-16"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
+<a name="line-17"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>toLower<font color=Cyan>,</font> isSpace<font color=Cyan>,</font> isDigit<font color=Cyan>,</font> isHexDigit<font color=Cyan>)</font>
+<a name="line-18"></a><font color=Green><u>import</u></font> Numeric <font color=Cyan>(</font>readDec<font color=Cyan>,</font>readHex<font color=Cyan>)</font>
+<a name="line-19"></a><font color=Green><u>import</u></font> Monad
+<a name="line-20"></a>
+<a name="line-21"></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="line-22"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Lex
+<a name="line-23"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn
+<a name="line-24"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly<font color=Cyan>.</font>NoLeak<font color=Cyan>.</font>Lazy
+<a name="line-25"></a>
+<a name="line-26"></a><font color=Blue>--  #define DEBUG</font>
+<a name="line-27"></a> 
+<a name="line-28"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>
+<a name="line-29"></a><font color=Magenta><em>#  if ( defined(__GLASGOW_HASKELL__) &amp;&amp; __GLASGOW_HASKELL__ &gt; 502 ) || \</em></font>
+<a name="line-30"></a>      <font color=Cyan>(</font> defined<font color=Cyan>(</font><b><font color=Magenta>__NHC__</font></b><font color=Cyan>)</font> <font color=Cyan>&amp;&amp;</font> <b><font color=Magenta>__NHC__</font></b> <font color=Cyan>&gt;</font> <font color=Magenta>114</font> <font color=Cyan>)</font> <font color=Cyan>||</font> defined<font color=Cyan>(</font><b><font color=Magenta>__HUGS__</font></b><font color=Cyan>)</font>
+<a name="line-31"></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="line-32"></a><font color=Magenta><em>#  elif defined(__GLASGOW_HASKELL__)</em></font>
+<a name="line-33"></a><font color=Green><u>import</u></font> IOExts<font color=Cyan>(</font>trace<font color=Cyan>)</font>
+<a name="line-34"></a><font color=Magenta><em>#  elif defined(__NHC__) || defined(__HBC__)</em></font>
+<a name="line-35"></a><font color=Green><u>import</u></font> NonStdTrace
+<a name="line-36"></a><font color=Magenta><em>#  endif</em></font>
+<a name="line-37"></a><a name="debug"></a><font color=Blue>debug</font> <font color=Red>::</font> Monad m <font color=Red>=&gt;</font> String <font color=Red>-&gt;</font> m ()
+<a name="line-38"></a><font color=Blue>debug</font> s <font color=Red>=</font> trace s <font color=Cyan>(</font>return ()<font color=Cyan>)</font>
+<a name="line-39"></a><font color=Magenta><em>#else</em></font>
+<a name="line-40"></a><font color=Blue>debug</font> <font color=Red>::</font> Monad m <font color=Red>=&gt;</font> String <font color=Red>-&gt;</font> m ()
+<a name="line-41"></a><font color=Blue>debug</font> s <font color=Red>=</font> return ()
+<a name="line-42"></a><font color=Magenta><em>#endif</em></font>
+<a name="line-43"></a>
+<a name="line-44"></a>
+<a name="line-45"></a><a name="htmlParse"></a><font color=Blue>-- | The first argument is the name of the file, the second is the string</font>
+<a name="line-46"></a><font color=Blue>--   contents of the file.  The result is the generic representation of</font>
+<a name="line-47"></a><font color=Blue>--   an XML document.  Any errors cause program failure with message to stderr.</font>
+<a name="line-48"></a><font color=Blue>htmlParse</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Document Posn
+<a name="line-49"></a><font color=Blue>htmlParse</font> name <font color=Red>=</font> <font color=Blue>{-simplify .-}</font> fst <font color=Cyan>.</font> runParser document <font color=Cyan>.</font> xmlLex name
+<a name="line-50"></a>
+<a name="line-51"></a><font color=Blue>{-
+<a name="line-52"></a>-- | The first argument is the name of the file, the second is the string
+<a name="line-53"></a>--   contents of the file.  The result is the generic representation of
+<a name="line-54"></a>--   an XML document.  Any parsing errors are returned in the @Either@ type.
+<a name="line-55"></a>htmlParse' :: String -&gt; String -&gt; Either String (Document Posn)
+<a name="line-56"></a>htmlParse' name = Prelude.either Left (Right . simplify) . fst
+<a name="line-57"></a>                  . runParser document . xmlLex name
+<a name="line-58"></a>-}</font>
+<a name="line-59"></a>
+<a name="line-60"></a><font color=Blue>---- Document simplification ----</font>
+<a name="line-61"></a>
+<a name="line-62"></a><a name="simplify"></a><font color=Blue>simplify</font> <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Document i
+<a name="line-63"></a><font color=Blue>simplify</font> <font color=Cyan>(</font>Document p st <font color=Cyan>(</font>Elem n avs cs<font color=Cyan>)</font> ms<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-64"></a>    Document p st <font color=Cyan>(</font>Elem n avs <font color=Cyan>(</font>deepfilter simp cs<font color=Cyan>)</font><font color=Cyan>)</font> ms
+<a name="line-65"></a>  <font color=Green><u>where</u></font>
+<a name="line-66"></a>    simp <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"null"</font> [] []<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> False
+<a name="line-67"></a>    simp <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem  n     <font color=Green><u>_</u></font>  []<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>|</font> n <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"font"</font><font color=Cyan>,</font><font color=Magenta>"p"</font><font color=Cyan>,</font><font color=Magenta>"i"</font><font color=Cyan>,</font><font color=Magenta>"b"</font><font color=Cyan>,</font><font color=Magenta>"em"</font>
+<a name="line-68"></a>                                                  <font color=Cyan>,</font><font color=Magenta>"tt"</font><font color=Cyan>,</font><font color=Magenta>"big"</font><font color=Cyan>,</font><font color=Magenta>"small"</font><font color=Red>]</font> <font color=Red>=</font> False
+<a name="line-69"></a> <font color=Blue>-- simp (CString False s _) | all isSpace s = False</font>
+<a name="line-70"></a>    simp <font color=Green><u>_</u></font> <font color=Red>=</font> True
+<a name="line-71"></a>    deepfilter p <font color=Red>=</font>
+<a name="line-72"></a>        filter p <font color=Cyan>.</font> map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>
+<a name="line-73"></a>                          CElem <font color=Cyan>(</font>Elem n avs cs<font color=Cyan>)</font> i
+<a name="line-74"></a>                                  <font color=Red>-&gt;</font> CElem <font color=Cyan>(</font>Elem n avs <font color=Cyan>(</font>deepfilter p cs<font color=Cyan>)</font><font color=Cyan>)</font> i
+<a name="line-75"></a>                          <font color=Green><u>_</u></font>       <font color=Red>-&gt;</font> c<font color=Cyan>)</font>
+<a name="line-76"></a>
+<a name="line-77"></a><a name="selfclosingtags"></a><font color=Blue>-- opening any of these, they close again immediately</font>
+<a name="line-78"></a><font color=Blue>selfclosingtags</font> <font color=Red>=</font> <font color=Red>[</font><font color=Magenta>"img"</font><font color=Cyan>,</font><font color=Magenta>"hr"</font><font color=Cyan>,</font><font color=Magenta>"br"</font><font color=Cyan>,</font><font color=Magenta>"meta"</font><font color=Cyan>,</font><font color=Magenta>"col"</font><font color=Cyan>,</font><font color=Magenta>"link"</font><font color=Cyan>,</font><font color=Magenta>"base"</font>
+<a name="line-79"></a>                  <font color=Cyan>,</font><font color=Magenta>"param"</font><font color=Cyan>,</font><font color=Magenta>"area"</font><font color=Cyan>,</font><font color=Magenta>"frame"</font><font color=Cyan>,</font><font color=Magenta>"input"</font><font color=Red>]</font>
+<a name="line-80"></a>
+<a name="line-81"></a><a name="closeInnerTags"></a><font color=Blue>--closing this, implicitly closes any of those which are contained in it</font>
+<a name="line-82"></a><font color=Blue>closeInnerTags</font> <font color=Red>=</font>
+<a name="line-83"></a>  <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"ul"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"li"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-84"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ol"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"li"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-85"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"dl"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"dt"</font><font color=Cyan>,</font><font color=Magenta>"dd"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-86"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tr"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-87"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"div"</font><font color=Cyan>,</font>     <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-88"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"thead"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-89"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tfoot"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-90"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tbody"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-91"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"table"</font><font color=Cyan>,</font>   <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Cyan>,</font><font color=Magenta>"thead"</font><font color=Cyan>,</font><font color=Magenta>"tfoot"</font><font color=Cyan>,</font><font color=Magenta>"tbody"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-92"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"caption"</font><font color=Cyan>,</font> <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-93"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"th"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-94"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"td"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-95"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"li"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-96"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"dt"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-97"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"dd"</font><font color=Cyan>,</font>      <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-98"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"object"</font><font color=Cyan>,</font>  <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-99"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"map"</font><font color=Cyan>,</font>     <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-100"></a>  <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"body"</font><font color=Cyan>,</font>    <font color=Red>[</font><font color=Magenta>"p"</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-101"></a>  <font color=Red>]</font>
+<a name="line-102"></a>
+<a name="line-103"></a><a name="closes"></a><font color=Blue>--opening this, implicitly closes that</font>
+<a name="line-104"></a><font color=Blue>closes</font> <font color=Red>::</font> Name <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> Bool
+<a name="line-105"></a><font color=Magenta>"a"</font>  <font color=Cyan>`closes`</font> <font color=Magenta>"a"</font>   <font color=Red>=</font>  True
+<a name="line-106"></a><font color=Magenta>"li"</font> <font color=Cyan>`closes`</font> <font color=Magenta>"li"</font>  <font color=Red>=</font>  True
+<a name="line-107"></a><font color=Magenta>"th"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font>      <font color=Red>=</font>  True
+<a name="line-108"></a><font color=Magenta>"td"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Red>]</font>      <font color=Red>=</font>  True
+<a name="line-109"></a><font color=Magenta>"tr"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"th"</font><font color=Cyan>,</font><font color=Magenta>"td"</font><font color=Cyan>,</font><font color=Magenta>"tr"</font><font color=Red>]</font> <font color=Red>=</font>  True
+<a name="line-110"></a><font color=Magenta>"dt"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"dt"</font><font color=Cyan>,</font><font color=Magenta>"dd"</font><font color=Red>]</font>      <font color=Red>=</font>  True
+<a name="line-111"></a><font color=Magenta>"dd"</font> <font color=Cyan>`closes`</font>  t    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"dt"</font><font color=Cyan>,</font><font color=Magenta>"dd"</font><font color=Red>]</font>      <font color=Red>=</font>  True
+<a name="line-112"></a><font color=Magenta>"form"</font>  <font color=Cyan>`closes`</font> <font color=Magenta>"form"</font>      <font color=Red>=</font> True
+<a name="line-113"></a><font color=Magenta>"label"</font> <font color=Cyan>`closes`</font> <font color=Magenta>"label"</font>     <font color=Red>=</font> True
+<a name="line-114"></a><font color=Green><u>_</u></font>       <font color=Cyan>`closes`</font> <font color=Magenta>"option"</font>    <font color=Red>=</font> True
+<a name="line-115"></a><font color=Magenta>"thead"</font> <font color=Cyan>`closes`</font> t  <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"colgroup"</font><font color=Red>]</font>          <font color=Red>=</font> True
+<a name="line-116"></a><font color=Magenta>"tfoot"</font> <font color=Cyan>`closes`</font> t  <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"thead"</font><font color=Cyan>,</font><font color=Magenta>"colgroup"</font><font color=Red>]</font>  <font color=Red>=</font> True
+<a name="line-117"></a><font color=Magenta>"tbody"</font> <font color=Cyan>`closes`</font> t  <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"tbody"</font><font color=Cyan>,</font><font color=Magenta>"tfoot"</font><font color=Cyan>,</font><font color=Magenta>"thead"</font><font color=Cyan>,</font><font color=Magenta>"colgroup"</font><font color=Red>]</font> <font color=Red>=</font> True
+<a name="line-118"></a><font color=Magenta>"colgroup"</font> <font color=Cyan>`closes`</font> <font color=Magenta>"colgroup"</font>  <font color=Red>=</font> True
+<a name="line-119"></a><a name="closes"></a><font color=Blue>t</font> <font color=Cyan>`closes`</font> <font color=Magenta>"p"</font>
+<a name="line-120"></a>    <font color=Red>|</font> t <font color=Cyan>`elem`</font> <font color=Red>[</font><font color=Magenta>"p"</font><font color=Cyan>,</font><font color=Magenta>"h1"</font><font color=Cyan>,</font><font color=Magenta>"h2"</font><font color=Cyan>,</font><font color=Magenta>"h3"</font><font color=Cyan>,</font><font color=Magenta>"h4"</font><font color=Cyan>,</font><font color=Magenta>"h5"</font><font color=Cyan>,</font><font color=Magenta>"h6"</font>
+<a name="line-121"></a>               <font color=Cyan>,</font><font color=Magenta>"hr"</font><font color=Cyan>,</font><font color=Magenta>"div"</font><font color=Cyan>,</font><font color=Magenta>"ul"</font><font color=Cyan>,</font><font color=Magenta>"dl"</font><font color=Cyan>,</font><font color=Magenta>"ol"</font><font color=Cyan>,</font><font color=Magenta>"table"</font><font color=Red>]</font>  <font color=Red>=</font>  True
+<a name="line-122"></a><font color=Green><u>_</u></font> <font color=Cyan>`closes`</font> <font color=Green><u>_</u></font> <font color=Red>=</font> False
+<a name="line-123"></a>
+<a name="line-124"></a>
+<a name="line-125"></a>
+<a name="line-126"></a><font color=Blue>---- Misc ----</font>
+<a name="line-127"></a>
+<a name="line-128"></a><a name="fst3"></a><font color=Blue>fst3</font> <font color=Cyan>(</font>a<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> a
+<a name="line-129"></a><a name="snd3"></a><font color=Blue>snd3</font> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> a
+<a name="line-130"></a><a name="thd3"></a><font color=Blue>thd3</font> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>)</font> <font color=Red>=</font> a
+<a name="line-131"></a>
+<a name="line-132"></a>
+<a name="line-133"></a>
+<a name="line-134"></a><font color=Blue>---- Auxiliary Parsing Functions ----</font>
+<a name="line-135"></a>
+<a name="line-136"></a><a name="HParser"></a><font color=Green><u>type</u></font> HParser a <font color=Red>=</font> Parser <font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font> a
+<a name="line-137"></a>
+<a name="line-138"></a><a name="tok"></a><font color=Blue>tok</font> <font color=Red>::</font> TokenT <font color=Red>-&gt;</font> HParser TokenT
+<a name="line-139"></a><font color=Blue>tok</font> t <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t'<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-140"></a>           <font color=Green><u>case</u></font> t' <font color=Green><u>of</u></font> TokError s    <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
+<a name="line-141"></a>                      <font color=Green><u>_</u></font> <font color=Red>|</font> t'<font color=Cyan>==</font>t     <font color=Red>-&gt;</font> return t
+<a name="line-142"></a>                        <font color=Red>|</font> otherwise <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
+<a name="line-143"></a>
+<a name="line-144"></a><a name="name"></a><font color=Blue>name</font> <font color=Red>::</font> HParser Name
+<a name="line-145"></a><font color=Blue>--name = do {(p,TokName s) &lt;- next; return s}</font>
+<a name="line-146"></a><font color=Blue>name</font> <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>tok<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-147"></a>          <font color=Green><u>case</u></font> tok <font color=Green><u>of</u></font> 
+<a name="line-148"></a>            TokName s  <font color=Red>-&gt;</font> return s 
+<a name="line-149"></a>            TokError s <font color=Red>-&gt;</font> report failBad <font color=Magenta>"a name"</font> p tok
+<a name="line-150"></a>            <font color=Green><u>_</u></font>          <font color=Red>-&gt;</font> report fail <font color=Magenta>"a name"</font> p tok
+<a name="line-151"></a>
+<a name="line-152"></a><a name="string"></a><font color=Blue>string</font><font color=Cyan>,</font> freetext <font color=Red>::</font> HParser String
+<a name="line-153"></a><font color=Blue>string</font>   <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-154"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokName s <font color=Red>-&gt;</font> return s
+<a name="line-155"></a>                        <font color=Green><u>_</u></font>         <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
+<a name="line-156"></a><a name="freetext"></a><font color=Blue>freetext</font> <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-157"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokFreeText s <font color=Red>-&gt;</font> return s
+<a name="line-158"></a>                        <font color=Green><u>_</u></font>             <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
+<a name="line-159"></a>
+<a name="line-160"></a><a name="maybe"></a><font color=Blue>maybe</font> <font color=Red>::</font> HParser a <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font>
+<a name="line-161"></a><font color=Blue>maybe</font> p <font color=Red>=</font>
+<a name="line-162"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Just<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-163"></a>    <font color=Cyan>(</font> return Nothing<font color=Cyan>)</font>
+<a name="line-164"></a>
+<a name="line-165"></a><a name="either"></a><font color=Blue>either</font> <font color=Red>::</font> HParser a <font color=Red>-&gt;</font> HParser b <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Either a b<font color=Cyan>)</font>
+<a name="line-166"></a><font color=Blue>either</font> p q <font color=Red>=</font>
+<a name="line-167"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Left<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-168"></a>    <font color=Cyan>(</font> q <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Right<font color=Cyan>)</font>
+<a name="line-169"></a>
+<a name="line-170"></a><a name="word"></a><font color=Blue>word</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> HParser ()
+<a name="line-171"></a><font color=Blue>word</font> s <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x <font color=Red>&lt;-</font> next
+<a name="line-172"></a>            <font color=Cyan>;</font> <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>
+<a name="line-173"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokName n<font color=Cyan>)</font>     <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
+<a name="line-174"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokFreeText n<font color=Cyan>)</font> <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
+<a name="line-175"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Red>@</font><font color=Cyan>(</font>TokError <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
+<a name="line-176"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
+<a name="line-177"></a>            <font color=Cyan>}</font>
+<a name="line-178"></a>
+<a name="line-179"></a><a name="posn"></a><font color=Blue>posn</font> <font color=Red>::</font> HParser Posn
+<a name="line-180"></a><font color=Blue>posn</font> <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x<font color=Red>@</font><font color=Cyan>(</font>p<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-181"></a>          <font color=Cyan>;</font> reparse <font color=Red>[</font>x<font color=Red>]</font>
+<a name="line-182"></a>          <font color=Cyan>;</font> return p
+<a name="line-183"></a>          <font color=Cyan>}</font> <font color=Cyan>`onFail`</font> return noPos
+<a name="line-184"></a>
+<a name="line-185"></a><a name="nmtoken"></a><font color=Blue>nmtoken</font> <font color=Red>::</font> HParser NmToken
+<a name="line-186"></a><font color=Blue>nmtoken</font> <font color=Red>=</font> <font color=Cyan>(</font>string <font color=Cyan>`onFail`</font> freetext<font color=Cyan>)</font>
+<a name="line-187"></a>
+<a name="line-188"></a><a name="failP"></a><font color=Blue>failP</font><font color=Cyan>,</font> failBadP <font color=Red>::</font> String <font color=Red>-&gt;</font> HParser a
+<a name="line-189"></a><font color=Blue>failP</font> msg    <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> fail <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="line-190"></a><a name="failBadP"></a><font color=Blue>failBadP</font> msg <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> failBad <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="line-191"></a>
+<a name="line-192"></a><a name="report"></a><font color=Blue>report</font> <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>HParser a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> TokenT <font color=Red>-&gt;</font> HParser a
+<a name="line-193"></a><font color=Blue>report</font> fail exp p t <font color=Red>=</font> fail <font color=Cyan>(</font><font color=Magenta>"Expected "</font><font color=Cyan>++</font>show exp<font color=Cyan>++</font><font color=Magenta>" but found "</font><font color=Cyan>++</font>show t
+<a name="line-194"></a>                           <font color=Cyan>++</font><font color=Magenta>"\n  at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
+<a name="line-195"></a>
+<a name="line-196"></a><a name="adjustErrP"></a><font color=Blue>adjustErrP</font> <font color=Red>::</font> HParser a <font color=Red>-&gt;</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> HParser a
+<a name="line-197"></a><a name="adjustErrP"></a><font color=Blue>p</font> <font color=Cyan>`adjustErrP`</font> f <font color=Red>=</font> p <font color=Cyan>`onFail`</font> <font color=Green><u>do</u></font> pn <font color=Red>&lt;-</font> posn
+<a name="line-198"></a>                                 <font color=Cyan>(</font>p <font color=Cyan>`adjustErr`</font> f<font color=Cyan>)</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font>show pn<font color=Cyan>)</font>
+<a name="line-199"></a>
+<a name="line-200"></a><font color=Blue>---- XML Parsing Functions ----</font>
+<a name="line-201"></a>
+<a name="line-202"></a><a name="document"></a><font color=Blue>document</font> <font color=Red>::</font> HParser <font color=Cyan>(</font>Document Posn<font color=Cyan>)</font>
+<a name="line-203"></a><font color=Blue>document</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-204"></a>    return Document
+<a name="line-205"></a>        <font color=Cyan>`apply`</font> <font color=Cyan>(</font>prolog <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"unrecognisable XML prolog\n"</font><font color=Cyan>++</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-206"></a>        <font color=Cyan>`apply`</font> <font color=Cyan>(</font>return emptyST<font color=Cyan>)</font>
+<a name="line-207"></a>        <font color=Cyan>`apply`</font> <font color=Cyan>(</font><font color=Green><u>do</u></font> es <font color=Red>&lt;-</font> many1 <font color=Cyan>(</font>element <font color=Magenta>"HTML document"</font><font color=Cyan>)</font>
+<a name="line-208"></a>                    return <font color=Cyan>(</font><font color=Green><u>case</u></font> map snd es <font color=Green><u>of</u></font>
+<a name="line-209"></a>                                <font color=Red>[</font>e<font color=Red>]</font> <font color=Red>-&gt;</font> e
+<a name="line-210"></a>                                es  <font color=Red>-&gt;</font> Elem <font color=Magenta>"html"</font> [] <font color=Cyan>(</font>map mkCElem es<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-211"></a>        <font color=Cyan>`apply`</font> <font color=Cyan>(</font>many misc<font color=Cyan>)</font>
+<a name="line-212"></a>  <font color=Green><u>where</u></font> mkCElem e <font color=Red>=</font> CElem e noPos
+<a name="line-213"></a>
+<a name="line-214"></a><a name="comment"></a><font color=Blue>comment</font> <font color=Red>::</font> HParser Comment
+<a name="line-215"></a><font color=Blue>comment</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-216"></a>    bracket <font color=Cyan>(</font>tok TokCommentOpen<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokCommentClose<font color=Cyan>)</font> freetext
+<a name="line-217"></a>
+<a name="line-218"></a><a name="processinginstruction"></a><font color=Blue>processinginstruction</font> <font color=Red>::</font> HParser ProcessingInstruction
+<a name="line-219"></a><font color=Blue>processinginstruction</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-220"></a>    tok TokPIOpen
+<a name="line-221"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-222"></a>      n <font color=Red>&lt;-</font> string  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"processing instruction has no target"</font>
+<a name="line-223"></a>      f <font color=Red>&lt;-</font> freetext
+<a name="line-224"></a>      <font color=Cyan>(</font>tok TokPIClose <font color=Cyan>`onFail`</font> tok TokAnyClose<font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing ?&gt; or &gt;"</font>
+<a name="line-225"></a>      return <font color=Cyan>(</font>n<font color=Cyan>,</font> f<font color=Cyan>)</font>
+<a name="line-226"></a>
+<a name="line-227"></a><a name="cdsect"></a><font color=Blue>cdsect</font> <font color=Red>::</font> HParser CDSect
+<a name="line-228"></a><font color=Blue>cdsect</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-229"></a>    tok TokSectionOpen
+<a name="line-230"></a>    bracket <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection CDATAx<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSectionClose<font color=Cyan>)</font> chardata
+<a name="line-231"></a>
+<a name="line-232"></a><a name="prolog"></a><font color=Blue>prolog</font> <font color=Red>::</font> HParser Prolog
+<a name="line-233"></a><font color=Blue>prolog</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-234"></a>    x <font color=Red>&lt;-</font> maybe xmldecl
+<a name="line-235"></a>    m1 <font color=Red>&lt;-</font> many misc
+<a name="line-236"></a>    dtd <font color=Red>&lt;-</font> maybe doctypedecl
+<a name="line-237"></a>    m2 <font color=Red>&lt;-</font> many misc
+<a name="line-238"></a>    return <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font>
+<a name="line-239"></a>
+<a name="line-240"></a><a name="xmldecl"></a><font color=Blue>xmldecl</font> <font color=Red>::</font> HParser XMLDecl
+<a name="line-241"></a><font color=Blue>xmldecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-242"></a>    tok TokPIOpen
+<a name="line-243"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
+<a name="line-244"></a>    p <font color=Red>&lt;-</font> posn
+<a name="line-245"></a>    s <font color=Red>&lt;-</font> freetext
+<a name="line-246"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing ?&gt; in &lt;?xml ...?&gt;"</font>
+<a name="line-247"></a>    <font color=Cyan>(</font>return <font color=Cyan>.</font> fst <font color=Cyan>.</font> runParser aux <font color=Cyan>.</font> xmlReLex p<font color=Cyan>)</font> s
+<a name="line-248"></a>  <font color=Green><u>where</u></font>
+<a name="line-249"></a>    aux <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-250"></a>      v <font color=Red>&lt;-</font> versioninfo  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing XML version info"</font>
+<a name="line-251"></a>      e <font color=Red>&lt;-</font> maybe encodingdecl
+<a name="line-252"></a>      s <font color=Red>&lt;-</font> maybe sddecl
+<a name="line-253"></a>      return <font color=Cyan>(</font>XMLDecl v e s<font color=Cyan>)</font>
+<a name="line-254"></a>
+<a name="line-255"></a><a name="versioninfo"></a><font color=Blue>versioninfo</font> <font color=Red>::</font> HParser VersionInfo
+<a name="line-256"></a><font color=Blue>versioninfo</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-257"></a>    <font color=Cyan>(</font>word <font color=Magenta>"version"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"VERSION"</font><font color=Cyan>)</font>
+<a name="line-258"></a>    tok TokEqual
+<a name="line-259"></a>    bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-260"></a>
+<a name="line-261"></a><a name="misc"></a><font color=Blue>misc</font> <font color=Red>::</font> HParser Misc
+<a name="line-262"></a><font color=Blue>misc</font> <font color=Red>=</font> 
+<a name="line-263"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"&lt;!--comment--&gt;"</font><font color=Cyan>,</font> comment <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Comment<font color=Cyan>)</font>
+<a name="line-264"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"&lt;?PI?&gt;"</font><font color=Cyan>,</font>         processinginstruction <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PI<font color=Cyan>)</font>
+<a name="line-265"></a>           <font color=Red>]</font>
+<a name="line-266"></a>
+<a name="line-267"></a>
+<a name="line-268"></a><font color=Blue>-- Question: for HTML, should we disallow in-line DTDs, allowing only externals?</font>
+<a name="line-269"></a><font color=Blue>-- Answer: I think so.</font>
+<a name="line-270"></a>
+<a name="line-271"></a><a name="doctypedecl"></a><font color=Blue>doctypedecl</font> <font color=Red>::</font> HParser DocTypeDecl
+<a name="line-272"></a><font color=Blue>doctypedecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-273"></a>    tok TokSpecialOpen
+<a name="line-274"></a>    tok <font color=Cyan>(</font>TokSpecial DOCTYPEx<font color=Cyan>)</font>
+<a name="line-275"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-276"></a>      n <font color=Red>&lt;-</font> name
+<a name="line-277"></a>      eid <font color=Red>&lt;-</font> maybe externalid
+<a name="line-278"></a><font color=Blue>--    es &lt;- maybe (bracket (tok TokSqOpen) (tok TokSqClose)) (many markupdecl)</font>
+<a name="line-279"></a>      tok TokAnyClose  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing &gt; in DOCTYPE decl"</font>
+<a name="line-280"></a><font color=Blue>--    return (DTD n eid (case es of { Nothing -&gt; []; Just e -&gt; e }))</font>
+<a name="line-281"></a>      return <font color=Cyan>(</font>DTD n eid []<font color=Cyan>)</font>
+<a name="line-282"></a>
+<a name="line-283"></a><font color=Blue>--markupdecl :: HParser MarkupDecl</font>
+<a name="line-284"></a><font color=Blue>--markupdecl =</font>
+<a name="line-285"></a><font color=Blue>--    ( elementdecl &gt;&gt;= return . Element) `onFail`</font>
+<a name="line-286"></a><font color=Blue>--    ( attlistdecl &gt;&gt;= return . AttList) `onFail`</font>
+<a name="line-287"></a><font color=Blue>--    ( entitydecl &gt;&gt;= return . Entity) `onFail`</font>
+<a name="line-288"></a><font color=Blue>--    ( notationdecl &gt;&gt;= return . Notation) `onFail`</font>
+<a name="line-289"></a><font color=Blue>--    ( misc &gt;&gt;= return . MarkupMisc) `onFail`</font>
+<a name="line-290"></a><font color=Blue>--    PEREF(MarkupPE,markupdecl)</font>
+<a name="line-291"></a><font color=Blue>--</font>
+<a name="line-292"></a><font color=Blue>--extsubset :: HParser ExtSubset</font>
+<a name="line-293"></a><font color=Blue>--extsubset = do</font>
+<a name="line-294"></a><font color=Blue>--    td &lt;- maybe textdecl</font>
+<a name="line-295"></a><font color=Blue>--    ds &lt;- many extsubsetdecl</font>
+<a name="line-296"></a><font color=Blue>--    return (ExtSubset td ds)</font>
+<a name="line-297"></a><font color=Blue>--</font>
+<a name="line-298"></a><font color=Blue>--extsubsetdecl :: HParser ExtSubsetDecl</font>
+<a name="line-299"></a><font color=Blue>--extsubsetdecl =</font>
+<a name="line-300"></a><font color=Blue>--    ( markupdecl &gt;&gt;= return . ExtMarkupDecl) `onFail`</font>
+<a name="line-301"></a><font color=Blue>--    ( conditionalsect &gt;&gt;= return . ExtConditionalSect) `onFail`</font>
+<a name="line-302"></a><font color=Blue>--    PEREF(ExtPEReference,extsubsetdecl)</font>
+<a name="line-303"></a>
+<a name="line-304"></a><a name="sddecl"></a><font color=Blue>sddecl</font> <font color=Red>::</font> HParser SDDecl
+<a name="line-305"></a><font color=Blue>sddecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-306"></a>    <font color=Cyan>(</font>word <font color=Magenta>"standalone"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"STANDALONE"</font><font color=Cyan>)</font>
+<a name="line-307"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-308"></a>      tok TokEqual <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing = in 'standalone' decl"</font>
+<a name="line-309"></a>      bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
+<a name="line-310"></a>              <font color=Cyan>(</font> <font color=Cyan>(</font>word <font color=Magenta>"yes"</font> <font color=Cyan>&gt;&gt;</font> return True<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-311"></a>                <font color=Cyan>(</font>word <font color=Magenta>"no"</font> <font color=Cyan>&gt;&gt;</font> return False<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-312"></a>                failP <font color=Magenta>"'standalone' decl requires 'yes' or 'no' value"</font> <font color=Cyan>)</font>
+<a name="line-313"></a>
+<a name="line-314"></a>
+<a name="line-315"></a>
+<a name="line-316"></a>
+<a name="line-317"></a><a name="Stack"></a><font color=Blue>----</font>
+<a name="line-318"></a><a name="Stack"></a><font color=Blue>-- VERY IMPORTANT NOTE: The stack returned here contains those tags which</font>
+<a name="line-319"></a><a name="Stack"></a><font color=Blue>-- have been closed implicitly and need to be reopened again at the</font>
+<a name="line-320"></a><a name="Stack"></a><font color=Blue>-- earliest opportunity.</font>
+<a name="line-321"></a><a name="Stack"></a><font color=Green><u>type</u></font> Stack <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>Attribute<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-322"></a>
+<a name="line-323"></a><a name="element"></a><font color=Blue>element</font> <font color=Red>::</font> Name <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Stack<font color=Cyan>,</font>Element Posn<font color=Cyan>)</font>
+<a name="line-324"></a><font color=Blue>element</font> ctx <font color=Red>=</font>
+<a name="line-325"></a>  <font color=Green><u>do</u></font>
+<a name="line-326"></a>    tok TokAnyOpen
+<a name="line-327"></a>    <font color=Cyan>(</font>ElemTag e avs<font color=Cyan>)</font> <font color=Red>&lt;-</font> elemtag
+<a name="line-328"></a>    <font color=Cyan>(</font> <font color=Green><u>if</u></font> e <font color=Cyan>`closes`</font> ctx <font color=Green><u>then</u></font>
+<a name="line-329"></a>         <font color=Blue>-- insert the missing close-tag, fail forward, and reparse.</font>
+<a name="line-330"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> debug <font color=Cyan>(</font><font color=Magenta>"/"</font><font color=Cyan>)</font>
+<a name="line-331"></a>              unparse <font color=Cyan>(</font><font color=Red>[</font>TokEndOpen<font color=Cyan>,</font> TokName ctx<font color=Cyan>,</font> TokAnyClose<font color=Cyan>,</font>
+<a name="line-332"></a>                        TokAnyOpen<font color=Cyan>,</font> TokName e<font color=Red>]</font> <font color=Cyan>++</font> reformatAttrs avs<font color=Cyan>)</font>
+<a name="line-333"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem <font color=Magenta>"null"</font> [] []<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-334"></a>      <font color=Green><u>else</u></font> <font color=Green><u>if</u></font> e <font color=Cyan>`elem`</font> selfclosingtags <font color=Green><u>then</u></font>
+<a name="line-335"></a>         <font color=Blue>-- complete the parse straightaway.</font>
+<a name="line-336"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokEndClose	<font color=Blue>-- self-closing &lt;tag /&gt; </font>
+<a name="line-337"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"[+]"</font><font color=Cyan>)</font>
+<a name="line-338"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem e avs []<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-339"></a>     <font color=Blue>--  ( do tok TokAnyClose	-- sequence &lt;tag&gt;&lt;/tag&gt;	(**not HTML?**)</font>
+<a name="line-340"></a>     <font color=Blue>--       debug (e++"[+")</font>
+<a name="line-341"></a>     <font color=Blue>--       n &lt;- bracket (tok TokEndOpen) (tok TokAnyClose) name</font>
+<a name="line-342"></a>     <font color=Blue>--       debug "]"</font>
+<a name="line-343"></a>     <font color=Blue>--       if e == (map toLower n :: Name) </font>
+<a name="line-344"></a>     <font color=Blue>--         then return ([], Elem e avs [])      </font>
+<a name="line-345"></a>     <font color=Blue>--         else return (error "no nesting in empty tag")) `onFail`</font>
+<a name="line-346"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokAnyClose	<font color=Blue>-- &lt;tag&gt; with no close (e.g. &lt;IMG&gt;)</font>
+<a name="line-347"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"[+]"</font><font color=Cyan>)</font>
+<a name="line-348"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem e avs []<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-349"></a>      <font color=Green><u>else</u></font>
+<a name="line-350"></a>        <font color=Cyan>(</font><font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokEndClose
+<a name="line-351"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"[]"</font><font color=Cyan>)</font>
+<a name="line-352"></a>              return <font color=Cyan>(</font>[]<font color=Cyan>,</font> Elem e avs []<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-353"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokAnyClose <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing &gt; or /&gt; in element tag"</font>
+<a name="line-354"></a>              debug <font color=Cyan>(</font>e<font color=Cyan>++</font><font color=Magenta>"["</font><font color=Cyan>)</font>
+<a name="line-355"></a>              return <font color=Cyan>(</font><font color=Red>\</font> interior<font color=Red>-&gt;</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>stack<font color=Cyan>,</font>contained<font color=Cyan>)</font> <font color=Red>=</font> interior
+<a name="line-356"></a>                                   <font color=Green><u>in</u></font>  <font color=Cyan>(</font>stack<font color=Cyan>,</font> Elem e avs contained<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-357"></a>                  <font color=Cyan>`apply`</font>
+<a name="line-358"></a>                  <font color=Cyan>(</font><font color=Green><u>do</u></font> zz <font color=Red>&lt;-</font> manyFinally <font color=Cyan>(</font>content e<font color=Cyan>)</font>
+<a name="line-359"></a>                                        <font color=Cyan>(</font>tok TokEndOpen<font color=Cyan>)</font>
+<a name="line-360"></a>                      n <font color=Red>&lt;-</font> name
+<a name="line-361"></a>                      commit <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font>
+<a name="line-362"></a>                      debug <font color=Magenta>"]"</font>
+<a name="line-363"></a>                      <font color=Green><u>let</u></font> <font color=Cyan>(</font>ss<font color=Cyan>,</font>cs<font color=Cyan>)</font> <font color=Red>=</font> unzip zz
+<a name="line-364"></a>                      <font color=Green><u>let</u></font> s       <font color=Red>=</font> <font color=Green><u>if</u></font> null ss <font color=Green><u>then</u></font> [] <font color=Green><u>else</u></font> last ss
+<a name="line-365"></a>                      <font color=Cyan>(</font> <font color=Green><u>if</u></font> e <font color=Cyan>==</font> <font color=Cyan>(</font>map toLower n <font color=Red>::</font> Name<font color=Cyan>)</font> <font color=Green><u>then</u></font>
+<a name="line-366"></a>                          <font color=Green><u>do</u></font> unparse <font color=Cyan>(</font>reformatTags <font color=Cyan>(</font>closeInner e s<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-367"></a>                             debug <font color=Magenta>"^"</font>
+<a name="line-368"></a>                             return <font color=Cyan>(</font>[]<font color=Cyan>,</font> cs<font color=Cyan>)</font>
+<a name="line-369"></a>                        <font color=Green><u>else</u></font>
+<a name="line-370"></a>                          <font color=Green><u>do</u></font> unparse <font color=Red>[</font>TokEndOpen<font color=Cyan>,</font> TokName n<font color=Cyan>,</font> TokAnyClose<font color=Red>]</font>
+<a name="line-371"></a>                             debug <font color=Magenta>"-"</font>
+<a name="line-372"></a>                             return <font color=Cyan>(</font><font color=Cyan>(</font><font color=Cyan>(</font>e<font color=Cyan>,</font>avs<font color=Cyan>)</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-373"></a>         <font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failP <font color=Cyan>(</font><font color=Magenta>"failed to repair non-matching tags in context: "</font><font color=Cyan>++</font>ctx<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-374"></a>
+<a name="line-375"></a><a name="closeInner"></a><font color=Blue>closeInner</font> <font color=Red>::</font> Name <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>Attribute<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>Attribute<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-376"></a><font color=Blue>closeInner</font> c ts <font color=Red>=</font>
+<a name="line-377"></a>    <font color=Green><u>case</u></font> lookup c closeInnerTags <font color=Green><u>of</u></font>
+<a name="line-378"></a>      <font color=Cyan>(</font>Just these<font color=Cyan>)</font> <font color=Red>-&gt;</font> filter <font color=Cyan>(</font><font color=Cyan>(</font><font color=Cyan>`notElem`</font> these<font color=Cyan>)</font><font color=Cyan>.</font>fst<font color=Cyan>)</font> ts
+<a name="line-379"></a>      Nothing      <font color=Red>-&gt;</font> ts
+<a name="line-380"></a>
+<a name="line-381"></a><a name="unparse"></a><font color=Blue>unparse</font> ts <font color=Red>=</font> <font color=Green><u>do</u></font> p <font color=Red>&lt;-</font> posn
+<a name="line-382"></a>                reparse <font color=Cyan>(</font>zip <font color=Cyan>(</font>repeat p<font color=Cyan>)</font> ts<font color=Cyan>)</font>
+<a name="line-383"></a>
+<a name="line-384"></a><a name="reformatAttrs"></a><font color=Blue>reformatAttrs</font> avs <font color=Red>=</font> concatMap f0 avs
+<a name="line-385"></a>    <font color=Green><u>where</u></font> f0 <font color=Cyan>(</font>a<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=Red>[</font>TokName a<font color=Cyan>,</font> TokEqual<font color=Cyan>,</font> TokQuote<font color=Cyan>,</font>
+<a name="line-386"></a>                                       TokFreeText <font color=Cyan>(</font>show v<font color=Cyan>)</font><font color=Cyan>,</font> TokQuote<font color=Red>]</font>
+<a name="line-387"></a><a name="reformatTags"></a><font color=Blue>reformatTags</font> ts <font color=Red>=</font> concatMap f0 ts
+<a name="line-388"></a>    <font color=Green><u>where</u></font> f0 <font color=Cyan>(</font>t<font color=Cyan>,</font>avs<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>TokAnyOpen<font color=Cyan>,</font> TokName t<font color=Red>]</font><font color=Cyan>++</font>reformatAttrs avs<font color=Cyan>++</font><font color=Red>[</font>TokAnyClose<font color=Red>]</font>
+<a name="line-389"></a>
+<a name="line-390"></a><a name="content"></a><font color=Blue>content</font> <font color=Red>::</font> Name <font color=Red>-&gt;</font> HParser <font color=Cyan>(</font>Stack<font color=Cyan>,</font>Content Posn<font color=Cyan>)</font>
+<a name="line-391"></a><font color=Blue>content</font> ctx <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn <font color=Cyan>;</font> content' p ctx <font color=Cyan>}</font>
+<a name="line-392"></a>  <font color=Green><u>where</u></font> content' p ctx <font color=Red>=</font> oneOf'
+<a name="line-393"></a>          <font color=Red>[</font> <font color=Cyan>(</font> <font color=Magenta>"element"</font><font color=Cyan>,</font> element ctx <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font><font color=Cyan>(</font>s<font color=Cyan>,</font>e<font color=Cyan>)</font><font color=Red>-&gt;</font> return <font color=Cyan>(</font>s<font color=Cyan>,</font> CElem e p<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-394"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"chardata"</font><font color=Cyan>,</font> chardata <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>s<font color=Red>-&gt;</font> return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CString False s p<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-395"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"reference"</font><font color=Cyan>,</font> reference <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>r<font color=Red>-&gt;</font> return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CRef r p<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-396"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"cdsect"</font><font color=Cyan>,</font> cdsect <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>c<font color=Red>-&gt;</font> return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CString True c p<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-397"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"misc"</font><font color=Cyan>,</font> misc <font color=Cyan>&gt;&gt;=</font> <font color=Red>\</font>m<font color=Red>-&gt;</font>  return <font color=Cyan>(</font>[]<font color=Cyan>,</font> CMisc m p<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-398"></a>          <font color=Red>]</font> <font color=Cyan>`adjustErrP`</font> <font color=Cyan>(</font><font color=Magenta>"when looking for a content item,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-399"></a>
+<a name="line-400"></a><a name="elemtag"></a><font color=Blue>----</font>
+<a name="line-401"></a><font color=Blue>elemtag</font> <font color=Red>::</font> HParser ElemTag
+<a name="line-402"></a><font color=Blue>elemtag</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-403"></a>    n <font color=Red>&lt;-</font> name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"malformed element tag\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-404"></a>    <font color=Green><u>as</u></font> <font color=Red>&lt;-</font> many attribute
+<a name="line-405"></a>    return <font color=Cyan>(</font>ElemTag <font color=Cyan>(</font>map toLower n<font color=Cyan>)</font> <font color=Green><u>as</u></font><font color=Cyan>)</font>
+<a name="line-406"></a>
+<a name="line-407"></a><a name="attribute"></a><font color=Blue>attribute</font> <font color=Red>::</font> HParser Attribute
+<a name="line-408"></a><font color=Blue>attribute</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-409"></a>    n <font color=Red>&lt;-</font> name
+<a name="line-410"></a>    v <font color=Red>&lt;-</font> <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokEqual
+<a name="line-411"></a>             attvalue<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-412"></a>         <font color=Cyan>(</font>return <font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Magenta>"TRUE"</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-413"></a>    return <font color=Cyan>(</font>map toLower n<font color=Cyan>,</font>v<font color=Cyan>)</font>
+<a name="line-414"></a>
+<a name="line-415"></a><font color=Blue>--elementdecl :: HParser ElementDecl</font>
+<a name="line-416"></a><font color=Blue>--elementdecl = do</font>
+<a name="line-417"></a><font color=Blue>--    tok TokSpecialOpen</font>
+<a name="line-418"></a><font color=Blue>--    tok (TokSpecial ELEMENTx)</font>
+<a name="line-419"></a><font color=Blue>--    n &lt;- name `onFail` failP "missing identifier in ELEMENT decl"</font>
+<a name="line-420"></a><font color=Blue>--    c &lt;- contentspec `onFail` failP "missing content spec in ELEMENT decl"</font>
+<a name="line-421"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating ELEMENT decl"</font>
+<a name="line-422"></a><font color=Blue>--    return (ElementDecl n c)</font>
+<a name="line-423"></a><font color=Blue>--</font>
+<a name="line-424"></a><font color=Blue>--contentspec :: HParser ContentSpec</font>
+<a name="line-425"></a><font color=Blue>--contentspec =</font>
+<a name="line-426"></a><font color=Blue>--    ( word "EMPTY" &gt;&gt; return EMPTY) `onFail`</font>
+<a name="line-427"></a><font color=Blue>--    ( word "ANY" &gt;&gt; return ANY) `onFail`</font>
+<a name="line-428"></a><font color=Blue>--    ( mixed &gt;&gt;= return . Mixed) `onFail`</font>
+<a name="line-429"></a><font color=Blue>--    ( cp &gt;&gt;= return . ContentSpec) `onFail`</font>
+<a name="line-430"></a><font color=Blue>--    PEREF(ContentPE,contentspec)</font>
+<a name="line-431"></a><font color=Blue>--</font>
+<a name="line-432"></a><font color=Blue>--choice :: HParser [CP]</font>
+<a name="line-433"></a><font color=Blue>--choice = do</font>
+<a name="line-434"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
+<a name="line-435"></a><font color=Blue>--            (cp `sepby1` (tok TokPipe))</font>
+<a name="line-436"></a><font color=Blue>--</font>
+<a name="line-437"></a><font color=Blue>--sequence :: HParser [CP]</font>
+<a name="line-438"></a><font color=Blue>--sequence = do</font>
+<a name="line-439"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
+<a name="line-440"></a><font color=Blue>--            (cp `sepby1` (tok TokComma))</font>
+<a name="line-441"></a><font color=Blue>--</font>
+<a name="line-442"></a><font color=Blue>--cp :: HParser CP</font>
+<a name="line-443"></a><font color=Blue>--cp =</font>
+<a name="line-444"></a><font color=Blue>--    ( do n &lt;- name</font>
+<a name="line-445"></a><font color=Blue>--         m &lt;- modifier</font>
+<a name="line-446"></a><font color=Blue>--         return (TagName n m)) `onFail`</font>
+<a name="line-447"></a><font color=Blue>--    ( do ss &lt;- sequence</font>
+<a name="line-448"></a><font color=Blue>--         m &lt;- modifier</font>
+<a name="line-449"></a><font color=Blue>--         return (Seq ss m)) `onFail`</font>
+<a name="line-450"></a><font color=Blue>--    ( do cs &lt;- choice</font>
+<a name="line-451"></a><font color=Blue>--         m &lt;- modifier</font>
+<a name="line-452"></a><font color=Blue>--         return (Choice cs m)) `onFail`</font>
+<a name="line-453"></a><font color=Blue>--    PEREF(CPPE,cp)</font>
+<a name="line-454"></a><font color=Blue>--</font>
+<a name="line-455"></a><font color=Blue>--modifier :: HParser Modifier</font>
+<a name="line-456"></a><font color=Blue>--modifier =</font>
+<a name="line-457"></a><font color=Blue>--    ( tok TokStar &gt;&gt; return Star) `onFail`</font>
+<a name="line-458"></a><font color=Blue>--    ( tok TokQuery &gt;&gt; return Query) `onFail`</font>
+<a name="line-459"></a><font color=Blue>--    ( tok TokPlus &gt;&gt; return Plus) `onFail`</font>
+<a name="line-460"></a><font color=Blue>--    ( return None)</font>
+<a name="line-461"></a><font color=Blue>--</font>
+<a name="line-462"></a><font color=Blue>--mixed :: HParser Mixed</font>
+<a name="line-463"></a><font color=Blue>--mixed = do</font>
+<a name="line-464"></a><font color=Blue>--    tok TokBraOpen</font>
+<a name="line-465"></a><font color=Blue>--    tok TokHash</font>
+<a name="line-466"></a><font color=Blue>--    word "PCDATA"</font>
+<a name="line-467"></a><font color=Blue>--    cont</font>
+<a name="line-468"></a><font color=Blue>--  where</font>
+<a name="line-469"></a><font color=Blue>--    cont = ( tok TokBraClose &gt;&gt; return PCDATA) `onFail`</font>
+<a name="line-470"></a><font color=Blue>--           ( do cs &lt;- many ( do tok TokPipe</font>
+<a name="line-471"></a><font color=Blue>--                                n &lt;- name</font>
+<a name="line-472"></a><font color=Blue>--                                return n)</font>
+<a name="line-473"></a><font color=Blue>--                tok TokBraClose</font>
+<a name="line-474"></a><font color=Blue>--                tok TokStar</font>
+<a name="line-475"></a><font color=Blue>--                return (PCDATAplus cs))</font>
+<a name="line-476"></a><font color=Blue>--</font>
+<a name="line-477"></a><font color=Blue>--attlistdecl :: HParser AttListDecl</font>
+<a name="line-478"></a><font color=Blue>--attlistdecl = do</font>
+<a name="line-479"></a><font color=Blue>--    tok TokSpecialOpen</font>
+<a name="line-480"></a><font color=Blue>--    tok (TokSpecial ATTLISTx)</font>
+<a name="line-481"></a><font color=Blue>--    n &lt;- name `onFail` failP "missing identifier in ATTLIST"</font>
+<a name="line-482"></a><font color=Blue>--    ds &lt;- many attdef</font>
+<a name="line-483"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "missing &gt; terminating ATTLIST"</font>
+<a name="line-484"></a><font color=Blue>--    return (AttListDecl n ds)</font>
+<a name="line-485"></a><font color=Blue>--</font>
+<a name="line-486"></a><font color=Blue>--attdef :: HParser AttDef</font>
+<a name="line-487"></a><font color=Blue>--attdef = do</font>
+<a name="line-488"></a><font color=Blue>--    n &lt;- name</font>
+<a name="line-489"></a><font color=Blue>--    t &lt;- atttype `onFail` failP "missing attribute type in attlist defn"</font>
+<a name="line-490"></a><font color=Blue>--    d &lt;- defaultdecl</font>
+<a name="line-491"></a><font color=Blue>--    return (AttDef n t d)</font>
+<a name="line-492"></a><font color=Blue>--</font>
+<a name="line-493"></a><font color=Blue>--atttype :: HParser AttType</font>
+<a name="line-494"></a><font color=Blue>--atttype =</font>
+<a name="line-495"></a><font color=Blue>--    ( word "CDATA" &gt;&gt; return StringType) `onFail`</font>
+<a name="line-496"></a><font color=Blue>--    ( tokenizedtype &gt;&gt;= return . TokenizedType) `onFail`</font>
+<a name="line-497"></a><font color=Blue>--    ( enumeratedtype &gt;&gt;= return . EnumeratedType)</font>
+<a name="line-498"></a><font color=Blue>--</font>
+<a name="line-499"></a><font color=Blue>--tokenizedtype :: HParser TokenizedType</font>
+<a name="line-500"></a><font color=Blue>--tokenizedtype =</font>
+<a name="line-501"></a><font color=Blue>--    ( word "ID" &gt;&gt; return ID) `onFail`</font>
+<a name="line-502"></a><font color=Blue>--    ( word "IDREF" &gt;&gt; return IDREF) `onFail`</font>
+<a name="line-503"></a><font color=Blue>--    ( word "IDREFS" &gt;&gt; return IDREFS) `onFail`</font>
+<a name="line-504"></a><font color=Blue>--    ( word "ENTITY" &gt;&gt; return ENTITY) `onFail`</font>
+<a name="line-505"></a><font color=Blue>--    ( word "ENTITIES" &gt;&gt; return ENTITIES) `onFail`</font>
+<a name="line-506"></a><font color=Blue>--    ( word "NMTOKEN" &gt;&gt; return NMTOKEN) `onFail`</font>
+<a name="line-507"></a><font color=Blue>--    ( word "NMTOKENS" &gt;&gt; return NMTOKENS)</font>
+<a name="line-508"></a><font color=Blue>--</font>
+<a name="line-509"></a><font color=Blue>--enumeratedtype :: HParser EnumeratedType</font>
+<a name="line-510"></a><font color=Blue>--enumeratedtype =</font>
+<a name="line-511"></a><font color=Blue>--    ( notationtype &gt;&gt;= return . NotationType) `onFail`</font>
+<a name="line-512"></a><font color=Blue>--    ( enumeration &gt;&gt;= return . Enumeration)</font>
+<a name="line-513"></a><font color=Blue>--</font>
+<a name="line-514"></a><font color=Blue>--notationtype :: HParser NotationType</font>
+<a name="line-515"></a><font color=Blue>--notationtype = do</font>
+<a name="line-516"></a><font color=Blue>--    word "NOTATION"</font>
+<a name="line-517"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
+<a name="line-518"></a><font color=Blue>--            (name `sepby1` (tok TokPipe))</font>
+<a name="line-519"></a><font color=Blue>--</font>
+<a name="line-520"></a><font color=Blue>--enumeration :: HParser Enumeration</font>
+<a name="line-521"></a><font color=Blue>--enumeration =</font>
+<a name="line-522"></a><font color=Blue>--    bracket (tok TokBraOpen) (tok TokBraClose)</font>
+<a name="line-523"></a><font color=Blue>--            (nmtoken `sepby1` (tok TokPipe))</font>
+<a name="line-524"></a><font color=Blue>--</font>
+<a name="line-525"></a><font color=Blue>--defaultdecl :: HParser DefaultDecl</font>
+<a name="line-526"></a><font color=Blue>--defaultdecl =</font>
+<a name="line-527"></a><font color=Blue>--    ( tok TokHash &gt;&gt; word "REQUIRED" &gt;&gt; return REQUIRED) `onFail`</font>
+<a name="line-528"></a><font color=Blue>--    ( tok TokHash &gt;&gt; word "IMPLIED" &gt;&gt; return IMPLIED) `onFail`</font>
+<a name="line-529"></a><font color=Blue>--    ( do f &lt;- maybe (tok TokHash &gt;&gt; word "FIXED" &gt;&gt; return FIXED)</font>
+<a name="line-530"></a><font color=Blue>--         a &lt;- attvalue</font>
+<a name="line-531"></a><font color=Blue>--         return (DefaultTo a f))</font>
+<a name="line-532"></a><font color=Blue>--</font>
+<a name="line-533"></a><font color=Blue>--conditionalsect :: HParser ConditionalSect</font>
+<a name="line-534"></a><font color=Blue>--conditionalsect =</font>
+<a name="line-535"></a><font color=Blue>--    ( do tok TokSectionOpen</font>
+<a name="line-536"></a><font color=Blue>--         tok (TokSection INCLUDEx)</font>
+<a name="line-537"></a><font color=Blue>--         tok TokSqOpen `onFail` failP "missing [ after INCLUDE"</font>
+<a name="line-538"></a><font color=Blue>--         i &lt;- extsubsetdecl `onFail` failP "missing ExtSubsetDecl in INCLUDE"</font>
+<a name="line-539"></a><font color=Blue>--         tok TokSectionClose `onFail` failP "missing ] after INCLUDE"</font>
+<a name="line-540"></a><font color=Blue>--         return (IncludeSect i)) `onFail`</font>
+<a name="line-541"></a><font color=Blue>--    ( do tok TokSectionOpen</font>
+<a name="line-542"></a><font color=Blue>--         tok (TokSection IGNOREx)</font>
+<a name="line-543"></a><font color=Blue>--         tok TokSqOpen `onFail` failP "missing [ after IGNORE"</font>
+<a name="line-544"></a><font color=Blue>--         i &lt;- many ignoresectcontents</font>
+<a name="line-545"></a><font color=Blue>--         tok TokSectionClose `onFail` failP "missing ] after IGNORE"</font>
+<a name="line-546"></a><font color=Blue>--         return (IgnoreSect i))</font>
+<a name="line-547"></a><font color=Blue>--</font>
+<a name="line-548"></a><font color=Blue>--ignoresectcontents :: HParser IgnoreSectContents</font>
+<a name="line-549"></a><font color=Blue>--ignoresectcontents = do</font>
+<a name="line-550"></a><font color=Blue>--    i &lt;- ignore</font>
+<a name="line-551"></a><font color=Blue>--    is &lt;- many (do tok TokSectionOpen</font>
+<a name="line-552"></a><font color=Blue>--                   ic &lt;- ignoresectcontents</font>
+<a name="line-553"></a><font color=Blue>--                   tok TokSectionClose</font>
+<a name="line-554"></a><font color=Blue>--                   ig &lt;- ignore</font>
+<a name="line-555"></a><font color=Blue>--                   return (ic,ig))</font>
+<a name="line-556"></a><font color=Blue>--    return (IgnoreSectContents i is)</font>
+<a name="line-557"></a><font color=Blue>--</font>
+<a name="line-558"></a><font color=Blue>--ignore :: HParser Ignore</font>
+<a name="line-559"></a><font color=Blue>--ignore = freetext &gt;&gt;= return . Ignore</font>
+<a name="line-560"></a>
+<a name="line-561"></a><a name="reference"></a><font color=Blue>reference</font> <font color=Red>::</font> HParser Reference
+<a name="line-562"></a><font color=Blue>reference</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-563"></a>    bracket <font color=Cyan>(</font>tok TokAmp<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSemi<font color=Cyan>)</font> <font color=Cyan>(</font>freetext <font color=Cyan>&gt;&gt;=</font> val<font color=Cyan>)</font>
+<a name="line-564"></a>  <font color=Green><u>where</u></font>
+<a name="line-565"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font><font color=Magenta>'x'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font> <font color=Red>|</font> all isHexDigit i
+<a name="line-566"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readHex <font color=Cyan>$</font> i
+<a name="line-567"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font>     <font color=Red>|</font> all isDigit i
+<a name="line-568"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readDec <font color=Cyan>$</font> i
+<a name="line-569"></a>    val name        <font color=Red>=</font> return <font color=Cyan>.</font> RefEntity <font color=Cyan>$</font> name
+<a name="line-570"></a>
+<a name="line-571"></a><font color=Blue>{-
+<a name="line-572"></a>reference :: HParser Reference
+<a name="line-573"></a>reference =
+<a name="line-574"></a>    ( charref &gt;&gt;= return . RefChar) `onFail`
+<a name="line-575"></a>    ( entityref &gt;&gt;= return . RefEntity)
+<a name="line-576"></a>
+<a name="line-577"></a>entityref :: HParser EntityRef
+<a name="line-578"></a>entityref = do
+<a name="line-579"></a>    n &lt;- bracket (tok TokAmp) (tok TokSemi) name
+<a name="line-580"></a>    return n
+<a name="line-581"></a>
+<a name="line-582"></a>charref :: HParser CharRef
+<a name="line-583"></a>charref = do
+<a name="line-584"></a>    bracket (tok TokAmp) (tok TokSemi) (freetext &gt;&gt;= readCharVal)
+<a name="line-585"></a>  where
+<a name="line-586"></a>    readCharVal ('#':'x':i) = return . fst . head . readHex $ i
+<a name="line-587"></a>    readCharVal ('#':i)     = return . fst . head . readDec $ i
+<a name="line-588"></a>    readCharVal _           = mzero
+<a name="line-589"></a>-}</font>
+<a name="line-590"></a>
+<a name="line-591"></a><font color=Blue>--pereference :: HParser PEReference</font>
+<a name="line-592"></a><font color=Blue>--pereference = do</font>
+<a name="line-593"></a><font color=Blue>--    bracket (tok TokPercent) (tok TokSemi) nmtoken</font>
+<a name="line-594"></a><font color=Blue>--</font>
+<a name="line-595"></a><font color=Blue>--entitydecl :: HParser EntityDecl</font>
+<a name="line-596"></a><font color=Blue>--entitydecl =</font>
+<a name="line-597"></a><font color=Blue>--    ( gedecl &gt;&gt;= return . EntityGEDecl) `onFail`</font>
+<a name="line-598"></a><font color=Blue>--    ( pedecl &gt;&gt;= return . EntityPEDecl)</font>
+<a name="line-599"></a><font color=Blue>--</font>
+<a name="line-600"></a><font color=Blue>--gedecl :: HParser GEDecl</font>
+<a name="line-601"></a><font color=Blue>--gedecl = do</font>
+<a name="line-602"></a><font color=Blue>--    tok TokSpecialOpen</font>
+<a name="line-603"></a><font color=Blue>--    tok (TokSpecial ENTITYx)</font>
+<a name="line-604"></a><font color=Blue>--    n &lt;- name</font>
+<a name="line-605"></a><font color=Blue>--    e &lt;- entitydef `onFail` failP "missing entity defn in G ENTITY decl"</font>
+<a name="line-606"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating G ENTITY decl"</font>
+<a name="line-607"></a><font color=Blue>--    return (GEDecl n e)</font>
+<a name="line-608"></a><font color=Blue>--</font>
+<a name="line-609"></a><font color=Blue>--pedecl :: HParser PEDecl</font>
+<a name="line-610"></a><font color=Blue>--pedecl = do</font>
+<a name="line-611"></a><font color=Blue>--    tok TokSpecialOpen</font>
+<a name="line-612"></a><font color=Blue>--    tok (TokSpecial ENTITYx)</font>
+<a name="line-613"></a><font color=Blue>--    tok TokPercent</font>
+<a name="line-614"></a><font color=Blue>--    n &lt;- name</font>
+<a name="line-615"></a><font color=Blue>--    e &lt;- pedef `onFail` failP "missing entity defn in P ENTITY decl"</font>
+<a name="line-616"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating P ENTITY decl"</font>
+<a name="line-617"></a><font color=Blue>--    return (PEDecl n e)</font>
+<a name="line-618"></a><font color=Blue>--</font>
+<a name="line-619"></a><font color=Blue>--entitydef :: HParser EntityDef</font>
+<a name="line-620"></a><font color=Blue>--entitydef =</font>
+<a name="line-621"></a><font color=Blue>--    ( entityvalue &gt;&gt;= return . DefEntityValue) `onFail`</font>
+<a name="line-622"></a><font color=Blue>--    ( do eid &lt;- externalid</font>
+<a name="line-623"></a><font color=Blue>--         ndd &lt;- maybe ndatadecl</font>
+<a name="line-624"></a><font color=Blue>--         return (DefExternalID eid ndd))</font>
+<a name="line-625"></a><font color=Blue>--</font>
+<a name="line-626"></a><font color=Blue>--pedef :: HParser PEDef</font>
+<a name="line-627"></a><font color=Blue>--pedef =</font>
+<a name="line-628"></a><font color=Blue>--    ( entityvalue &gt;&gt;= return . PEDefEntityValue) `onFail`</font>
+<a name="line-629"></a><font color=Blue>--    ( externalid &gt;&gt;= return . PEDefExternalID)</font>
+<a name="line-630"></a>
+<a name="line-631"></a><a name="externalid"></a><font color=Blue>externalid</font> <font color=Red>::</font> HParser ExternalID
+<a name="line-632"></a><font color=Blue>externalid</font> <font color=Red>=</font>
+<a name="line-633"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> word <font color=Magenta>"SYSTEM"</font>
+<a name="line-634"></a>         s <font color=Red>&lt;-</font> systemliteral
+<a name="line-635"></a>         return <font color=Cyan>(</font>SYSTEM s<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-636"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> word <font color=Magenta>"PUBLIC"</font>
+<a name="line-637"></a>         p <font color=Red>&lt;-</font> pubidliteral
+<a name="line-638"></a>         s <font color=Red>&lt;-</font> <font color=Cyan>(</font>systemliteral <font color=Cyan>`onFail`</font> return <font color=Cyan>(</font>SystemLiteral <font color=Magenta>""</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-639"></a>         return <font color=Cyan>(</font>PUBLIC p s<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-640"></a>
+<a name="line-641"></a><font color=Blue>--ndatadecl :: HParser NDataDecl</font>
+<a name="line-642"></a><font color=Blue>--ndatadecl = do</font>
+<a name="line-643"></a><font color=Blue>--    word "NDATA"</font>
+<a name="line-644"></a><font color=Blue>--    n &lt;- name</font>
+<a name="line-645"></a><font color=Blue>--    return (NDATA n)</font>
+<a name="line-646"></a>
+<a name="line-647"></a><a name="textdecl"></a><font color=Blue>textdecl</font> <font color=Red>::</font> HParser TextDecl
+<a name="line-648"></a><font color=Blue>textdecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-649"></a>    tok TokPIOpen
+<a name="line-650"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
+<a name="line-651"></a>    v <font color=Red>&lt;-</font> maybe versioninfo
+<a name="line-652"></a>    e <font color=Red>&lt;-</font> encodingdecl
+<a name="line-653"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failP <font color=Magenta>"expected ?&gt; terminating text decl"</font>
+<a name="line-654"></a>    return <font color=Cyan>(</font>TextDecl v e<font color=Cyan>)</font>
+<a name="line-655"></a>
+<a name="line-656"></a><font color=Blue>--extparsedent :: HParser ExtParsedEnt</font>
+<a name="line-657"></a><font color=Blue>--extparsedent = do</font>
+<a name="line-658"></a><font color=Blue>--    t &lt;- maybe textdecl</font>
+<a name="line-659"></a><font color=Blue>--    (_,c) &lt;- (content "")</font>
+<a name="line-660"></a><font color=Blue>--    return (ExtParsedEnt t c)</font>
+<a name="line-661"></a><font color=Blue>--</font>
+<a name="line-662"></a><font color=Blue>--extpe :: HParser ExtPE</font>
+<a name="line-663"></a><font color=Blue>--extpe = do</font>
+<a name="line-664"></a><font color=Blue>--    t &lt;- maybe textdecl</font>
+<a name="line-665"></a><font color=Blue>--    e &lt;- extsubsetdecl</font>
+<a name="line-666"></a><font color=Blue>--    return (ExtPE t e)</font>
+<a name="line-667"></a>
+<a name="line-668"></a><a name="encodingdecl"></a><font color=Blue>encodingdecl</font> <font color=Red>::</font> HParser EncodingDecl
+<a name="line-669"></a><font color=Blue>encodingdecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-670"></a>    <font color=Cyan>(</font>word <font color=Magenta>"encoding"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"ENCODING"</font><font color=Cyan>)</font>
+<a name="line-671"></a>    tok TokEqual <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"expected = in 'encoding' decl"</font>
+<a name="line-672"></a>    f <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-673"></a>    return <font color=Cyan>(</font>EncodingDecl f<font color=Cyan>)</font>
+<a name="line-674"></a>
+<a name="line-675"></a><font color=Blue>--notationdecl :: HParser NotationDecl</font>
+<a name="line-676"></a><font color=Blue>--notationdecl = do</font>
+<a name="line-677"></a><font color=Blue>--    tok TokSpecialOpen</font>
+<a name="line-678"></a><font color=Blue>--    word "NOTATION"</font>
+<a name="line-679"></a><font color=Blue>--    n &lt;- name</font>
+<a name="line-680"></a><font color=Blue>--    e &lt;- either externalid publicid</font>
+<a name="line-681"></a><font color=Blue>--    tok TokAnyClose `onFail` failP "expected &gt; terminating NOTATION decl"</font>
+<a name="line-682"></a><font color=Blue>--    return (NOTATION n e)</font>
+<a name="line-683"></a>
+<a name="line-684"></a><a name="publicid"></a><font color=Blue>publicid</font> <font color=Red>::</font> HParser PublicID
+<a name="line-685"></a><font color=Blue>publicid</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-686"></a>    word <font color=Magenta>"PUBLICID"</font>
+<a name="line-687"></a>    p <font color=Red>&lt;-</font> pubidliteral
+<a name="line-688"></a>    return <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>
+<a name="line-689"></a>
+<a name="line-690"></a><a name="entityvalue"></a><font color=Blue>entityvalue</font> <font color=Red>::</font> HParser EntityValue
+<a name="line-691"></a><font color=Blue>entityvalue</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-692"></a>    evs <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>many ev<font color=Cyan>)</font>
+<a name="line-693"></a>    return <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>
+<a name="line-694"></a>
+<a name="line-695"></a><a name="ev"></a><font color=Blue>ev</font> <font color=Red>::</font> HParser EV
+<a name="line-696"></a><font color=Blue>ev</font> <font color=Red>=</font>
+<a name="line-697"></a>    <font color=Cyan>(</font> freetext <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVString<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-698"></a><font color=Blue>--  PEREF(EVPERef,ev) `onFail`</font>
+<a name="line-699"></a>    <font color=Cyan>(</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVRef<font color=Cyan>)</font>
+<a name="line-700"></a>
+<a name="line-701"></a><a name="attvalue"></a><font color=Blue>attvalue</font> <font color=Red>::</font> HParser AttValue
+<a name="line-702"></a><font color=Blue>attvalue</font> <font color=Red>=</font>
+<a name="line-703"></a>  <font color=Cyan>(</font> <font color=Green><u>do</u></font> avs <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
+<a name="line-704"></a>                      <font color=Cyan>(</font>many <font color=Cyan>(</font>either freetext reference<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-705"></a>       return <font color=Cyan>(</font>AttValue avs<font color=Cyan>)</font> <font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-706"></a>  <font color=Cyan>(</font> <font color=Green><u>do</u></font> v <font color=Red>&lt;-</font> nmtoken
+<a name="line-707"></a>       s <font color=Red>&lt;-</font> <font color=Cyan>(</font>tok TokPercent <font color=Cyan>&gt;&gt;</font> return <font color=Magenta>"%"</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font> return <font color=Magenta>""</font>
+<a name="line-708"></a>       return <font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Cyan>(</font>v<font color=Cyan>++</font>s<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-709"></a>  <font color=Cyan>(</font> <font color=Green><u>do</u></font> s <font color=Red>&lt;-</font> oneOf <font color=Red>[</font> tok TokPlus <font color=Cyan>&gt;&gt;</font> return <font color=Magenta>"+"</font>
+<a name="line-710"></a>                  <font color=Cyan>,</font> tok TokHash <font color=Cyan>&gt;&gt;</font> return <font color=Magenta>"#"</font>
+<a name="line-711"></a>                  <font color=Red>]</font>
+<a name="line-712"></a>       v <font color=Red>&lt;-</font> nmtoken
+<a name="line-713"></a>       return <font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Cyan>(</font>s<font color=Cyan>++</font>v<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-714"></a>  failP <font color=Magenta>"Badly formatted attribute value"</font>
+<a name="line-715"></a>
+<a name="line-716"></a><a name="systemliteral"></a><font color=Blue>systemliteral</font> <font color=Red>::</font> HParser SystemLiteral
+<a name="line-717"></a><font color=Blue>systemliteral</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-718"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-719"></a>    return <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>		<font color=Blue>-- note: need to fold &amp;...; escapes</font>
+<a name="line-720"></a>
+<a name="line-721"></a><a name="pubidliteral"></a><font color=Blue>pubidliteral</font> <font color=Red>::</font> HParser PubidLiteral
+<a name="line-722"></a><font color=Blue>pubidliteral</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-723"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-724"></a>    return <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>		<font color=Blue>-- note: need to fold &amp;...; escapes</font>
+<a name="line-725"></a>
+<a name="line-726"></a><a name="chardata"></a><font color=Blue>chardata</font> <font color=Red>::</font> HParser CharData
+<a name="line-727"></a><font color=Blue>chardata</font> <font color=Red>=</font> freetext <font color=Blue>-- &gt;&gt;= return . CharData</font>
+<a name="line-728"></a>
+</pre>
+</body>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Html/Pretty.html b/docs/HaXml/src/Text/XML/HaXml/Html/Pretty.html
--- a/docs/HaXml/src/Text/XML/HaXml/Html/Pretty.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Html/Pretty.html
@@ -1,238 +1,244 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | This is a separate pretty-printer for HTML documents, recognising</font>
-<a name="(line2)"></a><font color=Blue>--   some of the differences between HTML and true XML.</font>
-<a name="(line3)"></a>
-<a name="(line4)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Pretty
-<a name="(line5)"></a>  <font color=Cyan>(</font> document
-<a name="(line6)"></a>  <font color=Cyan>,</font> element
-<a name="(line7)"></a>  <font color=Cyan>,</font> attribute
-<a name="(line8)"></a>  <font color=Cyan>,</font> content
-<a name="(line9)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line10)"></a>
-<a name="(line11)"></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="(line12)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
-<a name="(line13)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font>
-<a name="(line14)"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>isSpace<font color=Cyan>)</font>
-<a name="(line15)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ
-<a name="(line16)"></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="(line17)"></a>
-<a name="(line18)"></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="(line19)"></a>either f g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x
-<a name="(line20)"></a>
-<a name="(line21)"></a><a name="maybe"></a>maybe f Nothing  <font color=Red>=</font> empty
-<a name="(line22)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x
-<a name="(line23)"></a>
-<a name="(line24)"></a><font color=Blue>--peref p   = text "%" &lt;&gt; text p &lt;&gt; text ";"</font>
-<a name="(line25)"></a>
-<a name="(line26)"></a><font color=Blue>----</font>
-<a name="(line27)"></a>
-<a name="(line28)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Doc
-<a name="(line29)"></a><a name="prolog"></a>prolog   <font color=Red>::</font> Prolog <font color=Red>-&gt;</font> Doc
-<a name="(line30)"></a><a name="xmldecl"></a>xmldecl  <font color=Red>::</font> XMLDecl <font color=Red>-&gt;</font> Doc
-<a name="(line31)"></a><a name="misc"></a>misc     <font color=Red>::</font> Misc <font color=Red>-&gt;</font> Doc
-<a name="(line32)"></a><a name="sddecl"></a>sddecl   <font color=Red>::</font> Bool <font color=Red>-&gt;</font> Doc
-<a name="(line33)"></a>
-<a name="(line34)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Doc
-<a name="(line35)"></a><a name="markupdecl"></a>markupdecl  <font color=Red>::</font> MarkupDecl <font color=Red>-&gt;</font> Doc
-<a name="(line36)"></a><a name="extsubset"></a>extsubset   <font color=Red>::</font> ExtSubset <font color=Red>-&gt;</font> Doc
-<a name="(line37)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> ExtSubsetDecl <font color=Red>-&gt;</font> Doc
-<a name="(line38)"></a>
-<a name="(line39)"></a><a name="element"></a>element   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> Doc
-<a name="(line40)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> Doc                     <font color=Cyan>--etc</font>
-<a name="(line41)"></a><a name="content"></a>content   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> Doc
-<a name="(line42)"></a>
-<a name="(line43)"></a><font color=Blue>----</font>
-<a name="(line44)"></a>
-<a name="(line45)"></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="(line46)"></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="(line47)"></a>                             vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>
-<a name="(line48)"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>
-<a name="(line49)"></a>                             vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>
-<a name="(line50)"></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="(line51)"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>
-<a name="(line52)"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>
-<a name="(line53)"></a>                             text <font color=Magenta>"?&gt;"</font>
-<a name="(line54)"></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="(line55)"></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="(line56)"></a>sddecl sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>
-<a name="(line57)"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>
-<a name="(line58)"></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="(line59)"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
-<a name="(line60)"></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="(line61)"></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="(line62)"></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="(line63)"></a>                                      maybe externalid eid
-<a name="(line64)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e
-<a name="(line65)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a
-<a name="(line66)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e
-<a name="(line67)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n
-<a name="(line68)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m
-<a name="(line69)"></a><font color=Blue>--markupdecl (MarkupPE p m)  = peref p</font>
-<a name="(line70)"></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="(line71)"></a>                             vcat <font color=Cyan>(</font>map extsubsetdecl ds<font color=Cyan>)</font>
-<a name="(line72)"></a>extsubsetdecl <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font>      <font color=Red>=</font> markupdecl m
-<a name="(line73)"></a>extsubsetdecl <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c
-<a name="(line74)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e)   = peref p</font>
-<a name="(line75)"></a>
-<a name="(line76)"></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="(line77)"></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="(line78)"></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="(line79)"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>
-<a name="(line80)"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>
-<a name="(line81)"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>
-<a name="(line82)"></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="(line83)"></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="(line84)"></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="(line85)"></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="(line86)"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c
-<a name="(line87)"></a>
-<a name="(line88)"></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="(line89)"></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="(line90)"></a>isText <font color=Green><u>_</u></font>               <font color=Red>=</font> False
-<a name="(line91)"></a>
-<a name="(line92)"></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="(line93)"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
-<a name="(line94)"></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="(line95)"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>
-<a name="(line96)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>
-<a name="(line97)"></a><font color=Blue>----  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>
-<a name="(line98)"></a><font color=Blue>--    | otherwise        =  let (cs',d') = carryscan carrycontent cs (text "&gt;")</font>
-<a name="(line99)"></a><font color=Blue>--                          in</font>
-<a name="(line100)"></a><font color=Blue>--                          ( c &lt;&gt;</font>
-<a name="(line101)"></a><font color=Blue>--                            text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) $$</font>
-<a name="(line102)"></a><font color=Blue>--                            nest 2 (vcat cs') &lt;&gt; -- $$</font>
-<a name="(line103)"></a><font color=Blue>--                            c' &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
-<a name="(line104)"></a><font color=Blue>--                          , text "&gt;")</font>
-<a name="(line105)"></a><font color=Blue>--carrycontent (CElem e) c   = carryelem e c</font>
-<a name="(line106)"></a><font color=Blue>--carrycontent (CString _ s) c = (c &lt;&gt; chardata s, empty)</font>
-<a name="(line107)"></a><font color=Blue>--carrycontent (CRef r) c    = (c &lt;&gt; reference r, empty)</font>
-<a name="(line108)"></a><font color=Blue>--carrycontent (CMisc m) c   = (c &lt;&gt; misc m, empty)</font>
-<a name="(line109)"></a><font color=Blue>--</font>
-<a name="(line110)"></a><font color=Blue>--carryscan :: (a-&gt;c-&gt;(b,c)) -&gt; [a] -&gt; c -&gt; ([b],c)</font>
-<a name="(line111)"></a><font color=Blue>--carryscan f []     c = ([],c)</font>
-<a name="(line112)"></a><font color=Blue>--carryscan f (a:as) c = let (b, c')   = f a c</font>
-<a name="(line113)"></a><font color=Blue>--                           (bs,c'') = carryscan f as c'</font>
-<a name="(line114)"></a><font color=Blue>--                       in (b:bs, c'')</font>
-<a name="(line115)"></a>
-<a name="(line116)"></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="(line117)"></a>  <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line118)"></a>        <font color=Cyan>(</font> start <font color=Cyan>&lt;&gt;</font>
-<a name="(line119)"></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> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n
-<a name="(line120)"></a>        <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
-<a name="(line121)"></a>  <font color=Red>|</font> otherwise <font color=Red>=</font>
-<a name="(line122)"></a>        <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> foldl carrycontent <font color=Cyan>(</font>start<font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font> cs <font color=Green><u>in</u></font>
-<a name="(line123)"></a>        <font color=Cyan>(</font> d <font color=Cyan>&lt;&gt;</font> c' <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n
-<a name="(line124)"></a>        <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
-<a name="(line125)"></a>  <font color=Green><u>where</u></font> start <font color=Red>=</font> c <font color=Cyan>&lt;&gt;</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>
-<a name="(line126)"></a>
-<a name="(line127)"></a><a name="carrycontent"></a>carrycontent <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>     <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 c <font color=Green><u>in</u></font>
-<a name="(line128)"></a>                                     <font color=Cyan>(</font>d <font color=Cyan>$$</font> nest <font color=Magenta>2</font> d'<font color=Cyan>,</font>       c'<font color=Cyan>)</font>
-<a name="(line129)"></a>carrycontent <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</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>=</font> <font color=Cyan>(</font>d <font color=Cyan>&lt;&gt;</font> c <font color=Cyan>&lt;&gt;</font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>
-<a name="(line130)"></a>carrycontent <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> <font color=Cyan>(</font>d <font color=Cyan>&lt;&gt;</font> c <font color=Cyan>&lt;&gt;</font> reference r<font color=Cyan>,</font>empty<font color=Cyan>)</font>
-<a name="(line131)"></a>carrycontent <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>     <font color=Red>=</font> <font color=Cyan>(</font>d <font color=Cyan>$$</font> c <font color=Cyan>&lt;&gt;</font> misc m<font color=Cyan>,</font>     empty<font color=Cyan>)</font>
-<a name="(line132)"></a>
-<a name="(line133)"></a>
-<a name="(line134)"></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="(line135)"></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="(line136)"></a>content <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>=</font> chardata s
-<a name="(line137)"></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="(line138)"></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="(line139)"></a>
-<a name="(line140)"></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="(line141)"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
-<a name="(line142)"></a><a name="contentspec"></a>contentspec EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>
-<a name="(line143)"></a>contentspec ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>
-<a name="(line144)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m
-<a name="(line145)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c
-<a name="(line146)"></a><a name="cp"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>
-<a name="(line147)"></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="(line148)"></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="(line149)"></a>                           modifier m
-<a name="(line150)"></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="(line151)"></a>                           modifier m
-<a name="(line152)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>
-<a name="(line153)"></a>modifier None          <font color=Red>=</font> empty
-<a name="(line154)"></a>modifier Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>
-<a name="(line155)"></a>modifier Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>
-<a name="(line156)"></a>modifier Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>
-<a name="(line157)"></a><a name="mixed"></a>mixed  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>
-<a name="(line158)"></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="(line159)"></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="(line160)"></a>                         text <font color=Magenta>")*"</font>
-<a name="(line161)"></a>
-<a name="(line162)"></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="(line163)"></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="(line164)"></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="(line165)"></a><a name="atttype"></a>atttype  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>
-<a name="(line166)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t
-<a name="(line167)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t
-<a name="(line168)"></a><a name="tokenizedtype"></a>tokenizedtype ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>
-<a name="(line169)"></a>tokenizedtype IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>
-<a name="(line170)"></a>tokenizedtype IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>
-<a name="(line171)"></a>tokenizedtype ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>
-<a name="(line172)"></a>tokenizedtype ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>
-<a name="(line173)"></a>tokenizedtype NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>
-<a name="(line174)"></a>tokenizedtype NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>
-<a name="(line175)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n
-<a name="(line176)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e
-<a name="(line177)"></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="(line178)"></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="(line179)"></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="(line180)"></a><a name="defaultdecl"></a>defaultdecl  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>
-<a name="(line181)"></a>defaultdecl  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>
-<a name="(line182)"></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="(line183)"></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="(line184)"></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="(line185)"></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="(line186)"></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="(line187)"></a><a name="ignore"></a>ignore <font color=Cyan>(</font>Ignore<font color=Cyan>)</font>                <font color=Red>=</font> empty
-<a name="(line188)"></a><a name="ignoresectcontents"></a>ignoresectcontents <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>
-<a name="(line189)"></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="(line190)"></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="(line191)"></a>                                                   ignoresectcontents ics <font color=Cyan>&lt;+&gt;</font>
-<a name="(line192)"></a>                                                   text <font color=Magenta>"]]&gt;"</font> <font color=Cyan>&lt;+&gt;</font> ignore i
-<a name="(line193)"></a><a name="reference"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er
-<a name="(line194)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr
-<a name="(line195)"></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="(line196)"></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="(line197)"></a><a name="entitydecl"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d
-<a name="(line198)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d
-<a name="(line199)"></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="(line200)"></a>                                 text <font color=Magenta>"&gt;"</font>
-<a name="(line201)"></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="(line202)"></a>                                 text <font color=Magenta>"&gt;"</font>
-<a name="(line203)"></a><a name="entitydef"></a>entitydef <font color=Cyan>(</font>DefEntityValue ev<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ev
-<a name="(line204)"></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="(line205)"></a><a name="pedef"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ev
-<a name="(line206)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid
-<a name="(line207)"></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="(line208)"></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="(line209)"></a>                                 systemliteral sl
-<a name="(line210)"></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="(line211)"></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="(line212)"></a>                                 encodingdecl ed <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"?&gt;"</font>
-<a name="(line213)"></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="(line214)"></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="(line215)"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl esd<font color=Cyan>)</font>
-<a name="(line216)"></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="(line217)"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>
-<a name="(line218)"></a>                                 text <font color=Magenta>"&gt;"</font>
-<a name="(line219)"></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="(line220)"></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="(line221)"></a><a name="nmtoken"></a>nmtoken s                      <font color=Red>=</font> text s
-<a name="(line222)"></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="(line223)"></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="(line224)"></a>                                 text <font color=Magenta>"\""</font>
-<a name="(line225)"></a><a name="entityvalue"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>  <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="(line226)"></a><a name="ev"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s
-<a name="(line227)"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>
-<a name="(line228)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r
-<a name="(line229)"></a><a name="pubidliteral"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral 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="(line230)"></a><a name="systemliteral"></a>systemliteral <font color=Cyan>(</font>SystemLiteral 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="(line231)"></a><a name="chardata"></a>chardata s                     <font color=Red>=</font> <font color=Green><u>if</u></font> all isSpace s <font color=Green><u>then</u></font> empty <font color=Green><u>else</u></font> text s
-<a name="(line232)"></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="(line233)"></a>
-<a name="(line234)"></a><font color=Blue>----</font>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Html/Pretty.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | This is a separate pretty-printer for HTML documents, recognising</font>
+<a name="line-2"></a><font color=Blue>--   some of the differences between HTML and true XML.</font>
+<a name="line-3"></a>
+<a name="line-4"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Pretty
+<a name="line-5"></a>  <font color=Cyan>(</font> document
+<a name="line-6"></a>  <font color=Cyan>,</font> element
+<a name="line-7"></a>  <font color=Cyan>,</font> attribute
+<a name="line-8"></a>  <font color=Cyan>,</font> content
+<a name="line-9"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-10"></a>
+<a name="line-11"></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="line-12"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
+<a name="line-13"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font>
+<a name="line-14"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>isSpace<font color=Cyan>)</font>
+<a name="line-15"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ
+<a name="line-16"></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="line-17"></a>
+<a name="line-18"></a><a name="either"></a><font color=Blue>either</font> f g <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> f x
+<a name="line-19"></a><font color=Blue>either</font> f g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x
+<a name="line-20"></a>
+<a name="line-21"></a><a name="maybe"></a><font color=Blue>maybe</font> f Nothing  <font color=Red>=</font> empty
+<a name="line-22"></a><font color=Blue>maybe</font> f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x
+<a name="line-23"></a>
+<a name="line-24"></a><font color=Blue>--peref p   = text "%" &lt;&gt; text p &lt;&gt; text ";"</font>
+<a name="line-25"></a>
+<a name="line-26"></a><font color=Blue>----</font>
+<a name="line-27"></a>
+<a name="line-28"></a><a name="document"></a><font color=Blue>document</font> <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Doc
+<a name="line-29"></a><a name="prolog"></a><font color=Blue>prolog</font>   <font color=Red>::</font> Prolog <font color=Red>-&gt;</font> Doc
+<a name="line-30"></a><a name="xmldecl"></a><font color=Blue>xmldecl</font>  <font color=Red>::</font> XMLDecl <font color=Red>-&gt;</font> Doc
+<a name="line-31"></a><a name="misc"></a><font color=Blue>misc</font>     <font color=Red>::</font> Misc <font color=Red>-&gt;</font> Doc
+<a name="line-32"></a><a name="sddecl"></a><font color=Blue>sddecl</font>   <font color=Red>::</font> Bool <font color=Red>-&gt;</font> Doc
+<a name="line-33"></a>
+<a name="line-34"></a><a name="doctypedecl"></a><font color=Blue>doctypedecl</font> <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Doc
+<a name="line-35"></a><a name="markupdecl"></a><font color=Blue>markupdecl</font>  <font color=Red>::</font> MarkupDecl <font color=Red>-&gt;</font> Doc
+<a name="line-36"></a><a name="extsubset"></a><font color=Blue>extsubset</font>   <font color=Red>::</font> ExtSubset <font color=Red>-&gt;</font> Doc
+<a name="line-37"></a><a name="extsubsetdecl"></a><font color=Blue>extsubsetdecl</font> <font color=Red>::</font> ExtSubsetDecl <font color=Red>-&gt;</font> Doc
+<a name="line-38"></a>
+<a name="line-39"></a><a name="element"></a><font color=Blue>element</font>   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> Doc
+<a name="line-40"></a><a name="attribute"></a><font color=Blue>attribute</font> <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> Doc                     <font color=Cyan>--etc</font>
+<a name="line-41"></a><a name="content"></a><font color=Blue>content</font>   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> Doc
+<a name="line-42"></a>
+<a name="line-43"></a><font color=Blue>----</font>
+<a name="line-44"></a>
+<a name="line-45"></a><font color=Blue>document</font> <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="line-46"></a><font color=Blue>prolog</font> <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="line-47"></a>                             vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="line-48"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>
+<a name="line-49"></a>                             vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>
+<a name="line-50"></a><font color=Blue>xmldecl</font> <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="line-51"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>
+<a name="line-52"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>
+<a name="line-53"></a>                             text <font color=Magenta>"?&gt;"</font>
+<a name="line-54"></a><font color=Blue>misc</font> <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="line-55"></a><font color=Blue>misc</font> <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="line-56"></a><font color=Blue>sddecl</font> sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>
+<a name="line-57"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>
+<a name="line-58"></a><font color=Blue>doctypedecl</font> <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="line-59"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="line-60"></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="line-61"></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="line-62"></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="line-63"></a>                                      maybe externalid eid
+<a name="line-64"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e
+<a name="line-65"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a
+<a name="line-66"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e
+<a name="line-67"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n
+<a name="line-68"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m
+<a name="line-69"></a><font color=Blue>--markupdecl (MarkupPE p m)  = peref p</font>
+<a name="line-70"></a><font color=Blue>extsubset</font> <font color=Cyan>(</font>ExtSubset t ds<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan>$$</font>
+<a name="line-71"></a>                             vcat <font color=Cyan>(</font>map extsubsetdecl ds<font color=Cyan>)</font>
+<a name="line-72"></a><font color=Blue>extsubsetdecl</font> <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font>      <font color=Red>=</font> markupdecl m
+<a name="line-73"></a><font color=Blue>extsubsetdecl</font> <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c
+<a name="line-74"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e)   = peref p</font>
+<a name="line-75"></a>
+<a name="line-76"></a><font color=Blue>element</font> <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="line-77"></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="line-78"></a><font color=Blue>element</font> 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="line-79"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>
+<a name="line-80"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>
+<a name="line-81"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>
+<a name="line-82"></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="line-83"></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="line-84"></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="line-85"></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="line-86"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c
+<a name="line-87"></a>
+<a name="line-88"></a><a name="isText"></a><font color=Blue>isText</font> <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="line-89"></a><font color=Blue>isText</font> <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="line-90"></a><font color=Blue>isText</font> <font color=Green><u>_</u></font>               <font color=Red>=</font> False
+<a name="line-91"></a>
+<a name="line-92"></a><a name="carryelem"></a><font color=Blue>carryelem</font> <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c
+<a name="line-93"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
+<a name="line-94"></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="line-95"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>
+<a name="line-96"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>
+<a name="line-97"></a><font color=Blue>----  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>
+<a name="line-98"></a><font color=Blue>--    | otherwise        =  let (cs',d') = carryscan carrycontent cs (text "&gt;")</font>
+<a name="line-99"></a><font color=Blue>--                          in</font>
+<a name="line-100"></a><font color=Blue>--                          ( c &lt;&gt;</font>
+<a name="line-101"></a><font color=Blue>--                            text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) $$</font>
+<a name="line-102"></a><font color=Blue>--                            nest 2 (vcat cs') &lt;&gt; -- $$</font>
+<a name="line-103"></a><font color=Blue>--                            c' &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
+<a name="line-104"></a><font color=Blue>--                          , text "&gt;")</font>
+<a name="line-105"></a><font color=Blue>--carrycontent (CElem e) c   = carryelem e c</font>
+<a name="line-106"></a><font color=Blue>--carrycontent (CString _ s) c = (c &lt;&gt; chardata s, empty)</font>
+<a name="line-107"></a><font color=Blue>--carrycontent (CRef r) c    = (c &lt;&gt; reference r, empty)</font>
+<a name="line-108"></a><font color=Blue>--carrycontent (CMisc m) c   = (c &lt;&gt; misc m, empty)</font>
+<a name="line-109"></a><font color=Blue>--</font>
+<a name="line-110"></a><font color=Blue>--carryscan :: (a-&gt;c-&gt;(b,c)) -&gt; [a] -&gt; c -&gt; ([b],c)</font>
+<a name="line-111"></a><font color=Blue>--carryscan f []     c = ([],c)</font>
+<a name="line-112"></a><font color=Blue>--carryscan f (a:as) c = let (b, c')   = f a c</font>
+<a name="line-113"></a><font color=Blue>--                           (bs,c'') = carryscan f as c'</font>
+<a name="line-114"></a><font color=Blue>--                       in (b:bs, c'')</font>
+<a name="line-115"></a>
+<a name="line-116"></a><font color=Blue>carryelem</font> 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="line-117"></a>  <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-118"></a>        <font color=Cyan>(</font> start <font color=Cyan>&lt;&gt;</font>
+<a name="line-119"></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> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n
+<a name="line-120"></a>        <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="line-121"></a>  <font color=Red>|</font> otherwise <font color=Red>=</font>
+<a name="line-122"></a>        <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> foldl carrycontent <font color=Cyan>(</font>start<font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font> cs <font color=Green><u>in</u></font>
+<a name="line-123"></a>        <font color=Cyan>(</font> d <font color=Cyan>&lt;&gt;</font> c' <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n
+<a name="line-124"></a>        <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="line-125"></a>  <font color=Green><u>where</u></font> start <font color=Red>=</font> c <font color=Cyan>&lt;&gt;</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>
+<a name="line-126"></a>
+<a name="line-127"></a><a name="carrycontent"></a><font color=Blue>carrycontent</font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>     <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 c <font color=Green><u>in</u></font>
+<a name="line-128"></a>                                     <font color=Cyan>(</font>d <font color=Cyan>$$</font> nest <font color=Magenta>2</font> d'<font color=Cyan>,</font>       c'<font color=Cyan>)</font>
+<a name="line-129"></a><font color=Blue>carrycontent</font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</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>=</font> <font color=Cyan>(</font>d <font color=Cyan>&lt;&gt;</font> c <font color=Cyan>&lt;&gt;</font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>
+<a name="line-130"></a><font color=Blue>carrycontent</font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> <font color=Cyan>(</font>d <font color=Cyan>&lt;&gt;</font> c <font color=Cyan>&lt;&gt;</font> reference r<font color=Cyan>,</font>empty<font color=Cyan>)</font>
+<a name="line-131"></a><font color=Blue>carrycontent</font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>     <font color=Red>=</font> <font color=Cyan>(</font>d <font color=Cyan>$$</font> c <font color=Cyan>&lt;&gt;</font> misc m<font color=Cyan>,</font>     empty<font color=Cyan>)</font>
+<a name="line-132"></a>
+<a name="line-133"></a>
+<a name="line-134"></a><font color=Blue>attribute</font> <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="line-135"></a><font color=Blue>content</font> <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> element e
+<a name="line-136"></a><font color=Blue>content</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>=</font> chardata s
+<a name="line-137"></a><font color=Blue>content</font> <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>       <font color=Red>=</font> reference r
+<a name="line-138"></a><font color=Blue>content</font> <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> misc m
+<a name="line-139"></a>
+<a name="line-140"></a><a name="elementdecl"></a><font color=Blue>elementdecl</font> <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="line-141"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="line-142"></a><a name="contentspec"></a><font color=Blue>contentspec</font> EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>
+<a name="line-143"></a><font color=Blue>contentspec</font> ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>
+<a name="line-144"></a><font color=Blue>contentspec</font> <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m
+<a name="line-145"></a><font color=Blue>contentspec</font> <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c
+<a name="line-146"></a><a name="cp"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>
+<a name="line-147"></a><font color=Blue>cp</font> <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="line-148"></a><font color=Blue>cp</font> <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="line-149"></a>                           modifier m
+<a name="line-150"></a><font color=Blue>cp</font> <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="line-151"></a>                           modifier m
+<a name="line-152"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>
+<a name="line-153"></a><font color=Blue>modifier</font> None          <font color=Red>=</font> empty
+<a name="line-154"></a><font color=Blue>modifier</font> Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>
+<a name="line-155"></a><font color=Blue>modifier</font> Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>
+<a name="line-156"></a><font color=Blue>modifier</font> Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>
+<a name="line-157"></a><a name="mixed"></a><font color=Blue>mixed</font>  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>
+<a name="line-158"></a><font color=Blue>mixed</font> <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="line-159"></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="line-160"></a>                         text <font color=Magenta>")*"</font>
+<a name="line-161"></a>
+<a name="line-162"></a><a name="attlistdecl"></a><font color=Blue>attlistdecl</font> <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="line-163"></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="line-164"></a><a name="attdef"></a><font color=Blue>attdef</font> <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="line-165"></a><a name="atttype"></a><font color=Blue>atttype</font>  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>
+<a name="line-166"></a><font color=Blue>atttype</font> <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t
+<a name="line-167"></a><font color=Blue>atttype</font> <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t
+<a name="line-168"></a><a name="tokenizedtype"></a><font color=Blue>tokenizedtype</font> ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>
+<a name="line-169"></a><font color=Blue>tokenizedtype</font> IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>
+<a name="line-170"></a><font color=Blue>tokenizedtype</font> IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>
+<a name="line-171"></a><font color=Blue>tokenizedtype</font> ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>
+<a name="line-172"></a><font color=Blue>tokenizedtype</font> ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>
+<a name="line-173"></a><font color=Blue>tokenizedtype</font> NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>
+<a name="line-174"></a><font color=Blue>tokenizedtype</font> NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>
+<a name="line-175"></a><a name="enumeratedtype"></a><font color=Blue>enumeratedtype</font> <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n
+<a name="line-176"></a><font color=Blue>enumeratedtype</font> <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e
+<a name="line-177"></a><a name="notationtype"></a><font color=Blue>notationtype</font> ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="line-178"></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="line-179"></a><a name="enumeration"></a><font color=Blue>enumeration</font> 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="line-180"></a><a name="defaultdecl"></a><font color=Blue>defaultdecl</font>  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>
+<a name="line-181"></a><font color=Blue>defaultdecl</font>  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>
+<a name="line-182"></a><font color=Blue>defaultdecl</font> <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="line-183"></a><a name="conditionalsect"></a><font color=Blue>conditionalsect</font> <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="line-184"></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="line-185"></a><font color=Blue>conditionalsect</font> <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="line-186"></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="line-187"></a><a name="ignore"></a><font color=Blue>ignore</font> <font color=Cyan>(</font>Ignore<font color=Cyan>)</font>                <font color=Red>=</font> empty
+<a name="line-188"></a><a name="ignoresectcontents"></a><font color=Blue>ignoresectcontents</font> <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>
+<a name="line-189"></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="line-190"></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="line-191"></a>                                                   ignoresectcontents ics <font color=Cyan>&lt;+&gt;</font>
+<a name="line-192"></a>                                                   text <font color=Magenta>"]]&gt;"</font> <font color=Cyan>&lt;+&gt;</font> ignore i
+<a name="line-193"></a><a name="reference"></a><font color=Blue>reference</font> <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er
+<a name="line-194"></a><font color=Blue>reference</font> <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr
+<a name="line-195"></a><a name="entityref"></a><font color=Blue>entityref</font> 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="line-196"></a><a name="charref"></a><font color=Blue>charref</font> 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="line-197"></a><a name="entitydecl"></a><font color=Blue>entitydecl</font> <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d
+<a name="line-198"></a><font color=Blue>entitydecl</font> <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d
+<a name="line-199"></a><a name="gedecl"></a><font color=Blue>gedecl</font> <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="line-200"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="line-201"></a><a name="pedecl"></a><font color=Blue>pedecl</font> <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="line-202"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="line-203"></a><a name="entitydef"></a><font color=Blue>entitydef</font> <font color=Cyan>(</font>DefEntityValue ev<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ev
+<a name="line-204"></a><font color=Blue>entitydef</font> <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="line-205"></a><a name="pedef"></a><font color=Blue>pedef</font> <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ev
+<a name="line-206"></a><font color=Blue>pedef</font> <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid
+<a name="line-207"></a><a name="externalid"></a><font color=Blue>externalid</font> <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="line-208"></a><font color=Blue>externalid</font> <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="line-209"></a>                                 systemliteral sl
+<a name="line-210"></a><a name="ndatadecl"></a><font color=Blue>ndatadecl</font> <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="line-211"></a><a name="textdecl"></a><font color=Blue>textdecl</font> <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="line-212"></a>                                 encodingdecl ed <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"?&gt;"</font>
+<a name="line-213"></a><a name="extparsedent"></a><font color=Blue>extparsedent</font> <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="line-214"></a><a name="extpe"></a><font color=Blue>extpe</font> <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="line-215"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl esd<font color=Cyan>)</font>
+<a name="line-216"></a><a name="notationdecl"></a><font color=Blue>notationdecl</font> <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="line-217"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>
+<a name="line-218"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="line-219"></a><a name="publicid"></a><font color=Blue>publicid</font> <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="line-220"></a><a name="encodingdecl"></a><font color=Blue>encodingdecl</font> <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="line-221"></a><a name="nmtoken"></a><font color=Blue>nmtoken</font> s                      <font color=Red>=</font> text s
+<a name="line-222"></a><a name="attvalue"></a><font color=Blue>attvalue</font> <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="line-223"></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="line-224"></a>                                 text <font color=Magenta>"\""</font>
+<a name="line-225"></a><a name="entityvalue"></a><font color=Blue>entityvalue</font> <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>  <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="line-226"></a><a name="ev"></a><font color=Blue>ev</font> <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s
+<a name="line-227"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>
+<a name="line-228"></a><font color=Blue>ev</font> <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r
+<a name="line-229"></a><a name="pubidliteral"></a><font color=Blue>pubidliteral</font> <font color=Cyan>(</font>PubidLiteral 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="line-230"></a><a name="systemliteral"></a><font color=Blue>systemliteral</font> <font color=Cyan>(</font>SystemLiteral 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="line-231"></a><a name="chardata"></a><font color=Blue>chardata</font> s                     <font color=Red>=</font> <font color=Green><u>if</u></font> all isSpace s <font color=Green><u>then</u></font> empty <font color=Green><u>else</u></font> text s
+<a name="line-232"></a><a name="cdsect"></a><font color=Blue>cdsect</font> 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="line-233"></a>
+<a name="line-234"></a><font color=Blue>----</font>
 </pre>
+</body>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Lex.html b/docs/HaXml/src/Text/XML/HaXml/Lex.html
--- a/docs/HaXml/src/Text/XML/HaXml/Lex.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Lex.html
@@ -1,337 +1,343 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | You don't normally need to use this Lex module directly - it is</font>
-<a name="(line2)"></a><font color=Blue>--   called automatically by the parser.  (This interface is only exposed</font>
-<a name="(line3)"></a><font color=Blue>--   for debugging purposes.)</font>
-<a name="(line4)"></a><font color=Blue>--</font>
-<a name="(line5)"></a><font color=Blue>-- This is a hand-written lexer for tokenising the text of an XML</font>
-<a name="(line6)"></a><font color=Blue>-- document so that it is ready for parsing.  It attaches position</font>
-<a name="(line7)"></a><font color=Blue>-- information in (line,column) format to every token.  The main</font>
-<a name="(line8)"></a><font color=Blue>-- entry point is 'xmlLex'.  A secondary entry point, 'xmlReLex', is</font>
-<a name="(line9)"></a><font color=Blue>-- provided for when the parser needs to stuff a string back onto</font>
-<a name="(line10)"></a><font color=Blue>-- the front of the text and re-tokenise it (typically when expanding</font>
-<a name="(line11)"></a><font color=Blue>-- macros).</font>
-<a name="(line12)"></a><font color=Blue>--</font>
-<a name="(line13)"></a><font color=Blue>-- As one would expect, the lexer is essentially a small finite</font>
-<a name="(line14)"></a><font color=Blue>-- state machine.</font>
-<a name="(line15)"></a>
-<a name="(line16)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Lex
-<a name="(line17)"></a>  <font color=Cyan>(</font>
-<a name="(line18)"></a>  <font color=Blue>-- * Entry points to the lexer</font>
-<a name="(line19)"></a>    xmlLex         <font color=Blue>-- :: String -&gt; String -&gt; [Token]</font>
-<a name="(line20)"></a>  <font color=Cyan>,</font> xmlReLex       <font color=Blue>-- :: Posn   -&gt; String -&gt; [Token]</font>
-<a name="(line21)"></a>  <font color=Cyan>,</font> reLexEntityValue <font color=Blue>-- :: (String-&gt;Maybe String) -&gt; Posn -&gt; String -&gt; [Token]</font>
-<a name="(line22)"></a>  <font color=Blue>-- * Token types</font>
-<a name="(line23)"></a>  <font color=Cyan>,</font> Token
-<a name="(line24)"></a>  <font color=Cyan>,</font> TokenT<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line25)"></a>  <font color=Cyan>,</font> Special<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line26)"></a>  <font color=Cyan>,</font> Section<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line27)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line28)"></a>
-<a name="(line29)"></a><font color=Green><u>import</u></font> Char
-<a name="(line30)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn
-<a name="(line31)"></a>
-<a name="(line32)"></a><a name="Where"></a><font color=Green><u>data</u></font> Where <font color=Red>=</font> InTag String <font color=Red>|</font> NotInTag
-<a name="(line33)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>)</font>
-<a name="(line34)"></a>
-<a name="(line35)"></a><a name="Token"></a><font color=Blue>-- | All tokens are paired up with a source position.</font>
-<a name="(line36)"></a><a name="Token"></a><font color=Blue>--   Lexical errors are passed back as a special @TokenT@ value.</font>
-<a name="(line37)"></a><a name="Token"></a><font color=Green><u>type</u></font> Token <font color=Red>=</font> <font color=Cyan>(</font>Posn<font color=Cyan>,</font> TokenT<font color=Cyan>)</font>
-<a name="(line38)"></a>
-<a name="(line39)"></a><a name="TokenT"></a><font color=Blue>-- | The basic token type.</font>
-<a name="(line40)"></a><a name="TokenT"></a><font color=Green><u>data</u></font> TokenT <font color=Red>=</font>
-<a name="(line41)"></a>      TokCommentOpen		<font color=Blue>-- ^   \&lt;!--</font>
-<a name="(line42)"></a>    <font color=Red>|</font> TokCommentClose		<font color=Blue>-- ^   --&gt;</font>
-<a name="(line43)"></a>    <font color=Red>|</font> TokPIOpen			<font color=Blue>-- ^   \&lt;?</font>
-<a name="(line44)"></a>    <font color=Red>|</font> TokPIClose		<font color=Blue>-- ^   ?&gt;</font>
-<a name="(line45)"></a>    <font color=Red>|</font> TokSectionOpen		<font color=Blue>-- ^   \&lt;![</font>
-<a name="(line46)"></a>    <font color=Red>|</font> TokSectionClose		<font color=Blue>-- ^   ]]&gt;</font>
-<a name="(line47)"></a>    <font color=Red>|</font> TokSection Section	<font color=Blue>-- ^   CDATA INCLUDE IGNORE etc</font>
-<a name="(line48)"></a>    <font color=Red>|</font> TokSpecialOpen		<font color=Blue>-- ^   \&lt;!</font>
-<a name="(line49)"></a>    <font color=Red>|</font> TokSpecial Special	<font color=Blue>-- ^   DOCTYPE ELEMENT ATTLIST etc</font>
-<a name="(line50)"></a>    <font color=Red>|</font> TokEndOpen		<font color=Blue>-- ^   \&lt;\/</font>
-<a name="(line51)"></a>    <font color=Red>|</font> TokEndClose		<font color=Blue>-- ^   \/&gt;</font>
-<a name="(line52)"></a>    <font color=Red>|</font> TokAnyOpen		<font color=Blue>-- ^   \&lt;</font>
-<a name="(line53)"></a>    <font color=Red>|</font> TokAnyClose		<font color=Blue>-- ^   &gt;</font>
-<a name="(line54)"></a>    <font color=Red>|</font> TokSqOpen			<font color=Blue>-- ^   \[</font>
-<a name="(line55)"></a>    <font color=Red>|</font> TokSqClose		<font color=Blue>-- ^   \]</font>
-<a name="(line56)"></a>    <font color=Red>|</font> TokEqual			<font color=Blue>-- ^   =</font>
-<a name="(line57)"></a>    <font color=Red>|</font> TokQuery			<font color=Blue>-- ^   ?</font>
-<a name="(line58)"></a>    <font color=Red>|</font> TokStar			<font color=Blue>-- ^   \*</font>
-<a name="(line59)"></a>    <font color=Red>|</font> TokPlus			<font color=Blue>-- ^   +</font>
-<a name="(line60)"></a>    <font color=Red>|</font> TokAmp			<font color=Blue>-- ^   &amp;</font>
-<a name="(line61)"></a>    <font color=Red>|</font> TokSemi			<font color=Blue>-- ^   ;</font>
-<a name="(line62)"></a>    <font color=Red>|</font> TokHash			<font color=Blue>-- ^   #</font>
-<a name="(line63)"></a>    <font color=Red>|</font> TokBraOpen		<font color=Blue>-- ^   (</font>
-<a name="(line64)"></a>    <font color=Red>|</font> TokBraClose		<font color=Blue>-- ^   )</font>
-<a name="(line65)"></a>    <font color=Red>|</font> TokPipe			<font color=Blue>-- ^   |</font>
-<a name="(line66)"></a>    <font color=Red>|</font> TokPercent		<font color=Blue>-- ^   %</font>
-<a name="(line67)"></a>    <font color=Red>|</font> TokComma			<font color=Blue>-- ^   ,</font>
-<a name="(line68)"></a>    <font color=Red>|</font> TokQuote			<font color=Blue>-- ^   \'\' or \"\"</font>
-<a name="(line69)"></a>    <font color=Red>|</font> TokName      String	<font color=Blue>-- ^   begins with letter, no spaces</font>
-<a name="(line70)"></a>    <font color=Red>|</font> TokFreeText  String	<font color=Blue>-- ^   any character data</font>
-<a name="(line71)"></a>    <font color=Red>|</font> TokNull			<font color=Blue>-- ^   fake token</font>
-<a name="(line72)"></a>    <font color=Red>|</font> TokError     String	<font color=Blue>-- ^   lexical error</font>
-<a name="(line73)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>)</font>
-<a name="(line74)"></a>
-<a name="(line75)"></a><a name="Special"></a><font color=Green><u>data</u></font> Special <font color=Red>=</font>
-<a name="(line76)"></a>      DOCTYPEx
-<a name="(line77)"></a>    <font color=Red>|</font> ELEMENTx
-<a name="(line78)"></a>    <font color=Red>|</font> ATTLISTx
-<a name="(line79)"></a>    <font color=Red>|</font> ENTITYx
-<a name="(line80)"></a>    <font color=Red>|</font> NOTATIONx
-<a name="(line81)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line82)"></a><a name="Section"></a><font color=Green><u>data</u></font> Section <font color=Red>=</font>
-<a name="(line83)"></a>      CDATAx
-<a name="(line84)"></a>    <font color=Red>|</font> INCLUDEx
-<a name="(line85)"></a>    <font color=Red>|</font> IGNOREx
-<a name="(line86)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line87)"></a>
-<a name="(line88)"></a><font color=Green><u>instance</u></font> Show TokenT <font color=Green><u>where</u></font>
-<a name="(line89)"></a>  showsPrec p  TokCommentOpen		<font color=Red>=</font> showString     <font color=Magenta>"&lt;!--"</font>
-<a name="(line90)"></a>  showsPrec p  TokCommentClose		<font color=Red>=</font> showString     <font color=Magenta>"--&gt;"</font>
-<a name="(line91)"></a>  showsPrec p  TokPIOpen		<font color=Red>=</font> showString     <font color=Magenta>"&lt;?"</font>
-<a name="(line92)"></a>  showsPrec p  TokPIClose		<font color=Red>=</font> showString     <font color=Magenta>"?&gt;"</font>
-<a name="(line93)"></a>  showsPrec p  TokSectionOpen		<font color=Red>=</font> showString     <font color=Magenta>"&lt;!["</font>
-<a name="(line94)"></a>  showsPrec p  TokSectionClose		<font color=Red>=</font> showString     <font color=Magenta>"]]&gt;"</font>
-<a name="(line95)"></a>  showsPrec p  <font color=Cyan>(</font>TokSection s<font color=Cyan>)</font>		<font color=Red>=</font> showsPrec p s
-<a name="(line96)"></a>  showsPrec p  TokSpecialOpen		<font color=Red>=</font> showString     <font color=Magenta>"&lt;!"</font>
-<a name="(line97)"></a>  showsPrec p  <font color=Cyan>(</font>TokSpecial s<font color=Cyan>)</font>		<font color=Red>=</font> showsPrec p s
-<a name="(line98)"></a>  showsPrec p  TokEndOpen		<font color=Red>=</font> showString     <font color=Magenta>"&lt;/"</font>
-<a name="(line99)"></a>  showsPrec p  TokEndClose		<font color=Red>=</font> showString     <font color=Magenta>"/&gt;"</font>
-<a name="(line100)"></a>  showsPrec p  TokAnyOpen		<font color=Red>=</font> showString     <font color=Magenta>"&lt;"</font>
-<a name="(line101)"></a>  showsPrec p  TokAnyClose		<font color=Red>=</font> showString     <font color=Magenta>"&gt;"</font>
-<a name="(line102)"></a>  showsPrec p  TokSqOpen		<font color=Red>=</font> showString     <font color=Magenta>"["</font>
-<a name="(line103)"></a>  showsPrec p  TokSqClose		<font color=Red>=</font> showString     <font color=Magenta>"]"</font>
-<a name="(line104)"></a>  showsPrec p  TokEqual			<font color=Red>=</font> showString     <font color=Magenta>"="</font>
-<a name="(line105)"></a>  showsPrec p  TokQuery			<font color=Red>=</font> showString     <font color=Magenta>"?"</font>
-<a name="(line106)"></a>  showsPrec p  TokStar			<font color=Red>=</font> showString     <font color=Magenta>"*"</font>
-<a name="(line107)"></a>  showsPrec p  TokPlus			<font color=Red>=</font> showString     <font color=Magenta>"+"</font>
-<a name="(line108)"></a>  showsPrec p  TokAmp			<font color=Red>=</font> showString     <font color=Magenta>"&amp;"</font>
-<a name="(line109)"></a>  showsPrec p  TokSemi			<font color=Red>=</font> showString     <font color=Magenta>";"</font>
-<a name="(line110)"></a>  showsPrec p  TokHash			<font color=Red>=</font> showString     <font color=Magenta>"#"</font>
-<a name="(line111)"></a>  showsPrec p  TokBraOpen		<font color=Red>=</font> showString     <font color=Magenta>"("</font>
-<a name="(line112)"></a>  showsPrec p  TokBraClose		<font color=Red>=</font> showString     <font color=Magenta>")"</font>
-<a name="(line113)"></a>  showsPrec p  TokPipe			<font color=Red>=</font> showString     <font color=Magenta>"|"</font>
-<a name="(line114)"></a>  showsPrec p  TokPercent		<font color=Red>=</font> showString     <font color=Magenta>"%"</font>
-<a name="(line115)"></a>  showsPrec p  TokComma			<font color=Red>=</font> showString     <font color=Magenta>","</font>
-<a name="(line116)"></a>  showsPrec p  TokQuote			<font color=Red>=</font> showString     <font color=Magenta>"' or \""</font>
-<a name="(line117)"></a>  showsPrec p  <font color=Cyan>(</font>TokName      s<font color=Cyan>)</font>		<font color=Red>=</font> showString     s
-<a name="(line118)"></a>  showsPrec p  <font color=Cyan>(</font>TokFreeText  s<font color=Cyan>)</font>		<font color=Red>=</font> showString     s
-<a name="(line119)"></a>  showsPrec p  TokNull			<font color=Red>=</font> showString     <font color=Magenta>"(null)"</font>
-<a name="(line120)"></a>  showsPrec p  <font color=Cyan>(</font>TokError     s<font color=Cyan>)</font>		<font color=Red>=</font> showString     s
-<a name="(line121)"></a>
-<a name="(line122)"></a><font color=Blue>--trim, revtrim :: String -&gt; String</font>
-<a name="(line123)"></a><font color=Blue>--trim    = f . f         where f = reverse . dropWhile isSpace</font>
-<a name="(line124)"></a><font color=Blue>--revtrim = f.reverse.f   where f = dropWhile isSpace</font>
-<a name="(line125)"></a><font color=Blue>--revtrim = reverse . dropWhile (=='\n')  -- most recently used defn.</font>
-<a name="(line126)"></a>
-<a name="(line127)"></a><a name="emit"></a>emit <font color=Red>::</font> TokenT <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> Token
-<a name="(line128)"></a>emit tok p <font color=Red>=</font> forcep p <font color=Cyan>`seq`</font> <font color=Cyan>(</font>p<font color=Cyan>,</font>tok<font color=Cyan>)</font>
-<a name="(line129)"></a>
-<a name="(line130)"></a><a name="lexerror"></a>lexerror <font color=Red>::</font> String <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
-<a name="(line131)"></a>lexerror s p <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>p<font color=Cyan>,</font> TokError <font color=Cyan>(</font><font color=Magenta>"Lexical error:\n  "</font><font color=Cyan>++</font>s<font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line132)"></a>
-<a name="(line133)"></a><a name="skip"></a>skip <font color=Red>::</font> Int <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Cyan>(</font>Posn<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font><font color=Red>[</font>Token<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
-<a name="(line134)"></a>skip n p s k <font color=Red>=</font> k <font color=Cyan>(</font>addcol n p<font color=Cyan>)</font> <font color=Cyan>(</font>drop n s<font color=Cyan>)</font>
-<a name="(line135)"></a>
-<a name="(line136)"></a><a name="blank"></a>blank <font color=Red>::</font> <font color=Cyan>(</font><font color=Red>[</font>Where<font color=Red>]</font><font color=Red>-&gt;</font>Posn<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font><font color=Red>[</font>Token<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Where<font color=Red>]</font><font color=Red>-&gt;</font> Posn<font color=Red>-&gt;</font> String<font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
-<a name="(line137)"></a>blank k  <font color=Cyan>(</font>InTag t<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> p [] <font color=Red>=</font> lexerror <font color=Cyan>(</font><font color=Magenta>"unexpected EOF within "</font><font color=Cyan>++</font>t<font color=Cyan>)</font> p
-<a name="(line138)"></a>blank k          <font color=Green><u>_</u></font>   p [] <font color=Red>=</font> []
-<a name="(line139)"></a>blank k      w p <font color=Cyan>(</font><font color=Magenta>' '</font><font color=Red><b>:</b></font> s<font color=Cyan>)</font> <font color=Red>=</font> blank k w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> s
-<a name="(line140)"></a>blank k      w p <font color=Cyan>(</font><font color=Magenta>'\t'</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font> <font color=Red>=</font> blank k w <font color=Cyan>(</font>tab p<font color=Cyan>)</font> s
-<a name="(line141)"></a>blank k      w p <font color=Cyan>(</font><font color=Magenta>'\n'</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font> <font color=Red>=</font> blank k w <font color=Cyan>(</font>newline p<font color=Cyan>)</font> s
-<a name="(line142)"></a>blank k      w p <font color=Cyan>(</font><font color=Magenta>'\r'</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font> <font color=Red>=</font> blank k w  p s
-<a name="(line143)"></a>blank k   w p <font color=Cyan>(</font><font color=Magenta>'\xa0'</font><font color=Red><b>:</b></font> s<font color=Cyan>)</font> <font color=Red>=</font> blank k w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> s
-<a name="(line144)"></a>blank k      w p    s     <font color=Red>=</font> k w p s
-<a name="(line145)"></a>
-<a name="(line146)"></a><a name="prefixes"></a>prefixes <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Bool
-<a name="(line147)"></a>[]     <font color=Cyan>`prefixes`</font>   ys   <font color=Red>=</font> True
-<a name="(line148)"></a><a name="prefixes"></a><font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Cyan>`prefixes`</font> <font color=Cyan>(</font>y<font color=Red><b>:</b></font>ys<font color=Cyan>)</font> <font color=Red>=</font> x<font color=Cyan>==</font>y <font color=Cyan>&amp;&amp;</font> xs <font color=Cyan>`prefixes`</font> ys
-<a name="(line149)"></a><a name="prefixes"></a><font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Cyan>`prefixes`</font>   []   <font color=Red>=</font> False <font color=Blue>--error "unexpected EOF in prefix"</font>
-<a name="(line150)"></a>
-<a name="(line151)"></a><a name="textUntil"></a>textUntil close tok acc pos p [] k <font color=Red>=</font>
-<a name="(line152)"></a>    lexerror <font color=Cyan>(</font><font color=Magenta>"unexpected EOF while looking for closing token "</font><font color=Cyan>++</font>close
-<a name="(line153)"></a>              <font color=Cyan>++</font><font color=Magenta>"\n  to match the opening token in "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font> p
-<a name="(line154)"></a>textUntil close tok acc pos p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font> k
-<a name="(line155)"></a>    <font color=Red>|</font> close <font color=Cyan>`prefixes`</font> <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>  <font color=Red>=</font> emit <font color=Cyan>(</font>TokFreeText <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font>
-<a name="(line156)"></a>                                 emit tok p<font color=Red><b>:</b></font>
-<a name="(line157)"></a>                                 skip <font color=Cyan>(</font>length close<font color=Blue>-</font><font color=Magenta>1</font><font color=Cyan>)</font> <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
-<a name="(line158)"></a>    <font color=Red>|</font> isSpace s  <font color=Red>=</font> textUntil close tok <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>white s p<font color=Cyan>)</font> ss k
-<a name="(line159)"></a>    <font color=Red>|</font> otherwise  <font color=Red>=</font> textUntil close tok <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
-<a name="(line160)"></a>
-<a name="(line161)"></a><a name="textOrRefUntil"></a>textOrRefUntil close tok acc pos p [] k <font color=Red>=</font>
-<a name="(line162)"></a>    lexerror <font color=Cyan>(</font><font color=Magenta>"unexpected EOF while looking for closing token "</font><font color=Cyan>++</font>close
-<a name="(line163)"></a>              <font color=Cyan>++</font><font color=Magenta>"\n  to match the opening token in "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font> p
-<a name="(line164)"></a>textOrRefUntil close tok acc pos p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font> k
-<a name="(line165)"></a>    <font color=Red>|</font> close <font color=Cyan>`prefixes`</font> <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>  <font color=Red>=</font> emit <font color=Cyan>(</font>TokFreeText <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font>
-<a name="(line166)"></a>                                 emit tok p<font color=Red><b>:</b></font>
-<a name="(line167)"></a>                                 skip <font color=Cyan>(</font>length close<font color=Blue>-</font><font color=Magenta>1</font><font color=Cyan>)</font> <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
-<a name="(line168)"></a>    <font color=Red>|</font> s<font color=Cyan>==</font><font color=Magenta>'&amp;'</font>     <font color=Red>=</font> <font color=Cyan>(</font><font color=Green><u>if</u></font> not <font color=Cyan>(</font>null acc<font color=Cyan>)</font>
-<a name="(line169)"></a>                       <font color=Green><u>then</u></font> <font color=Cyan>(</font>emit <font color=Cyan>(</font>TokFreeText <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font><font color=Cyan>)</font>
-<a name="(line170)"></a>                       <font color=Green><u>else</u></font> id<font color=Cyan>)</font>
-<a name="(line171)"></a>                   <font color=Cyan>(</font>emit TokAmp p<font color=Red><b>:</b></font>
-<a name="(line172)"></a>                    textUntil <font color=Magenta>";"</font> TokSemi <font color=Magenta>""</font> p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line173)"></a>                        <font color=Cyan>(</font><font color=Red>\</font>p' i<font color=Red>-&gt;</font> textOrRefUntil close tok <font color=Magenta>""</font> p p' i k<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line174)"></a>    <font color=Red>|</font> isSpace s  <font color=Red>=</font> textOrRefUntil close tok <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>white s p<font color=Cyan>)</font> ss k
-<a name="(line175)"></a>    <font color=Red>|</font> otherwise  <font color=Red>=</font> textOrRefUntil close tok <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
-<a name="(line176)"></a>
-<a name="(line177)"></a><font color=Blue>----</font>
-<a name="(line178)"></a>
-<a name="(line179)"></a><a name="xmlLex"></a><font color=Blue>-- | The first argument to 'xmlLex' is the filename (used for source positions,</font>
-<a name="(line180)"></a><font color=Blue>--   especially in error messages), and the second is the string content of</font>
-<a name="(line181)"></a><font color=Blue>--   the XML file.</font>
-<a name="(line182)"></a>xmlLex <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
-<a name="(line183)"></a>xmlLex filename <font color=Red>=</font> xmlAny [] <font color=Cyan>(</font>posInNewCxt <font color=Cyan>(</font><font color=Magenta>"file "</font><font color=Cyan>++</font>filename<font color=Cyan>)</font> Nothing<font color=Cyan>)</font>
-<a name="(line184)"></a>
-<a name="(line185)"></a><a name="xmlReLex"></a><font color=Blue>-- | 'xmlReLex' is used when the parser expands a macro (PE reference).</font>
-<a name="(line186)"></a><font color=Blue>--    The expansion of the macro must be re-lexed as if for the first time.</font>
-<a name="(line187)"></a>xmlReLex <font color=Red>::</font> Posn <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
-<a name="(line188)"></a>xmlReLex p s
-<a name="(line189)"></a>      <font color=Red>|</font> <font color=Magenta>"INCLUDE"</font>  <font color=Cyan>`prefixes`</font> s  <font color=Red>=</font> emit <font color=Cyan>(</font>TokSection INCLUDEx<font color=Cyan>)</font> p<font color=Red><b>:</b></font> k <font color=Magenta>7</font>
-<a name="(line190)"></a>      <font color=Red>|</font> <font color=Magenta>"IGNORE"</font>   <font color=Cyan>`prefixes`</font> s  <font color=Red>=</font> emit <font color=Cyan>(</font>TokSection IGNOREx<font color=Cyan>)</font> p<font color=Red><b>:</b></font>  k <font color=Magenta>6</font>
-<a name="(line191)"></a>      <font color=Red>|</font> otherwise <font color=Red>=</font> blank xmlAny [] p s
-<a name="(line192)"></a>  <font color=Green><u>where</u></font>
-<a name="(line193)"></a>    k n <font color=Red>=</font> skip n p s <font color=Cyan>(</font>blank xmlAny []<font color=Cyan>)</font>
-<a name="(line194)"></a>
-<a name="(line195)"></a><a name="reLexEntityValue"></a><font color=Blue>-- | 'reLexEntityValue' is used solely within parsing an entityvalue.</font>
-<a name="(line196)"></a><font color=Blue>--   Normally, a PERef is logically separated from its surroundings by</font>
-<a name="(line197)"></a><font color=Blue>--   whitespace.  But in an entityvalue, a PERef can be juxtaposed to</font>
-<a name="(line198)"></a><font color=Blue>--   an identifier, so the expansion forms a new identifier.</font>
-<a name="(line199)"></a><font color=Blue>--   Thus the need to rescan the whole text for possible PERefs.</font>
-<a name="(line200)"></a>reLexEntityValue <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Maybe String<font color=Cyan>)</font> <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
-<a name="(line201)"></a>reLexEntityValue lookup p s <font color=Red>=</font>
-<a name="(line202)"></a>    textOrRefUntil <font color=Magenta>"%"</font> TokNull [] p p <font color=Cyan>(</font>expand s<font color=Cyan>++</font><font color=Magenta>"%"</font><font color=Cyan>)</font> <font color=Cyan>(</font>xmlAny []<font color=Cyan>)</font>
-<a name="(line203)"></a>  <font color=Green><u>where</u></font>
-<a name="(line204)"></a>    expand []       <font color=Red>=</font> []
-<a name="(line205)"></a>    expand <font color=Cyan>(</font><font color=Magenta>'%'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>sym<font color=Cyan>,</font>rest<font color=Cyan>)</font> <font color=Red>=</font> break <font color=Cyan>(</font><font color=Cyan>==</font><font color=Magenta>';'</font><font color=Cyan>)</font> ss <font color=Green><u>in</u></font>
-<a name="(line206)"></a>                      <font color=Green><u>case</u></font> lookup sym <font color=Green><u>of</u></font>
-<a name="(line207)"></a>                        Just val <font color=Red>-&gt;</font> expand val <font color=Cyan>++</font> expand <font color=Cyan>(</font>tail rest<font color=Cyan>)</font>
-<a name="(line208)"></a>                        Nothing  <font color=Red>-&gt;</font> <font color=Magenta>"%"</font><font color=Cyan>++</font>sym<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>++</font> expand <font color=Cyan>(</font>tail rest<font color=Cyan>)</font> <font color=Blue>-- hmmm</font>
-<a name="(line209)"></a>    expand <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>   <font color=Red>=</font> s<font color=Red><b>:</b></font> expand ss
-<a name="(line210)"></a>
-<a name="(line211)"></a><font color=Blue>--xmltop :: Posn -&gt; String -&gt; [Token]</font>
-<a name="(line212)"></a><font color=Blue>--xmltop p [] = []</font>
-<a name="(line213)"></a><font color=Blue>--xmltop p s</font>
-<a name="(line214)"></a><font color=Blue>--    | "&lt;?"   `prefixes` s = emit TokPIOpen p:      next 2 (xmlPI [InTag "&lt;?...?&gt;"])</font>
-<a name="(line215)"></a><font color=Blue>--    | "&lt;!--" `prefixes` s = emit TokCommentOpen p: next 4 (xmlComment [])</font>
-<a name="(line216)"></a><font color=Blue>--    | "&lt;!"   `prefixes` s = emit TokSpecialOpen p: next 2 (xmlSpecial [InTag "&lt;!...&gt;"])</font>
-<a name="(line217)"></a><font color=Blue>--    | otherwise           = lexerror "expected &lt;?xml?&gt; or &lt;!DOCTYPE&gt;" p</font>
-<a name="(line218)"></a><font color=Blue>--  where next n k = skip n p s k</font>
-<a name="(line219)"></a>
-<a name="(line220)"></a><a name="xmlPI"></a>xmlPI      w p s <font color=Red>=</font> xmlName p s <font color=Magenta>"name of processor in &lt;? ?&gt;"</font> <font color=Cyan>(</font>blank xmlPIEnd w<font color=Cyan>)</font>
-<a name="(line221)"></a><a name="xmlPIEnd"></a>xmlPIEnd   w p s <font color=Red>=</font> textUntil <font color=Magenta>"?&gt;"</font>  TokPIClose <font color=Magenta>""</font> p p s <font color=Cyan>(</font>blank xmlAny <font color=Cyan>(</font>tail w<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line222)"></a><a name="xmlComment"></a>xmlComment w p s <font color=Red>=</font> textUntil <font color=Magenta>"--&gt;"</font> TokCommentClose <font color=Magenta>""</font> p p s <font color=Cyan>(</font>blank xmlAny w<font color=Cyan>)</font>
-<a name="(line223)"></a>
-<a name="(line224)"></a><a name="xmlAny"></a><font color=Blue>-- Note: the order of the clauses in xmlAny is very important.</font>
-<a name="(line225)"></a><font color=Blue>-- Some matches must precede the NotInTag test, the rest must follow it.</font>
-<a name="(line226)"></a>xmlAny <font color=Red>::</font> <font color=Red>[</font>Where<font color=Red>]</font> <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
-<a name="(line227)"></a>xmlAny  <font color=Cyan>(</font>InTag t<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font>  p [] <font color=Red>=</font> lexerror <font color=Cyan>(</font><font color=Magenta>"unexpected EOF within "</font><font color=Cyan>++</font>t<font color=Cyan>)</font> p
-<a name="(line228)"></a>xmlAny          <font color=Green><u>_</u></font>    p [] <font color=Red>=</font> []
-<a name="(line229)"></a>xmlAny w p s<font color=Red>@</font><font color=Cyan>(</font><font color=Magenta>'&lt;'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
-<a name="(line230)"></a>    <font color=Red>|</font> <font color=Magenta>"?"</font>   <font color=Cyan>`prefixes`</font> ss <font color=Red>=</font> emit TokPIOpen p<font color=Red><b>:</b></font>
-<a name="(line231)"></a>                                         skip <font color=Magenta>2</font> p s <font color=Cyan>(</font>xmlPI <font color=Cyan>(</font>InTag <font color=Magenta>"&lt;?...?&gt;"</font><font color=Red><b>:</b></font>w<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line232)"></a>    <font color=Red>|</font> <font color=Magenta>"!--"</font> <font color=Cyan>`prefixes`</font> ss <font color=Red>=</font> emit TokCommentOpen p<font color=Red><b>:</b></font> skip <font color=Magenta>4</font> p s <font color=Cyan>(</font>xmlComment w<font color=Cyan>)</font>
-<a name="(line233)"></a>    <font color=Red>|</font> <font color=Magenta>"!["</font>  <font color=Cyan>`prefixes`</font> ss <font color=Red>=</font> emit TokSectionOpen p<font color=Red><b>:</b></font> skip <font color=Magenta>3</font> p s <font color=Cyan>(</font>xmlSection w<font color=Cyan>)</font>
-<a name="(line234)"></a>    <font color=Red>|</font> <font color=Magenta>"!"</font>   <font color=Cyan>`prefixes`</font> ss <font color=Red>=</font> emit TokSpecialOpen p<font color=Red><b>:</b></font>
-<a name="(line235)"></a>                                     skip <font color=Magenta>2</font> p s <font color=Cyan>(</font>xmlSpecial <font color=Cyan>(</font>InTag <font color=Magenta>"&lt;!...&gt;"</font><font color=Red><b>:</b></font>w<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line236)"></a>    <font color=Red>|</font> <font color=Magenta>"/"</font>   <font color=Cyan>`prefixes`</font> ss <font color=Red>=</font> emit TokEndOpen p<font color=Red><b>:</b></font> 
-<a name="(line237)"></a>                                    skip <font color=Magenta>2</font> p s <font color=Cyan>(</font>xmlTag <font color=Cyan>(</font>InTag <font color=Magenta>"&lt;/...&gt;"</font><font color=Red><b>:</b></font>tail w<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line238)"></a>    <font color=Red>|</font> otherwise           <font color=Red>=</font> emit TokAnyOpen p<font color=Red><b>:</b></font>
-<a name="(line239)"></a>                                 skip <font color=Magenta>1</font> p s <font color=Cyan>(</font>xmlTag <font color=Cyan>(</font>InTag <font color=Magenta>"&lt;...&gt;"</font><font color=Red><b>:</b></font>NotInTag<font color=Red><b>:</b></font>w<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line240)"></a>xmlAny <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Red><b>:</b></font>w<font color=Cyan>)</font> p s<font color=Red>@</font><font color=Cyan>(</font><font color=Magenta>'/'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
-<a name="(line241)"></a>    <font color=Red>|</font> <font color=Magenta>"&gt;"</font>   <font color=Cyan>`prefixes`</font> ss <font color=Red>=</font> emit TokEndClose p<font color=Red><b>:</b></font> skip <font color=Magenta>2</font> p s <font color=Cyan>(</font>xmlAny w<font color=Cyan>)</font>
-<a name="(line242)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>'&amp;'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokAmp p<font color=Red><b>:</b></font>      textUntil <font color=Magenta>";"</font> TokSemi <font color=Magenta>""</font> p
-<a name="(line243)"></a>                                                     <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss <font color=Cyan>(</font>xmlAny w<font color=Cyan>)</font>
-<a name="(line244)"></a>xmlAny w<font color=Red>@</font><font color=Cyan>(</font>NotInTag<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> p s <font color=Red>=</font> xmlContent <font color=Magenta>""</font> w p p s
-<a name="(line245)"></a><font color=Blue>-- everything below here is implicitly InTag.</font>
-<a name="(line246)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>'&gt;'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokAnyClose p<font color=Red><b>:</b></font> xmlAny <font color=Cyan>(</font>tail w<font color=Cyan>)</font> <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line247)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>'['</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokSqOpen p<font color=Red><b>:</b></font>
-<a name="(line248)"></a>                                 blank xmlAny <font color=Cyan>(</font>InTag <font color=Magenta>"[...]"</font><font color=Red><b>:</b></font>w<font color=Cyan>)</font> <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line249)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>']'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
-<a name="(line250)"></a>    <font color=Red>|</font> <font color=Magenta>"]&gt;"</font> <font color=Cyan>`prefixes`</font> ss  <font color=Red>=</font>
-<a name="(line251)"></a>                 emit TokSectionClose p<font color=Red><b>:</b></font>  skip <font color=Magenta>3</font> p <font color=Cyan>(</font><font color=Magenta>']'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Cyan>(</font>xmlAny <font color=Cyan>(</font>tail w<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line252)"></a>    <font color=Red>|</font> otherwise  <font color=Red>=</font>    emit TokSqClose p<font color=Red><b>:</b></font>  blank xmlAny <font color=Cyan>(</font>tail w<font color=Cyan>)</font> <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line253)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>'('</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokBraOpen p<font color=Red><b>:</b></font>
-<a name="(line254)"></a>                                 blank xmlAny <font color=Cyan>(</font>InTag <font color=Magenta>"(...)"</font><font color=Red><b>:</b></font>w<font color=Cyan>)</font> <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line255)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>')'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokBraClose p<font color=Red><b>:</b></font> blank xmlAny <font color=Cyan>(</font>tail w<font color=Cyan>)</font> <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line256)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>'='</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokEqual p<font color=Red><b>:</b></font>    blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line257)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>'*'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokStar p<font color=Red><b>:</b></font>     blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line258)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>'+'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokPlus p<font color=Red><b>:</b></font>     blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line259)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>'?'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokQuery p<font color=Red><b>:</b></font>    blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line260)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>'|'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokPipe p<font color=Red><b>:</b></font>     blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line261)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>'%'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokPercent p<font color=Red><b>:</b></font>  blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line262)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>';'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokSemi p<font color=Red><b>:</b></font>     blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line263)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>','</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokComma p<font color=Red><b>:</b></font>    blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line264)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokHash p<font color=Red><b>:</b></font>     blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line265)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>'"'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokQuote p<font color=Red><b>:</b></font>    textOrRefUntil <font color=Magenta>"\""</font> TokQuote <font color=Magenta>""</font> p1
-<a name="(line266)"></a>                                                          p1 ss <font color=Cyan>(</font>xmlAny w<font color=Cyan>)</font>
-<a name="(line267)"></a>                                             <font color=Green><u>where</u></font> p1 <font color=Red>=</font> addcol <font color=Magenta>1</font> p
-<a name="(line268)"></a>xmlAny w p <font color=Cyan>(</font><font color=Magenta>'\''</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokQuote p<font color=Red><b>:</b></font>   textOrRefUntil <font color=Magenta>"'"</font> TokQuote <font color=Magenta>""</font> p1
-<a name="(line269)"></a>                                                          p1 ss <font color=Cyan>(</font>xmlAny w<font color=Cyan>)</font>
-<a name="(line270)"></a>                                             <font color=Green><u>where</u></font> p1 <font color=Red>=</font> addcol <font color=Magenta>1</font> p
-<a name="(line271)"></a>xmlAny w p s
-<a name="(line272)"></a>    <font color=Red>|</font> isSpace <font color=Cyan>(</font>head s<font color=Cyan>)</font>     <font color=Red>=</font> blank xmlAny w p s
-<a name="(line273)"></a>    <font color=Red>|</font> isAlphaNum <font color=Cyan>(</font>head s<font color=Cyan>)</font> <font color=Cyan>||</font> <font color=Cyan>(</font>head s<font color=Cyan>)</font><font color=Cyan>`elem`</font><font color=Magenta>":_"</font>
-<a name="(line274)"></a>                           <font color=Red>=</font> xmlName p s <font color=Magenta>"some kind of name"</font> <font color=Cyan>(</font>blank xmlAny w<font color=Cyan>)</font>
-<a name="(line275)"></a>    <font color=Red>|</font> otherwise            <font color=Red>=</font> lexerror <font color=Cyan>(</font><font color=Magenta>"unrecognised token: "</font><font color=Cyan>++</font>take <font color=Magenta>4</font> s<font color=Cyan>)</font> p
-<a name="(line276)"></a>
-<a name="(line277)"></a><a name="xmlTag"></a>xmlTag w p s <font color=Red>=</font> xmlName p s <font color=Magenta>"tagname for element in &lt; &gt;"</font> <font color=Cyan>(</font>blank xmlAny w<font color=Cyan>)</font>
-<a name="(line278)"></a>
-<a name="(line279)"></a><a name="xmlSection"></a>xmlSection <font color=Red>=</font> blank xmlSection0
-<a name="(line280)"></a>  <font color=Green><u>where</u></font>
-<a name="(line281)"></a>    xmlSection0 w p s
-<a name="(line282)"></a>      <font color=Red>|</font> <font color=Magenta>"CDATA["</font>   <font color=Cyan>`prefixes`</font> s  <font color=Red>=</font> emit <font color=Cyan>(</font>TokSection CDATAx<font color=Cyan>)</font> p<font color=Red><b>:</b></font>  accum w p s <font color=Magenta>6</font>
-<a name="(line283)"></a>      <font color=Red>|</font> <font color=Magenta>"INCLUDE"</font>  <font color=Cyan>`prefixes`</font> s  <font color=Red>=</font> emit <font color=Cyan>(</font>TokSection INCLUDEx<font color=Cyan>)</font> p<font color=Red><b>:</b></font>    k w p s <font color=Magenta>7</font>
-<a name="(line284)"></a>      <font color=Red>|</font> <font color=Magenta>"IGNORE"</font>   <font color=Cyan>`prefixes`</font> s  <font color=Red>=</font> emit <font color=Cyan>(</font>TokSection IGNOREx<font color=Cyan>)</font> p<font color=Red><b>:</b></font>     k w p s <font color=Magenta>6</font>
-<a name="(line285)"></a>      <font color=Red>|</font> <font color=Magenta>"%"</font>        <font color=Cyan>`prefixes`</font> s  <font color=Red>=</font> emit TokPercent p<font color=Red><b>:</b></font>               k w p s <font color=Magenta>1</font>
-<a name="(line286)"></a>      <font color=Red>|</font> otherwise <font color=Red>=</font> lexerror <font color=Cyan>(</font><font color=Magenta>"expected CDATA, IGNORE, or INCLUDE, but got "</font>
-<a name="(line287)"></a>                             <font color=Cyan>++</font>take <font color=Magenta>7</font> s<font color=Cyan>)</font> p
-<a name="(line288)"></a>    accum w p s n <font color=Red>=</font>
-<a name="(line289)"></a>      <font color=Green><u>let</u></font> p0 <font color=Red>=</font> addcol n p <font color=Green><u>in</u></font>
-<a name="(line290)"></a>      textUntil <font color=Magenta>"]]&gt;"</font> TokSectionClose <font color=Magenta>""</font> p0 p0 <font color=Cyan>(</font>drop n s<font color=Cyan>)</font> <font color=Cyan>(</font>blank xmlAny w<font color=Cyan>)</font>
-<a name="(line291)"></a>    k w p s n <font color=Red>=</font>
-<a name="(line292)"></a>      skip n p s <font color=Cyan>(</font>xmlAny <font color=Cyan>(</font><font color=Blue>{-InTag "&lt;![section[ ... ]]&gt;": -}</font>w<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line293)"></a>
-<a name="(line294)"></a><a name="xmlSpecial"></a>xmlSpecial w p s
-<a name="(line295)"></a>    <font color=Red>|</font> <font color=Magenta>"DOCTYPE"</font>  <font color=Cyan>`prefixes`</font> s <font color=Red>=</font> emit <font color=Cyan>(</font>TokSpecial DOCTYPEx<font color=Cyan>)</font>  p<font color=Red><b>:</b></font> k <font color=Magenta>7</font>
-<a name="(line296)"></a>    <font color=Red>|</font> <font color=Magenta>"ELEMENT"</font>  <font color=Cyan>`prefixes`</font> s <font color=Red>=</font> emit <font color=Cyan>(</font>TokSpecial ELEMENTx<font color=Cyan>)</font>  p<font color=Red><b>:</b></font> k <font color=Magenta>7</font>
-<a name="(line297)"></a>    <font color=Red>|</font> <font color=Magenta>"ATTLIST"</font>  <font color=Cyan>`prefixes`</font> s <font color=Red>=</font> emit <font color=Cyan>(</font>TokSpecial ATTLISTx<font color=Cyan>)</font>  p<font color=Red><b>:</b></font> k <font color=Magenta>7</font>
-<a name="(line298)"></a>    <font color=Red>|</font> <font color=Magenta>"ENTITY"</font>   <font color=Cyan>`prefixes`</font> s <font color=Red>=</font> emit <font color=Cyan>(</font>TokSpecial ENTITYx<font color=Cyan>)</font>   p<font color=Red><b>:</b></font> k <font color=Magenta>6</font>
-<a name="(line299)"></a>    <font color=Red>|</font> <font color=Magenta>"NOTATION"</font> <font color=Cyan>`prefixes`</font> s <font color=Red>=</font> emit <font color=Cyan>(</font>TokSpecial NOTATIONx<font color=Cyan>)</font> p<font color=Red><b>:</b></font> k <font color=Magenta>8</font>
-<a name="(line300)"></a>    <font color=Red>|</font> otherwise <font color=Red>=</font> lexerror
-<a name="(line301)"></a>                    <font color=Cyan>(</font><font color=Magenta>"expected DOCTYPE, ELEMENT, ENTITY, ATTLIST, or NOTATION,"</font>
-<a name="(line302)"></a>                    <font color=Cyan>++</font><font color=Magenta>" but got "</font><font color=Cyan>++</font>take <font color=Magenta>7</font> s<font color=Cyan>)</font> p
-<a name="(line303)"></a>  <font color=Green><u>where</u></font> k n <font color=Red>=</font> skip n p s <font color=Cyan>(</font>blank xmlAny w<font color=Cyan>)</font>
-<a name="(line304)"></a>
-<a name="(line305)"></a><a name="xmlName"></a>xmlName p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font> cxt k
-<a name="(line306)"></a>    <font color=Red>|</font> isAlphaNum s <font color=Cyan>||</font> s<font color=Cyan>==</font><font color=Magenta>':'</font> <font color=Cyan>||</font> s<font color=Cyan>==</font><font color=Magenta>'_'</font>  <font color=Red>=</font> gatherName <font color=Cyan>(</font>s<font color=Red><b>:</b></font>[]<font color=Cyan>)</font> p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
-<a name="(line307)"></a>    <font color=Red>|</font> otherwise   <font color=Red>=</font> lexerror <font color=Cyan>(</font><font color=Magenta>"expected a "</font><font color=Cyan>++</font>cxt<font color=Cyan>++</font><font color=Magenta>", but got char "</font><font color=Cyan>++</font>show s<font color=Cyan>)</font> p
-<a name="(line308)"></a>  <font color=Green><u>where</u></font>
-<a name="(line309)"></a>    gatherName acc pos p [] k <font color=Red>=</font>
-<a name="(line310)"></a>        emit <font color=Cyan>(</font>TokName <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> k p []
-<a name="(line311)"></a>    <font color=Blue>--  lexerror ("unexpected EOF in name at "++show pos) p</font>
-<a name="(line312)"></a>    gatherName acc pos p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font> k
-<a name="(line313)"></a>        <font color=Red>|</font> isAlphaNum s <font color=Cyan>||</font> s <font color=Cyan>`elem`</font> <font color=Magenta>".-_:"</font>
-<a name="(line314)"></a>                      <font color=Red>=</font> gatherName <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
-<a name="(line315)"></a>        <font color=Red>|</font> otherwise   <font color=Red>=</font> emit <font color=Cyan>(</font>TokName <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> k p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
-<a name="(line316)"></a>xmlName p [] cxt k <font color=Red>=</font> lexerror <font color=Cyan>(</font><font color=Magenta>"expected a "</font><font color=Cyan>++</font>cxt<font color=Cyan>++</font><font color=Magenta>", but got end of input"</font><font color=Cyan>)</font> p
-<a name="(line317)"></a>
-<a name="(line318)"></a><a name="xmlContent"></a>xmlContent acc w pos p [] <font color=Red>=</font> <font color=Green><u>if</u></font> all isSpace acc <font color=Green><u>then</u></font> []
-<a name="(line319)"></a>                            <font color=Green><u>else</u></font> lexerror <font color=Magenta>"unexpected EOF between tags"</font> p
-<a name="(line320)"></a>xmlContent acc w pos p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
-<a name="(line321)"></a>    <font color=Red>|</font> elem s <font color=Magenta>"&lt;&amp;"</font>    <font color=Red>=</font> <font color=Blue>{- if all isSpace acc then xmlAny w p (s:ss) else -}</font>
-<a name="(line322)"></a>                       emit <font color=Cyan>(</font>TokFreeText <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> xmlAny w p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
-<a name="(line323)"></a>    <font color=Red>|</font> isSpace s      <font color=Red>=</font> xmlContent <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> w pos <font color=Cyan>(</font>white s p<font color=Cyan>)</font> ss
-<a name="(line324)"></a>    <font color=Red>|</font> otherwise      <font color=Red>=</font> xmlContent <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> w pos <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line325)"></a>
-<a name="(line326)"></a>
-<a name="(line327)"></a>
-<a name="(line328)"></a><font color=Blue>--ident :: (String-&gt;TokenT) -&gt;</font>
-<a name="(line329)"></a><font color=Blue>--          Posn -&gt; String -&gt; [String] -&gt;</font>
-<a name="(line330)"></a><font color=Blue>--         (Posn-&gt;String-&gt;[String]-&gt;[Token]) -&gt; [Token]</font>
-<a name="(line331)"></a><font color=Blue>--ident tok p s ss k =</font>
-<a name="(line332)"></a><font color=Blue>--    let (name,s0) = span (\c-&gt; isAlphaNum c || c `elem` "`-_#.'/\\") s</font>
-<a name="(line333)"></a><font color=Blue>--    in emit (tok name) p: skip (length name) p s ss k</font>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Lex.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | You don't normally need to use this Lex module directly - it is</font>
+<a name="line-2"></a><font color=Blue>--   called automatically by the parser.  (This interface is only exposed</font>
+<a name="line-3"></a><font color=Blue>--   for debugging purposes.)</font>
+<a name="line-4"></a><font color=Blue>--</font>
+<a name="line-5"></a><font color=Blue>-- This is a hand-written lexer for tokenising the text of an XML</font>
+<a name="line-6"></a><font color=Blue>-- document so that it is ready for parsing.  It attaches position</font>
+<a name="line-7"></a><font color=Blue>-- information in (line,column) format to every token.  The main</font>
+<a name="line-8"></a><font color=Blue>-- entry point is 'xmlLex'.  A secondary entry point, 'xmlReLex', is</font>
+<a name="line-9"></a><font color=Blue>-- provided for when the parser needs to stuff a string back onto</font>
+<a name="line-10"></a><font color=Blue>-- the front of the text and re-tokenise it (typically when expanding</font>
+<a name="line-11"></a><font color=Blue>-- macros).</font>
+<a name="line-12"></a><font color=Blue>--</font>
+<a name="line-13"></a><font color=Blue>-- As one would expect, the lexer is essentially a small finite</font>
+<a name="line-14"></a><font color=Blue>-- state machine.</font>
+<a name="line-15"></a>
+<a name="line-16"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Lex
+<a name="line-17"></a>  <font color=Cyan>(</font>
+<a name="line-18"></a>  <font color=Blue>-- * Entry points to the lexer</font>
+<a name="line-19"></a>    xmlLex         <font color=Blue>-- :: String -&gt; String -&gt; [Token]</font>
+<a name="line-20"></a>  <font color=Cyan>,</font> xmlReLex       <font color=Blue>-- :: Posn   -&gt; String -&gt; [Token]</font>
+<a name="line-21"></a>  <font color=Cyan>,</font> reLexEntityValue <font color=Blue>-- :: (String-&gt;Maybe String) -&gt; Posn -&gt; String -&gt; [Token]</font>
+<a name="line-22"></a>  <font color=Blue>-- * Token types</font>
+<a name="line-23"></a>  <font color=Cyan>,</font> Token
+<a name="line-24"></a>  <font color=Cyan>,</font> TokenT<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-25"></a>  <font color=Cyan>,</font> Special<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-26"></a>  <font color=Cyan>,</font> Section<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-27"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-28"></a>
+<a name="line-29"></a><font color=Green><u>import</u></font> Char
+<a name="line-30"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn
+<a name="line-31"></a>
+<a name="line-32"></a><a name="Where"></a><font color=Green><u>data</u></font> Where <font color=Red>=</font> InTag String <font color=Red>|</font> NotInTag
+<a name="line-33"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>)</font>
+<a name="line-34"></a>
+<a name="line-35"></a><a name="Token"></a><font color=Blue>-- | All tokens are paired up with a source position.</font>
+<a name="line-36"></a><a name="Token"></a><font color=Blue>--   Lexical errors are passed back as a special @TokenT@ value.</font>
+<a name="line-37"></a><a name="Token"></a><font color=Green><u>type</u></font> Token <font color=Red>=</font> <font color=Cyan>(</font>Posn<font color=Cyan>,</font> TokenT<font color=Cyan>)</font>
+<a name="line-38"></a>
+<a name="line-39"></a><a name="TokenT"></a><font color=Blue>-- | The basic token type.</font>
+<a name="line-40"></a><a name="TokenT"></a><font color=Green><u>data</u></font> TokenT <font color=Red>=</font>
+<a name="line-41"></a>      TokCommentOpen		<font color=Blue>-- ^   \&lt;!--</font>
+<a name="line-42"></a>    <font color=Red>|</font> TokCommentClose		<font color=Blue>-- ^   --&gt;</font>
+<a name="line-43"></a>    <font color=Red>|</font> TokPIOpen			<font color=Blue>-- ^   \&lt;?</font>
+<a name="line-44"></a>    <font color=Red>|</font> TokPIClose		<font color=Blue>-- ^   ?&gt;</font>
+<a name="line-45"></a>    <font color=Red>|</font> TokSectionOpen		<font color=Blue>-- ^   \&lt;![</font>
+<a name="line-46"></a>    <font color=Red>|</font> TokSectionClose		<font color=Blue>-- ^   ]]&gt;</font>
+<a name="line-47"></a>    <font color=Red>|</font> TokSection Section	<font color=Blue>-- ^   CDATA INCLUDE IGNORE etc</font>
+<a name="line-48"></a>    <font color=Red>|</font> TokSpecialOpen		<font color=Blue>-- ^   \&lt;!</font>
+<a name="line-49"></a>    <font color=Red>|</font> TokSpecial Special	<font color=Blue>-- ^   DOCTYPE ELEMENT ATTLIST etc</font>
+<a name="line-50"></a>    <font color=Red>|</font> TokEndOpen		<font color=Blue>-- ^   \&lt;\/</font>
+<a name="line-51"></a>    <font color=Red>|</font> TokEndClose		<font color=Blue>-- ^   \/&gt;</font>
+<a name="line-52"></a>    <font color=Red>|</font> TokAnyOpen		<font color=Blue>-- ^   \&lt;</font>
+<a name="line-53"></a>    <font color=Red>|</font> TokAnyClose		<font color=Blue>-- ^   &gt;</font>
+<a name="line-54"></a>    <font color=Red>|</font> TokSqOpen			<font color=Blue>-- ^   \[</font>
+<a name="line-55"></a>    <font color=Red>|</font> TokSqClose		<font color=Blue>-- ^   \]</font>
+<a name="line-56"></a>    <font color=Red>|</font> TokEqual			<font color=Blue>-- ^   =</font>
+<a name="line-57"></a>    <font color=Red>|</font> TokQuery			<font color=Blue>-- ^   ?</font>
+<a name="line-58"></a>    <font color=Red>|</font> TokStar			<font color=Blue>-- ^   \*</font>
+<a name="line-59"></a>    <font color=Red>|</font> TokPlus			<font color=Blue>-- ^   +</font>
+<a name="line-60"></a>    <font color=Red>|</font> TokAmp			<font color=Blue>-- ^   &amp;</font>
+<a name="line-61"></a>    <font color=Red>|</font> TokSemi			<font color=Blue>-- ^   ;</font>
+<a name="line-62"></a>    <font color=Red>|</font> TokHash			<font color=Blue>-- ^   #</font>
+<a name="line-63"></a>    <font color=Red>|</font> TokBraOpen		<font color=Blue>-- ^   (</font>
+<a name="line-64"></a>    <font color=Red>|</font> TokBraClose		<font color=Blue>-- ^   )</font>
+<a name="line-65"></a>    <font color=Red>|</font> TokPipe			<font color=Blue>-- ^   |</font>
+<a name="line-66"></a>    <font color=Red>|</font> TokPercent		<font color=Blue>-- ^   %</font>
+<a name="line-67"></a>    <font color=Red>|</font> TokComma			<font color=Blue>-- ^   ,</font>
+<a name="line-68"></a>    <font color=Red>|</font> TokQuote			<font color=Blue>-- ^   \'\' or \"\"</font>
+<a name="line-69"></a>    <font color=Red>|</font> TokName      String	<font color=Blue>-- ^   begins with letter, no spaces</font>
+<a name="line-70"></a>    <font color=Red>|</font> TokFreeText  String	<font color=Blue>-- ^   any character data</font>
+<a name="line-71"></a>    <font color=Red>|</font> TokNull			<font color=Blue>-- ^   fake token</font>
+<a name="line-72"></a>    <font color=Red>|</font> TokError     String	<font color=Blue>-- ^   lexical error</font>
+<a name="line-73"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>)</font>
+<a name="line-74"></a>
+<a name="line-75"></a><a name="Special"></a><font color=Green><u>data</u></font> Special <font color=Red>=</font>
+<a name="line-76"></a>      DOCTYPEx
+<a name="line-77"></a>    <font color=Red>|</font> ELEMENTx
+<a name="line-78"></a>    <font color=Red>|</font> ATTLISTx
+<a name="line-79"></a>    <font color=Red>|</font> ENTITYx
+<a name="line-80"></a>    <font color=Red>|</font> NOTATIONx
+<a name="line-81"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-82"></a><a name="Section"></a><font color=Green><u>data</u></font> Section <font color=Red>=</font>
+<a name="line-83"></a>      CDATAx
+<a name="line-84"></a>    <font color=Red>|</font> INCLUDEx
+<a name="line-85"></a>    <font color=Red>|</font> IGNOREx
+<a name="line-86"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-87"></a>
+<a name="line-88"></a><font color=Green><u>instance</u></font> Show TokenT <font color=Green><u>where</u></font>
+<a name="line-89"></a>  showsPrec p  TokCommentOpen		<font color=Red>=</font> showString     <font color=Magenta>"&lt;!--"</font>
+<a name="line-90"></a>  showsPrec p  TokCommentClose		<font color=Red>=</font> showString     <font color=Magenta>"--&gt;"</font>
+<a name="line-91"></a>  showsPrec p  TokPIOpen		<font color=Red>=</font> showString     <font color=Magenta>"&lt;?"</font>
+<a name="line-92"></a>  showsPrec p  TokPIClose		<font color=Red>=</font> showString     <font color=Magenta>"?&gt;"</font>
+<a name="line-93"></a>  showsPrec p  TokSectionOpen		<font color=Red>=</font> showString     <font color=Magenta>"&lt;!["</font>
+<a name="line-94"></a>  showsPrec p  TokSectionClose		<font color=Red>=</font> showString     <font color=Magenta>"]]&gt;"</font>
+<a name="line-95"></a>  showsPrec p  <font color=Cyan>(</font>TokSection s<font color=Cyan>)</font>		<font color=Red>=</font> showsPrec p s
+<a name="line-96"></a>  showsPrec p  TokSpecialOpen		<font color=Red>=</font> showString     <font color=Magenta>"&lt;!"</font>
+<a name="line-97"></a>  showsPrec p  <font color=Cyan>(</font>TokSpecial s<font color=Cyan>)</font>		<font color=Red>=</font> showsPrec p s
+<a name="line-98"></a>  showsPrec p  TokEndOpen		<font color=Red>=</font> showString     <font color=Magenta>"&lt;/"</font>
+<a name="line-99"></a>  showsPrec p  TokEndClose		<font color=Red>=</font> showString     <font color=Magenta>"/&gt;"</font>
+<a name="line-100"></a>  showsPrec p  TokAnyOpen		<font color=Red>=</font> showString     <font color=Magenta>"&lt;"</font>
+<a name="line-101"></a>  showsPrec p  TokAnyClose		<font color=Red>=</font> showString     <font color=Magenta>"&gt;"</font>
+<a name="line-102"></a>  showsPrec p  TokSqOpen		<font color=Red>=</font> showString     <font color=Magenta>"["</font>
+<a name="line-103"></a>  showsPrec p  TokSqClose		<font color=Red>=</font> showString     <font color=Magenta>"]"</font>
+<a name="line-104"></a>  showsPrec p  TokEqual			<font color=Red>=</font> showString     <font color=Magenta>"="</font>
+<a name="line-105"></a>  showsPrec p  TokQuery			<font color=Red>=</font> showString     <font color=Magenta>"?"</font>
+<a name="line-106"></a>  showsPrec p  TokStar			<font color=Red>=</font> showString     <font color=Magenta>"*"</font>
+<a name="line-107"></a>  showsPrec p  TokPlus			<font color=Red>=</font> showString     <font color=Magenta>"+"</font>
+<a name="line-108"></a>  showsPrec p  TokAmp			<font color=Red>=</font> showString     <font color=Magenta>"&amp;"</font>
+<a name="line-109"></a>  showsPrec p  TokSemi			<font color=Red>=</font> showString     <font color=Magenta>";"</font>
+<a name="line-110"></a>  showsPrec p  TokHash			<font color=Red>=</font> showString     <font color=Magenta>"#"</font>
+<a name="line-111"></a>  showsPrec p  TokBraOpen		<font color=Red>=</font> showString     <font color=Magenta>"("</font>
+<a name="line-112"></a>  showsPrec p  TokBraClose		<font color=Red>=</font> showString     <font color=Magenta>")"</font>
+<a name="line-113"></a>  showsPrec p  TokPipe			<font color=Red>=</font> showString     <font color=Magenta>"|"</font>
+<a name="line-114"></a>  showsPrec p  TokPercent		<font color=Red>=</font> showString     <font color=Magenta>"%"</font>
+<a name="line-115"></a>  showsPrec p  TokComma			<font color=Red>=</font> showString     <font color=Magenta>","</font>
+<a name="line-116"></a>  showsPrec p  TokQuote			<font color=Red>=</font> showString     <font color=Magenta>"' or \""</font>
+<a name="line-117"></a>  showsPrec p  <font color=Cyan>(</font>TokName      s<font color=Cyan>)</font>		<font color=Red>=</font> showString     s
+<a name="line-118"></a>  showsPrec p  <font color=Cyan>(</font>TokFreeText  s<font color=Cyan>)</font>		<font color=Red>=</font> showString     s
+<a name="line-119"></a>  showsPrec p  TokNull			<font color=Red>=</font> showString     <font color=Magenta>"(null)"</font>
+<a name="line-120"></a>  showsPrec p  <font color=Cyan>(</font>TokError     s<font color=Cyan>)</font>		<font color=Red>=</font> showString     s
+<a name="line-121"></a>
+<a name="line-122"></a><font color=Blue>--trim, revtrim :: String -&gt; String</font>
+<a name="line-123"></a><font color=Blue>--trim    = f . f         where f = reverse . dropWhile isSpace</font>
+<a name="line-124"></a><font color=Blue>--revtrim = f.reverse.f   where f = dropWhile isSpace</font>
+<a name="line-125"></a><font color=Blue>--revtrim = reverse . dropWhile (=='\n')  -- most recently used defn.</font>
+<a name="line-126"></a>
+<a name="line-127"></a><a name="emit"></a><font color=Blue>emit</font> <font color=Red>::</font> TokenT <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> Token
+<a name="line-128"></a><font color=Blue>emit</font> tok p <font color=Red>=</font> forcep p <font color=Cyan>`seq`</font> <font color=Cyan>(</font>p<font color=Cyan>,</font>tok<font color=Cyan>)</font>
+<a name="line-129"></a>
+<a name="line-130"></a><a name="lexerror"></a><font color=Blue>lexerror</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
+<a name="line-131"></a><font color=Blue>lexerror</font> s p <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>p<font color=Cyan>,</font> TokError <font color=Cyan>(</font><font color=Magenta>"Lexical error:\n  "</font><font color=Cyan>++</font>s<font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-132"></a>
+<a name="line-133"></a><a name="skip"></a><font color=Blue>skip</font> <font color=Red>::</font> Int <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Cyan>(</font>Posn<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font><font color=Red>[</font>Token<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
+<a name="line-134"></a><font color=Blue>skip</font> n p s k <font color=Red>=</font> k <font color=Cyan>(</font>addcol n p<font color=Cyan>)</font> <font color=Cyan>(</font>drop n s<font color=Cyan>)</font>
+<a name="line-135"></a>
+<a name="line-136"></a><a name="blank"></a><font color=Blue>blank</font> <font color=Red>::</font> <font color=Cyan>(</font><font color=Red>[</font>Where<font color=Red>]</font><font color=Red>-&gt;</font>Posn<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font><font color=Red>[</font>Token<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Where<font color=Red>]</font><font color=Red>-&gt;</font> Posn<font color=Red>-&gt;</font> String<font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
+<a name="line-137"></a><font color=Blue>blank</font> k  <font color=Cyan>(</font>InTag t<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> p [] <font color=Red>=</font> lexerror <font color=Cyan>(</font><font color=Magenta>"unexpected EOF within "</font><font color=Cyan>++</font>t<font color=Cyan>)</font> p
+<a name="line-138"></a><font color=Blue>blank</font> k          <font color=Green><u>_</u></font>   p [] <font color=Red>=</font> []
+<a name="line-139"></a><font color=Blue>blank</font> k      w p <font color=Cyan>(</font><font color=Magenta>' '</font><font color=Red><b>:</b></font> s<font color=Cyan>)</font> <font color=Red>=</font> blank k w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> s
+<a name="line-140"></a><font color=Blue>blank</font> k      w p <font color=Cyan>(</font><font color=Magenta>'\t'</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font> <font color=Red>=</font> blank k w <font color=Cyan>(</font>tab p<font color=Cyan>)</font> s
+<a name="line-141"></a><font color=Blue>blank</font> k      w p <font color=Cyan>(</font><font color=Magenta>'\n'</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font> <font color=Red>=</font> blank k w <font color=Cyan>(</font>newline p<font color=Cyan>)</font> s
+<a name="line-142"></a><font color=Blue>blank</font> k      w p <font color=Cyan>(</font><font color=Magenta>'\r'</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font> <font color=Red>=</font> blank k w  p s
+<a name="line-143"></a><font color=Blue>blank</font> k   w p <font color=Cyan>(</font><font color=Magenta>'\xa0'</font><font color=Red><b>:</b></font> s<font color=Cyan>)</font> <font color=Red>=</font> blank k w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> s
+<a name="line-144"></a><font color=Blue>blank</font> k      w p    s     <font color=Red>=</font> k w p s
+<a name="line-145"></a>
+<a name="line-146"></a><a name="prefixes"></a><font color=Blue>prefixes</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Bool
+<a name="line-147"></a>[]     <font color=Cyan>`prefixes`</font>   ys   <font color=Red>=</font> True
+<a name="line-148"></a><a name="prefixes"></a><font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Cyan>`prefixes`</font> <font color=Cyan>(</font>y<font color=Red><b>:</b></font>ys<font color=Cyan>)</font> <font color=Red>=</font> x<font color=Cyan>==</font>y <font color=Cyan>&amp;&amp;</font> xs <font color=Cyan>`prefixes`</font> ys
+<a name="line-149"></a><a name="prefixes"></a><font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Cyan>`prefixes`</font>   []   <font color=Red>=</font> False <font color=Blue>--error "unexpected EOF in prefix"</font>
+<a name="line-150"></a>
+<a name="line-151"></a><a name="textUntil"></a><font color=Blue>textUntil</font> close tok acc pos p [] k <font color=Red>=</font>
+<a name="line-152"></a>    lexerror <font color=Cyan>(</font><font color=Magenta>"unexpected EOF while looking for closing token "</font><font color=Cyan>++</font>close
+<a name="line-153"></a>              <font color=Cyan>++</font><font color=Magenta>"\n  to match the opening token in "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font> p
+<a name="line-154"></a><font color=Blue>textUntil</font> close tok acc pos p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font> k
+<a name="line-155"></a>    <font color=Red>|</font> close <font color=Cyan>`prefixes`</font> <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>  <font color=Red>=</font> emit <font color=Cyan>(</font>TokFreeText <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font>
+<a name="line-156"></a>                                 emit tok p<font color=Red><b>:</b></font>
+<a name="line-157"></a>                                 skip <font color=Cyan>(</font>length close<font color=Blue>-</font><font color=Magenta>1</font><font color=Cyan>)</font> <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
+<a name="line-158"></a>    <font color=Red>|</font> isSpace s  <font color=Red>=</font> textUntil close tok <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>white s p<font color=Cyan>)</font> ss k
+<a name="line-159"></a>    <font color=Red>|</font> otherwise  <font color=Red>=</font> textUntil close tok <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
+<a name="line-160"></a>
+<a name="line-161"></a><a name="textOrRefUntil"></a><font color=Blue>textOrRefUntil</font> close tok acc pos p [] k <font color=Red>=</font>
+<a name="line-162"></a>    lexerror <font color=Cyan>(</font><font color=Magenta>"unexpected EOF while looking for closing token "</font><font color=Cyan>++</font>close
+<a name="line-163"></a>              <font color=Cyan>++</font><font color=Magenta>"\n  to match the opening token in "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font> p
+<a name="line-164"></a><font color=Blue>textOrRefUntil</font> close tok acc pos p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font> k
+<a name="line-165"></a>    <font color=Red>|</font> close <font color=Cyan>`prefixes`</font> <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>  <font color=Red>=</font> emit <font color=Cyan>(</font>TokFreeText <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font>
+<a name="line-166"></a>                                 emit tok p<font color=Red><b>:</b></font>
+<a name="line-167"></a>                                 skip <font color=Cyan>(</font>length close<font color=Blue>-</font><font color=Magenta>1</font><font color=Cyan>)</font> <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
+<a name="line-168"></a>    <font color=Red>|</font> s<font color=Cyan>==</font><font color=Magenta>'&amp;'</font>     <font color=Red>=</font> <font color=Cyan>(</font><font color=Green><u>if</u></font> not <font color=Cyan>(</font>null acc<font color=Cyan>)</font>
+<a name="line-169"></a>                       <font color=Green><u>then</u></font> <font color=Cyan>(</font>emit <font color=Cyan>(</font>TokFreeText <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font><font color=Cyan>)</font>
+<a name="line-170"></a>                       <font color=Green><u>else</u></font> id<font color=Cyan>)</font>
+<a name="line-171"></a>                   <font color=Cyan>(</font>emit TokAmp p<font color=Red><b>:</b></font>
+<a name="line-172"></a>                    textUntil <font color=Magenta>";"</font> TokSemi <font color=Magenta>""</font> p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-173"></a>                        <font color=Cyan>(</font><font color=Red>\</font>p' i<font color=Red>-&gt;</font> textOrRefUntil close tok <font color=Magenta>""</font> p p' i k<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-174"></a>    <font color=Red>|</font> isSpace s  <font color=Red>=</font> textOrRefUntil close tok <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>white s p<font color=Cyan>)</font> ss k
+<a name="line-175"></a>    <font color=Red>|</font> otherwise  <font color=Red>=</font> textOrRefUntil close tok <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
+<a name="line-176"></a>
+<a name="line-177"></a><font color=Blue>----</font>
+<a name="line-178"></a>
+<a name="line-179"></a><a name="xmlLex"></a><font color=Blue>-- | The first argument to 'xmlLex' is the filename (used for source positions,</font>
+<a name="line-180"></a><font color=Blue>--   especially in error messages), and the second is the string content of</font>
+<a name="line-181"></a><font color=Blue>--   the XML file.</font>
+<a name="line-182"></a><font color=Blue>xmlLex</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
+<a name="line-183"></a><font color=Blue>xmlLex</font> filename <font color=Red>=</font> xmlAny [] <font color=Cyan>(</font>posInNewCxt filename Nothing<font color=Cyan>)</font>
+<a name="line-184"></a>
+<a name="line-185"></a><a name="xmlReLex"></a><font color=Blue>-- | 'xmlReLex' is used when the parser expands a macro (PE reference).</font>
+<a name="line-186"></a><font color=Blue>--    The expansion of the macro must be re-lexed as if for the first time.</font>
+<a name="line-187"></a><font color=Blue>xmlReLex</font> <font color=Red>::</font> Posn <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
+<a name="line-188"></a><font color=Blue>xmlReLex</font> p s
+<a name="line-189"></a>      <font color=Red>|</font> <font color=Magenta>"INCLUDE"</font>  <font color=Cyan>`prefixes`</font> s  <font color=Red>=</font> emit <font color=Cyan>(</font>TokSection INCLUDEx<font color=Cyan>)</font> p<font color=Red><b>:</b></font> k <font color=Magenta>7</font>
+<a name="line-190"></a>      <font color=Red>|</font> <font color=Magenta>"IGNORE"</font>   <font color=Cyan>`prefixes`</font> s  <font color=Red>=</font> emit <font color=Cyan>(</font>TokSection IGNOREx<font color=Cyan>)</font> p<font color=Red><b>:</b></font>  k <font color=Magenta>6</font>
+<a name="line-191"></a>      <font color=Red>|</font> otherwise <font color=Red>=</font> blank xmlAny [] p s
+<a name="line-192"></a>  <font color=Green><u>where</u></font>
+<a name="line-193"></a>    k n <font color=Red>=</font> skip n p s <font color=Cyan>(</font>blank xmlAny []<font color=Cyan>)</font>
+<a name="line-194"></a>
+<a name="line-195"></a><a name="reLexEntityValue"></a><font color=Blue>-- | 'reLexEntityValue' is used solely within parsing an entityvalue.</font>
+<a name="line-196"></a><font color=Blue>--   Normally, a PERef is logically separated from its surroundings by</font>
+<a name="line-197"></a><font color=Blue>--   whitespace.  But in an entityvalue, a PERef can be juxtaposed to</font>
+<a name="line-198"></a><font color=Blue>--   an identifier, so the expansion forms a new identifier.</font>
+<a name="line-199"></a><font color=Blue>--   Thus the need to rescan the whole text for possible PERefs.</font>
+<a name="line-200"></a><font color=Blue>reLexEntityValue</font> <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Maybe String<font color=Cyan>)</font> <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
+<a name="line-201"></a><font color=Blue>reLexEntityValue</font> lookup p s <font color=Red>=</font>
+<a name="line-202"></a>    textOrRefUntil <font color=Magenta>"%"</font> TokNull [] p p <font color=Cyan>(</font>expand s<font color=Cyan>++</font><font color=Magenta>"%"</font><font color=Cyan>)</font> <font color=Cyan>(</font>xmlAny []<font color=Cyan>)</font>
+<a name="line-203"></a>  <font color=Green><u>where</u></font>
+<a name="line-204"></a>    expand []       <font color=Red>=</font> []
+<a name="line-205"></a>    expand <font color=Cyan>(</font><font color=Magenta>'%'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>sym<font color=Cyan>,</font>rest<font color=Cyan>)</font> <font color=Red>=</font> break <font color=Cyan>(</font><font color=Cyan>==</font><font color=Magenta>';'</font><font color=Cyan>)</font> ss <font color=Green><u>in</u></font>
+<a name="line-206"></a>                      <font color=Green><u>case</u></font> lookup sym <font color=Green><u>of</u></font>
+<a name="line-207"></a>                        Just val <font color=Red>-&gt;</font> expand val <font color=Cyan>++</font> expand <font color=Cyan>(</font>tail rest<font color=Cyan>)</font>
+<a name="line-208"></a>                        Nothing  <font color=Red>-&gt;</font> <font color=Magenta>"%"</font><font color=Cyan>++</font>sym<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>++</font> expand <font color=Cyan>(</font>tail rest<font color=Cyan>)</font> <font color=Blue>-- hmmm</font>
+<a name="line-209"></a>    expand <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>   <font color=Red>=</font> s<font color=Red><b>:</b></font> expand ss
+<a name="line-210"></a>
+<a name="line-211"></a><font color=Blue>--xmltop :: Posn -&gt; String -&gt; [Token]</font>
+<a name="line-212"></a><font color=Blue>--xmltop p [] = []</font>
+<a name="line-213"></a><font color=Blue>--xmltop p s</font>
+<a name="line-214"></a><font color=Blue>--    | "&lt;?"   `prefixes` s = emit TokPIOpen p:      next 2 (xmlPI [InTag "&lt;?...?&gt;"])</font>
+<a name="line-215"></a><font color=Blue>--    | "&lt;!--" `prefixes` s = emit TokCommentOpen p: next 4 (xmlComment [])</font>
+<a name="line-216"></a><font color=Blue>--    | "&lt;!"   `prefixes` s = emit TokSpecialOpen p: next 2 (xmlSpecial [InTag "&lt;!...&gt;"])</font>
+<a name="line-217"></a><font color=Blue>--    | otherwise           = lexerror "expected &lt;?xml?&gt; or &lt;!DOCTYPE&gt;" p</font>
+<a name="line-218"></a><font color=Blue>--  where next n k = skip n p s k</font>
+<a name="line-219"></a>
+<a name="line-220"></a><a name="xmlPI"></a><font color=Blue>xmlPI</font>      w p s <font color=Red>=</font> xmlName p s <font color=Magenta>"name of processor in &lt;? ?&gt;"</font> <font color=Cyan>(</font>blank xmlPIEnd w<font color=Cyan>)</font>
+<a name="line-221"></a><a name="xmlPIEnd"></a><font color=Blue>xmlPIEnd</font>   w p s <font color=Red>=</font> textUntil <font color=Magenta>"?&gt;"</font>  TokPIClose <font color=Magenta>""</font> p p s <font color=Cyan>(</font>blank xmlAny <font color=Cyan>(</font>tail w<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-222"></a><a name="xmlComment"></a><font color=Blue>xmlComment</font> w p s <font color=Red>=</font> textUntil <font color=Magenta>"--&gt;"</font> TokCommentClose <font color=Magenta>""</font> p p s <font color=Cyan>(</font>blank xmlAny w<font color=Cyan>)</font>
+<a name="line-223"></a>
+<a name="line-224"></a><a name="xmlAny"></a><font color=Blue>-- Note: the order of the clauses in xmlAny is very important.</font>
+<a name="line-225"></a><font color=Blue>-- Some matches must precede the NotInTag test, the rest must follow it.</font>
+<a name="line-226"></a><font color=Blue>xmlAny</font> <font color=Red>::</font> <font color=Red>[</font>Where<font color=Red>]</font> <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
+<a name="line-227"></a><font color=Blue>xmlAny</font>  <font color=Cyan>(</font>InTag t<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font>  p [] <font color=Red>=</font> lexerror <font color=Cyan>(</font><font color=Magenta>"unexpected EOF within "</font><font color=Cyan>++</font>t<font color=Cyan>)</font> p
+<a name="line-228"></a><font color=Blue>xmlAny</font>          <font color=Green><u>_</u></font>    p [] <font color=Red>=</font> []
+<a name="line-229"></a><font color=Blue>xmlAny</font> w p s<font color=Red>@</font><font color=Cyan>(</font><font color=Magenta>'&lt;'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
+<a name="line-230"></a>    <font color=Red>|</font> <font color=Magenta>"?"</font>   <font color=Cyan>`prefixes`</font> ss <font color=Red>=</font> emit TokPIOpen p<font color=Red><b>:</b></font>
+<a name="line-231"></a>                                         skip <font color=Magenta>2</font> p s <font color=Cyan>(</font>xmlPI <font color=Cyan>(</font>InTag <font color=Magenta>"&lt;?...?&gt;"</font><font color=Red><b>:</b></font>w<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-232"></a>    <font color=Red>|</font> <font color=Magenta>"!--"</font> <font color=Cyan>`prefixes`</font> ss <font color=Red>=</font> emit TokCommentOpen p<font color=Red><b>:</b></font> skip <font color=Magenta>4</font> p s <font color=Cyan>(</font>xmlComment w<font color=Cyan>)</font>
+<a name="line-233"></a>    <font color=Red>|</font> <font color=Magenta>"!["</font>  <font color=Cyan>`prefixes`</font> ss <font color=Red>=</font> emit TokSectionOpen p<font color=Red><b>:</b></font> skip <font color=Magenta>3</font> p s <font color=Cyan>(</font>xmlSection w<font color=Cyan>)</font>
+<a name="line-234"></a>    <font color=Red>|</font> <font color=Magenta>"!"</font>   <font color=Cyan>`prefixes`</font> ss <font color=Red>=</font> emit TokSpecialOpen p<font color=Red><b>:</b></font>
+<a name="line-235"></a>                                     skip <font color=Magenta>2</font> p s <font color=Cyan>(</font>xmlSpecial <font color=Cyan>(</font>InTag <font color=Magenta>"&lt;!...&gt;"</font><font color=Red><b>:</b></font>w<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-236"></a>    <font color=Red>|</font> <font color=Magenta>"/"</font>   <font color=Cyan>`prefixes`</font> ss <font color=Red>=</font> emit TokEndOpen p<font color=Red><b>:</b></font> 
+<a name="line-237"></a>                                    skip <font color=Magenta>2</font> p s <font color=Cyan>(</font>xmlTag <font color=Cyan>(</font>InTag <font color=Magenta>"&lt;/...&gt;"</font><font color=Red><b>:</b></font>tail w<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-238"></a>    <font color=Red>|</font> otherwise           <font color=Red>=</font> emit TokAnyOpen p<font color=Red><b>:</b></font>
+<a name="line-239"></a>                                 skip <font color=Magenta>1</font> p s <font color=Cyan>(</font>xmlTag <font color=Cyan>(</font>InTag <font color=Magenta>"&lt;...&gt;"</font><font color=Red><b>:</b></font>NotInTag<font color=Red><b>:</b></font>w<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-240"></a><font color=Blue>xmlAny</font> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Red><b>:</b></font>w<font color=Cyan>)</font> p s<font color=Red>@</font><font color=Cyan>(</font><font color=Magenta>'/'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
+<a name="line-241"></a>    <font color=Red>|</font> <font color=Magenta>"&gt;"</font>   <font color=Cyan>`prefixes`</font> ss <font color=Red>=</font> emit TokEndClose p<font color=Red><b>:</b></font> skip <font color=Magenta>2</font> p s <font color=Cyan>(</font>xmlAny w<font color=Cyan>)</font>
+<a name="line-242"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>'&amp;'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokAmp p<font color=Red><b>:</b></font>      textUntil <font color=Magenta>";"</font> TokSemi <font color=Magenta>""</font> p
+<a name="line-243"></a>                                                     <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss <font color=Cyan>(</font>xmlAny w<font color=Cyan>)</font>
+<a name="line-244"></a><font color=Blue>xmlAny</font> w<font color=Red>@</font><font color=Cyan>(</font>NotInTag<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> p s <font color=Red>=</font> xmlContent <font color=Magenta>""</font> w p p s
+<a name="line-245"></a><font color=Blue>-- everything below here is implicitly InTag.</font>
+<a name="line-246"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>'&gt;'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokAnyClose p<font color=Red><b>:</b></font> xmlAny <font color=Cyan>(</font>tail w<font color=Cyan>)</font> <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-247"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>'['</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokSqOpen p<font color=Red><b>:</b></font>
+<a name="line-248"></a>                                 blank xmlAny <font color=Cyan>(</font>InTag <font color=Magenta>"[...]"</font><font color=Red><b>:</b></font>w<font color=Cyan>)</font> <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-249"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>']'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
+<a name="line-250"></a>    <font color=Red>|</font> <font color=Magenta>"]&gt;"</font> <font color=Cyan>`prefixes`</font> ss  <font color=Red>=</font>
+<a name="line-251"></a>                 emit TokSectionClose p<font color=Red><b>:</b></font>  skip <font color=Magenta>3</font> p <font color=Cyan>(</font><font color=Magenta>']'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Cyan>(</font>xmlAny <font color=Cyan>(</font>tail w<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-252"></a>    <font color=Red>|</font> otherwise  <font color=Red>=</font>    emit TokSqClose p<font color=Red><b>:</b></font>  blank xmlAny <font color=Cyan>(</font>tail w<font color=Cyan>)</font> <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-253"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>'('</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokBraOpen p<font color=Red><b>:</b></font>
+<a name="line-254"></a>                                 blank xmlAny <font color=Cyan>(</font>InTag <font color=Magenta>"(...)"</font><font color=Red><b>:</b></font>w<font color=Cyan>)</font> <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-255"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>')'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokBraClose p<font color=Red><b>:</b></font> blank xmlAny <font color=Cyan>(</font>tail w<font color=Cyan>)</font> <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-256"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>'='</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokEqual p<font color=Red><b>:</b></font>    blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-257"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>'*'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokStar p<font color=Red><b>:</b></font>     blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-258"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>'+'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokPlus p<font color=Red><b>:</b></font>     blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-259"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>'?'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokQuery p<font color=Red><b>:</b></font>    blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-260"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>'|'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokPipe p<font color=Red><b>:</b></font>     blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-261"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>'%'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokPercent p<font color=Red><b>:</b></font>  blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-262"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>';'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokSemi p<font color=Red><b>:</b></font>     blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-263"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>','</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokComma p<font color=Red><b>:</b></font>    blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-264"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokHash p<font color=Red><b>:</b></font>     blank xmlAny w <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-265"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>'"'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokQuote p<font color=Red><b>:</b></font>    textOrRefUntil <font color=Magenta>"\""</font> TokQuote <font color=Magenta>""</font> p1
+<a name="line-266"></a>                                                          p1 ss <font color=Cyan>(</font>xmlAny w<font color=Cyan>)</font>
+<a name="line-267"></a>                                             <font color=Green><u>where</u></font> p1 <font color=Red>=</font> addcol <font color=Magenta>1</font> p
+<a name="line-268"></a><font color=Blue>xmlAny</font> w p <font color=Cyan>(</font><font color=Magenta>'\''</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit TokQuote p<font color=Red><b>:</b></font>   textOrRefUntil <font color=Magenta>"'"</font> TokQuote <font color=Magenta>""</font> p1
+<a name="line-269"></a>                                                          p1 ss <font color=Cyan>(</font>xmlAny w<font color=Cyan>)</font>
+<a name="line-270"></a>                                             <font color=Green><u>where</u></font> p1 <font color=Red>=</font> addcol <font color=Magenta>1</font> p
+<a name="line-271"></a><font color=Blue>xmlAny</font> w p s
+<a name="line-272"></a>    <font color=Red>|</font> isSpace <font color=Cyan>(</font>head s<font color=Cyan>)</font>     <font color=Red>=</font> blank xmlAny w p s
+<a name="line-273"></a>    <font color=Red>|</font> isAlphaNum <font color=Cyan>(</font>head s<font color=Cyan>)</font> <font color=Cyan>||</font> <font color=Cyan>(</font>head s<font color=Cyan>)</font><font color=Cyan>`elem`</font><font color=Magenta>":_"</font>
+<a name="line-274"></a>                           <font color=Red>=</font> xmlName p s <font color=Magenta>"some kind of name"</font> <font color=Cyan>(</font>blank xmlAny w<font color=Cyan>)</font>
+<a name="line-275"></a>    <font color=Red>|</font> otherwise            <font color=Red>=</font> lexerror <font color=Cyan>(</font><font color=Magenta>"unrecognised token: "</font><font color=Cyan>++</font>take <font color=Magenta>4</font> s<font color=Cyan>)</font> p
+<a name="line-276"></a>
+<a name="line-277"></a><a name="xmlTag"></a><font color=Blue>xmlTag</font> w p s <font color=Red>=</font> xmlName p s <font color=Magenta>"tagname for element in &lt; &gt;"</font> <font color=Cyan>(</font>blank xmlAny w<font color=Cyan>)</font>
+<a name="line-278"></a>
+<a name="line-279"></a><a name="xmlSection"></a><font color=Blue>xmlSection</font> <font color=Red>=</font> blank xmlSection0
+<a name="line-280"></a>  <font color=Green><u>where</u></font>
+<a name="line-281"></a>    xmlSection0 w p s
+<a name="line-282"></a>      <font color=Red>|</font> <font color=Magenta>"CDATA["</font>   <font color=Cyan>`prefixes`</font> s  <font color=Red>=</font> emit <font color=Cyan>(</font>TokSection CDATAx<font color=Cyan>)</font> p<font color=Red><b>:</b></font>  accum w p s <font color=Magenta>6</font>
+<a name="line-283"></a>      <font color=Red>|</font> <font color=Magenta>"INCLUDE"</font>  <font color=Cyan>`prefixes`</font> s  <font color=Red>=</font> emit <font color=Cyan>(</font>TokSection INCLUDEx<font color=Cyan>)</font> p<font color=Red><b>:</b></font>    k w p s <font color=Magenta>7</font>
+<a name="line-284"></a>      <font color=Red>|</font> <font color=Magenta>"IGNORE"</font>   <font color=Cyan>`prefixes`</font> s  <font color=Red>=</font> emit <font color=Cyan>(</font>TokSection IGNOREx<font color=Cyan>)</font> p<font color=Red><b>:</b></font>     k w p s <font color=Magenta>6</font>
+<a name="line-285"></a>      <font color=Red>|</font> <font color=Magenta>"%"</font>        <font color=Cyan>`prefixes`</font> s  <font color=Red>=</font> emit TokPercent p<font color=Red><b>:</b></font>               k w p s <font color=Magenta>1</font>
+<a name="line-286"></a>      <font color=Red>|</font> otherwise <font color=Red>=</font> lexerror <font color=Cyan>(</font><font color=Magenta>"expected CDATA, IGNORE, or INCLUDE, but got "</font>
+<a name="line-287"></a>                             <font color=Cyan>++</font>take <font color=Magenta>7</font> s<font color=Cyan>)</font> p
+<a name="line-288"></a>    accum w p s n <font color=Red>=</font>
+<a name="line-289"></a>      <font color=Green><u>let</u></font> p0 <font color=Red>=</font> addcol n p <font color=Green><u>in</u></font>
+<a name="line-290"></a>      textUntil <font color=Magenta>"]]&gt;"</font> TokSectionClose <font color=Magenta>""</font> p0 p0 <font color=Cyan>(</font>drop n s<font color=Cyan>)</font> <font color=Cyan>(</font>blank xmlAny w<font color=Cyan>)</font>
+<a name="line-291"></a>    k w p s n <font color=Red>=</font>
+<a name="line-292"></a>      skip n p s <font color=Cyan>(</font>xmlAny <font color=Cyan>(</font><font color=Blue>{-InTag "&lt;![section[ ... ]]&gt;": -}</font>w<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-293"></a>
+<a name="line-294"></a><a name="xmlSpecial"></a><font color=Blue>xmlSpecial</font> w p s
+<a name="line-295"></a>    <font color=Red>|</font> <font color=Magenta>"DOCTYPE"</font>  <font color=Cyan>`prefixes`</font> s <font color=Red>=</font> emit <font color=Cyan>(</font>TokSpecial DOCTYPEx<font color=Cyan>)</font>  p<font color=Red><b>:</b></font> k <font color=Magenta>7</font>
+<a name="line-296"></a>    <font color=Red>|</font> <font color=Magenta>"ELEMENT"</font>  <font color=Cyan>`prefixes`</font> s <font color=Red>=</font> emit <font color=Cyan>(</font>TokSpecial ELEMENTx<font color=Cyan>)</font>  p<font color=Red><b>:</b></font> k <font color=Magenta>7</font>
+<a name="line-297"></a>    <font color=Red>|</font> <font color=Magenta>"ATTLIST"</font>  <font color=Cyan>`prefixes`</font> s <font color=Red>=</font> emit <font color=Cyan>(</font>TokSpecial ATTLISTx<font color=Cyan>)</font>  p<font color=Red><b>:</b></font> k <font color=Magenta>7</font>
+<a name="line-298"></a>    <font color=Red>|</font> <font color=Magenta>"ENTITY"</font>   <font color=Cyan>`prefixes`</font> s <font color=Red>=</font> emit <font color=Cyan>(</font>TokSpecial ENTITYx<font color=Cyan>)</font>   p<font color=Red><b>:</b></font> k <font color=Magenta>6</font>
+<a name="line-299"></a>    <font color=Red>|</font> <font color=Magenta>"NOTATION"</font> <font color=Cyan>`prefixes`</font> s <font color=Red>=</font> emit <font color=Cyan>(</font>TokSpecial NOTATIONx<font color=Cyan>)</font> p<font color=Red><b>:</b></font> k <font color=Magenta>8</font>
+<a name="line-300"></a>    <font color=Red>|</font> otherwise <font color=Red>=</font> lexerror
+<a name="line-301"></a>                    <font color=Cyan>(</font><font color=Magenta>"expected DOCTYPE, ELEMENT, ENTITY, ATTLIST, or NOTATION,"</font>
+<a name="line-302"></a>                    <font color=Cyan>++</font><font color=Magenta>" but got "</font><font color=Cyan>++</font>take <font color=Magenta>7</font> s<font color=Cyan>)</font> p
+<a name="line-303"></a>  <font color=Green><u>where</u></font> k n <font color=Red>=</font> skip n p s <font color=Cyan>(</font>blank xmlAny w<font color=Cyan>)</font>
+<a name="line-304"></a>
+<a name="line-305"></a><a name="xmlName"></a><font color=Blue>xmlName</font> p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font> cxt k
+<a name="line-306"></a>    <font color=Red>|</font> isAlphaNum s <font color=Cyan>||</font> s<font color=Cyan>==</font><font color=Magenta>':'</font> <font color=Cyan>||</font> s<font color=Cyan>==</font><font color=Magenta>'_'</font>  <font color=Red>=</font> gatherName <font color=Cyan>(</font>s<font color=Red><b>:</b></font>[]<font color=Cyan>)</font> p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
+<a name="line-307"></a>    <font color=Red>|</font> otherwise   <font color=Red>=</font> lexerror <font color=Cyan>(</font><font color=Magenta>"expected a "</font><font color=Cyan>++</font>cxt<font color=Cyan>++</font><font color=Magenta>", but got char "</font><font color=Cyan>++</font>show s<font color=Cyan>)</font> p
+<a name="line-308"></a>  <font color=Green><u>where</u></font>
+<a name="line-309"></a>    gatherName acc pos p [] k <font color=Red>=</font>
+<a name="line-310"></a>        emit <font color=Cyan>(</font>TokName <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> k p []
+<a name="line-311"></a>    <font color=Blue>--  lexerror ("unexpected EOF in name at "++show pos) p</font>
+<a name="line-312"></a>    gatherName acc pos p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font> k
+<a name="line-313"></a>        <font color=Red>|</font> isAlphaNum s <font color=Cyan>||</font> s <font color=Cyan>`elem`</font> <font color=Magenta>".-_:"</font>
+<a name="line-314"></a>                      <font color=Red>=</font> gatherName <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
+<a name="line-315"></a>        <font color=Red>|</font> otherwise   <font color=Red>=</font> emit <font color=Cyan>(</font>TokName <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> k p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
+<a name="line-316"></a><font color=Blue>xmlName</font> p [] cxt k <font color=Red>=</font> lexerror <font color=Cyan>(</font><font color=Magenta>"expected a "</font><font color=Cyan>++</font>cxt<font color=Cyan>++</font><font color=Magenta>", but got end of input"</font><font color=Cyan>)</font> p
+<a name="line-317"></a>
+<a name="line-318"></a><a name="xmlContent"></a><font color=Blue>xmlContent</font> acc w pos p [] <font color=Red>=</font> <font color=Green><u>if</u></font> all isSpace acc <font color=Green><u>then</u></font> []
+<a name="line-319"></a>                            <font color=Green><u>else</u></font> lexerror <font color=Magenta>"unexpected EOF between tags"</font> p
+<a name="line-320"></a><font color=Blue>xmlContent</font> acc w pos p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
+<a name="line-321"></a>    <font color=Red>|</font> elem s <font color=Magenta>"&lt;&amp;"</font>    <font color=Red>=</font> <font color=Blue>{- if all isSpace acc then xmlAny w p (s:ss) else -}</font>
+<a name="line-322"></a>                       emit <font color=Cyan>(</font>TokFreeText <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> xmlAny w p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
+<a name="line-323"></a>    <font color=Red>|</font> isSpace s      <font color=Red>=</font> xmlContent <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> w pos <font color=Cyan>(</font>white s p<font color=Cyan>)</font> ss
+<a name="line-324"></a>    <font color=Red>|</font> otherwise      <font color=Red>=</font> xmlContent <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> w pos <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-325"></a>
+<a name="line-326"></a>
+<a name="line-327"></a>
+<a name="line-328"></a><font color=Blue>--ident :: (String-&gt;TokenT) -&gt;</font>
+<a name="line-329"></a><font color=Blue>--          Posn -&gt; String -&gt; [String] -&gt;</font>
+<a name="line-330"></a><font color=Blue>--         (Posn-&gt;String-&gt;[String]-&gt;[Token]) -&gt; [Token]</font>
+<a name="line-331"></a><font color=Blue>--ident tok p s ss k =</font>
+<a name="line-332"></a><font color=Blue>--    let (name,s0) = span (\c-&gt; isAlphaNum c || c `elem` "`-_#.'/\\") s</font>
+<a name="line-333"></a><font color=Blue>--    in emit (tok name) p: skip (length name) p s ss k</font>
 </pre>
+</body>
 </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
@@ -1,667 +1,673 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<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>OneOfN <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>XmlContent
-<a name="(line4)"></a>
-<a name="(line5)"></a><a name="OneOf2"></a><font color=Green><u>data</u></font> OneOf2 a b
-<a name="(line6)"></a>    <font color=Red>=</font> OneOf2 a <font color=Red>|</font> TwoOf2 b
-<a name="(line7)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<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 <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>
-<a name="(line15)"></a>
-<a name="(line16)"></a>
-<a name="(line17)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>)</font>
-<a name="(line18)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf2 a b<font color=Cyan>)</font>
-<a name="(line19)"></a>  <font color=Green><u>where</u></font>
-<a name="(line20)"></a>    parseContents <font color=Red>=</font>
-<a name="(line21)"></a>        <font color=Cyan>(</font>choice OneOf2 <font color=Cyan>$</font> choice TwoOf2
-<a name="(line22)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf2"</font><font color=Cyan>)</font>
-<a name="(line23)"></a>    toContents <font color=Cyan>(</font>OneOf2 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line24)"></a>    toContents <font color=Cyan>(</font>TwoOf2 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line25)"></a>
-<a name="(line26)"></a><a name="OneOf3"></a><font color=Blue>----</font>
-<a name="(line27)"></a><a name="OneOf3"></a><font color=Green><u>data</u></font> OneOf3 a b c
-<a name="(line28)"></a>    <font color=Red>=</font> OneOf3 a <font color=Red>|</font> TwoOf3 b <font color=Red>|</font> ThreeOf3 c
-<a name="(line29)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<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 <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>
-<a name="(line37)"></a>  <font color=Green><u>where</u></font>
-<a name="(line38)"></a>    parseContents <font color=Red>=</font>
-<a name="(line39)"></a>        <font color=Cyan>(</font>choice OneOf3 <font color=Cyan>$</font> choice TwoOf3 <font color=Cyan>$</font> choice ThreeOf3
-<a name="(line40)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf3"</font><font color=Cyan>)</font>
-<a name="(line41)"></a>    toContents <font color=Cyan>(</font>OneOf3 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line42)"></a>    toContents <font color=Cyan>(</font>TwoOf3 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line43)"></a>    toContents <font color=Cyan>(</font>ThreeOf3 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line44)"></a>
-<a name="(line45)"></a><a name="OneOf4"></a><font color=Blue>----</font>
-<a name="(line46)"></a><a name="OneOf4"></a><font color=Green><u>data</u></font> OneOf4 a b c d
-<a name="(line47)"></a>    <font color=Red>=</font> OneOf4 a <font color=Red>|</font> TwoOf4 b <font color=Red>|</font> ThreeOf4 c <font color=Red>|</font> FourOf4 d
-<a name="(line48)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<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 <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>
-<a name="(line56)"></a>  <font color=Green><u>where</u></font>
-<a name="(line57)"></a>    parseContents <font color=Red>=</font>
-<a name="(line58)"></a>        <font color=Cyan>(</font>choice OneOf4 <font color=Cyan>$</font> choice TwoOf4 <font color=Cyan>$</font> choice ThreeOf4 <font color=Cyan>$</font> choice FourOf4
-<a name="(line59)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf4"</font><font color=Cyan>)</font>
-<a name="(line60)"></a>    toContents <font color=Cyan>(</font>OneOf4 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line61)"></a>    toContents <font color=Cyan>(</font>TwoOf4 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line62)"></a>    toContents <font color=Cyan>(</font>ThreeOf4 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line63)"></a>    toContents <font color=Cyan>(</font>FourOf4 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line64)"></a>
-<a name="(line65)"></a><a name="OneOf5"></a><font color=Blue>----</font>
-<a name="(line66)"></a><a name="OneOf5"></a><font color=Green><u>data</u></font> OneOf5 a b c d e
-<a name="(line67)"></a>    <font color=Red>=</font> OneOf5 a <font color=Red>|</font> TwoOf5 b <font color=Red>|</font> ThreeOf5 c <font color=Red>|</font> FourOf5 d <font color=Red>|</font> FiveOf5 e
-<a name="(line68)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<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 <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>
-<a name="(line76)"></a>  <font color=Green><u>where</u></font>
-<a name="(line77)"></a>    parseContents <font color=Red>=</font>
-<a name="(line78)"></a>        <font color=Cyan>(</font>choice OneOf5 <font color=Cyan>$</font> choice TwoOf5 <font color=Cyan>$</font> choice ThreeOf5 <font color=Cyan>$</font> choice FourOf5
-<a name="(line79)"></a>        <font color=Cyan>$</font> choice FiveOf5
-<a name="(line80)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf5"</font><font color=Cyan>)</font>
-<a name="(line81)"></a>    toContents <font color=Cyan>(</font>OneOf5 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line82)"></a>    toContents <font color=Cyan>(</font>TwoOf5 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line83)"></a>    toContents <font color=Cyan>(</font>ThreeOf5 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line84)"></a>    toContents <font color=Cyan>(</font>FourOf5 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line85)"></a>    toContents <font color=Cyan>(</font>FiveOf5 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line86)"></a>
-<a name="(line87)"></a><a name="OneOf6"></a><font color=Blue>----</font>
-<a name="(line88)"></a><a name="OneOf6"></a><font color=Green><u>data</u></font> OneOf6 a b c d e f
-<a name="(line89)"></a>    <font color=Red>=</font> OneOf6 a <font color=Red>|</font> TwoOf6 b <font color=Red>|</font> ThreeOf6 c <font color=Red>|</font> FourOf6 d <font color=Red>|</font> FiveOf6 e <font color=Red>|</font> SixOf6 f
-<a name="(line90)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line91)"></a>
-<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 <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>
-<a name="(line99)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf6 a b c d e f<font color=Cyan>)</font>
-<a name="(line100)"></a>  <font color=Green><u>where</u></font>
-<a name="(line101)"></a>    parseContents <font color=Red>=</font>
-<a name="(line102)"></a>        <font color=Cyan>(</font>choice OneOf6 <font color=Cyan>$</font> choice TwoOf6 <font color=Cyan>$</font> choice ThreeOf6 <font color=Cyan>$</font> choice FourOf6
-<a name="(line103)"></a>        <font color=Cyan>$</font> choice FiveOf6 <font color=Cyan>$</font> choice SixOf6
-<a name="(line104)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf6"</font><font color=Cyan>)</font>
-<a name="(line105)"></a>    toContents <font color=Cyan>(</font>OneOf6 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line106)"></a>    toContents <font color=Cyan>(</font>TwoOf6 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line107)"></a>    toContents <font color=Cyan>(</font>ThreeOf6 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line108)"></a>    toContents <font color=Cyan>(</font>FourOf6 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line109)"></a>    toContents <font color=Cyan>(</font>FiveOf6 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line110)"></a>    toContents <font color=Cyan>(</font>SixOf6 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line111)"></a>
-<a name="(line112)"></a><a name="OneOf7"></a><font color=Blue>----</font>
-<a name="(line113)"></a><a name="OneOf7"></a><font color=Green><u>data</u></font> OneOf7 a b c d e f g
-<a name="(line114)"></a>    <font color=Red>=</font> OneOf7 a <font color=Red>|</font> TwoOf7 b <font color=Red>|</font> ThreeOf7 c <font color=Red>|</font> FourOf7 d <font color=Red>|</font> FiveOf7 e <font color=Red>|</font> SixOf7 f
-<a name="(line115)"></a>    <font color=Red>|</font> SevenOf7 g
-<a name="(line116)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line117)"></a>
-<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 <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>
-<a name="(line125)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf7 a b c d e f g<font color=Cyan>)</font>
-<a name="(line126)"></a>  <font color=Green><u>where</u></font>
-<a name="(line127)"></a>    parseContents <font color=Red>=</font>
-<a name="(line128)"></a>        <font color=Cyan>(</font>choice OneOf7 <font color=Cyan>$</font> choice TwoOf7 <font color=Cyan>$</font> choice ThreeOf7 <font color=Cyan>$</font> choice FourOf7
-<a name="(line129)"></a>        <font color=Cyan>$</font> choice FiveOf7 <font color=Cyan>$</font> choice SixOf7 <font color=Cyan>$</font> choice SevenOf7
-<a name="(line130)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf7"</font><font color=Cyan>)</font>
-<a name="(line131)"></a>    toContents <font color=Cyan>(</font>OneOf7 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line132)"></a>    toContents <font color=Cyan>(</font>TwoOf7 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line133)"></a>    toContents <font color=Cyan>(</font>ThreeOf7 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line134)"></a>    toContents <font color=Cyan>(</font>FourOf7 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line135)"></a>    toContents <font color=Cyan>(</font>FiveOf7 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line136)"></a>    toContents <font color=Cyan>(</font>SixOf7 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line137)"></a>    toContents <font color=Cyan>(</font>SevenOf7 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line138)"></a>
-<a name="(line139)"></a><a name="OneOf8"></a><font color=Blue>----</font>
-<a name="(line140)"></a><a name="OneOf8"></a><font color=Green><u>data</u></font> OneOf8 a b c d e f g h
-<a name="(line141)"></a>    <font color=Red>=</font> OneOf8 a <font color=Red>|</font> TwoOf8 b <font color=Red>|</font> ThreeOf8 c <font color=Red>|</font> FourOf8 d <font color=Red>|</font> FiveOf8 e <font color=Red>|</font> SixOf8 f
-<a name="(line142)"></a>    <font color=Red>|</font> SevenOf8 g <font color=Red>|</font> EightOf8 h
-<a name="(line143)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line144)"></a>
-<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 <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>
-<a name="(line152)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf8 a b c d e f g h<font color=Cyan>)</font>
-<a name="(line153)"></a>  <font color=Green><u>where</u></font>
-<a name="(line154)"></a>    parseContents <font color=Red>=</font>
-<a name="(line155)"></a>        <font color=Cyan>(</font>choice OneOf8 <font color=Cyan>$</font> choice TwoOf8 <font color=Cyan>$</font> choice ThreeOf8 <font color=Cyan>$</font> choice FourOf8
-<a name="(line156)"></a>        <font color=Cyan>$</font> choice FiveOf8 <font color=Cyan>$</font> choice SixOf8 <font color=Cyan>$</font> choice SevenOf8 <font color=Cyan>$</font> choice EightOf8
-<a name="(line157)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf8"</font><font color=Cyan>)</font>
-<a name="(line158)"></a>    toContents <font color=Cyan>(</font>OneOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line159)"></a>    toContents <font color=Cyan>(</font>TwoOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line160)"></a>    toContents <font color=Cyan>(</font>ThreeOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line161)"></a>    toContents <font color=Cyan>(</font>FourOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line162)"></a>    toContents <font color=Cyan>(</font>FiveOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line163)"></a>    toContents <font color=Cyan>(</font>SixOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line164)"></a>    toContents <font color=Cyan>(</font>SevenOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line165)"></a>    toContents <font color=Cyan>(</font>EightOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line166)"></a>
-<a name="(line167)"></a><a name="OneOf9"></a><font color=Blue>----</font>
-<a name="(line168)"></a><a name="OneOf9"></a><font color=Green><u>data</u></font> OneOf9 a b c d e f g h i
-<a name="(line169)"></a>    <font color=Red>=</font> OneOf9 a <font color=Red>|</font> TwoOf9 b <font color=Red>|</font> ThreeOf9 c <font color=Red>|</font> FourOf9 d <font color=Red>|</font> FiveOf9 e <font color=Red>|</font> SixOf9 f
-<a name="(line170)"></a>    <font color=Red>|</font> SevenOf9 g <font color=Red>|</font> EightOf9 h <font color=Red>|</font> NineOf9 i
-<a name="(line171)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line172)"></a>
-<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 <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>
-<a name="(line180)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf9 a b c d e f g h i<font color=Cyan>)</font>
-<a name="(line181)"></a>  <font color=Green><u>where</u></font>
-<a name="(line182)"></a>    parseContents <font color=Red>=</font>
-<a name="(line183)"></a>        <font color=Cyan>(</font>choice OneOf9 <font color=Cyan>$</font> choice TwoOf9 <font color=Cyan>$</font> choice ThreeOf9 <font color=Cyan>$</font> choice FourOf9
-<a name="(line184)"></a>        <font color=Cyan>$</font> choice FiveOf9 <font color=Cyan>$</font> choice SixOf9 <font color=Cyan>$</font> choice SevenOf9 <font color=Cyan>$</font> choice EightOf9
-<a name="(line185)"></a>        <font color=Cyan>$</font> choice NineOf9
-<a name="(line186)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf9"</font><font color=Cyan>)</font>
-<a name="(line187)"></a>    toContents <font color=Cyan>(</font>OneOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line188)"></a>    toContents <font color=Cyan>(</font>TwoOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line189)"></a>    toContents <font color=Cyan>(</font>ThreeOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line190)"></a>    toContents <font color=Cyan>(</font>FourOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line191)"></a>    toContents <font color=Cyan>(</font>FiveOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line192)"></a>    toContents <font color=Cyan>(</font>SixOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line193)"></a>    toContents <font color=Cyan>(</font>SevenOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line194)"></a>    toContents <font color=Cyan>(</font>EightOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line195)"></a>    toContents <font color=Cyan>(</font>NineOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line196)"></a>
-<a name="(line197)"></a><a name="OneOf10"></a><font color=Blue>----</font>
-<a name="(line198)"></a><a name="OneOf10"></a><font color=Green><u>data</u></font> OneOf10 a b c d e f g h i j
-<a name="(line199)"></a>    <font color=Red>=</font> OneOf10 a <font color=Red>|</font> TwoOf10 b <font color=Red>|</font> ThreeOf10 c <font color=Red>|</font> FourOf10 d <font color=Red>|</font> FiveOf10 e
-<a name="(line200)"></a>    <font color=Red>|</font> SixOf10 f <font color=Red>|</font> SevenOf10 g <font color=Red>|</font> EightOf10 h <font color=Red>|</font> NineOf10 i <font color=Red>|</font> TenOf10 j
-<a name="(line201)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line202)"></a>
-<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 <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>
-<a name="(line210)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf10 a b c d e f g h i j<font color=Cyan>)</font>
-<a name="(line211)"></a>  <font color=Green><u>where</u></font>
-<a name="(line212)"></a>    parseContents <font color=Red>=</font>
-<a name="(line213)"></a>        <font color=Cyan>(</font>choice OneOf10 <font color=Cyan>$</font> choice TwoOf10 <font color=Cyan>$</font> choice ThreeOf10 <font color=Cyan>$</font> choice FourOf10
-<a name="(line214)"></a>        <font color=Cyan>$</font> choice FiveOf10 <font color=Cyan>$</font> choice SixOf10 <font color=Cyan>$</font> choice SevenOf10
-<a name="(line215)"></a>        <font color=Cyan>$</font> choice EightOf10 <font color=Cyan>$</font> choice NineOf10 <font color=Cyan>$</font> choice TenOf10
-<a name="(line216)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf10"</font><font color=Cyan>)</font>
-<a name="(line217)"></a>    toContents <font color=Cyan>(</font>OneOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line218)"></a>    toContents <font color=Cyan>(</font>TwoOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line219)"></a>    toContents <font color=Cyan>(</font>ThreeOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line220)"></a>    toContents <font color=Cyan>(</font>FourOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line221)"></a>    toContents <font color=Cyan>(</font>FiveOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line222)"></a>    toContents <font color=Cyan>(</font>SixOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line223)"></a>    toContents <font color=Cyan>(</font>SevenOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line224)"></a>    toContents <font color=Cyan>(</font>EightOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line225)"></a>    toContents <font color=Cyan>(</font>NineOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line226)"></a>    toContents <font color=Cyan>(</font>TenOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line227)"></a>
-<a name="(line228)"></a><a name="OneOf11"></a><font color=Blue>----</font>
-<a name="(line229)"></a><a name="OneOf11"></a><font color=Green><u>data</u></font> OneOf11 a b c d e f g h i j k
-<a name="(line230)"></a>    <font color=Red>=</font> OneOf11 a <font color=Red>|</font> TwoOf11 b <font color=Red>|</font> ThreeOf11 c <font color=Red>|</font> FourOf11 d <font color=Red>|</font> FiveOf11 e
-<a name="(line231)"></a>    <font color=Red>|</font> SixOf11 f <font color=Red>|</font> SevenOf11 g <font color=Red>|</font> EightOf11 h <font color=Red>|</font> NineOf11 i <font color=Red>|</font> TenOf11 j
-<a name="(line232)"></a>    <font color=Red>|</font> ElevenOf11 k
-<a name="(line233)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line234)"></a>
-<a name="(line235)"></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="(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 <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
-<a name="(line243)"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>)</font>
-<a name="(line244)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf11 a b c d e f g h i j k<font color=Cyan>)</font>
-<a name="(line245)"></a>  <font color=Green><u>where</u></font>
-<a name="(line246)"></a>    parseContents <font color=Red>=</font>
-<a name="(line247)"></a>        <font color=Cyan>(</font>choice OneOf11 <font color=Cyan>$</font> choice TwoOf11 <font color=Cyan>$</font> choice ThreeOf11 <font color=Cyan>$</font> choice FourOf11
-<a name="(line248)"></a>        <font color=Cyan>$</font> choice FiveOf11 <font color=Cyan>$</font> choice SixOf11 <font color=Cyan>$</font> choice SevenOf11
-<a name="(line249)"></a>        <font color=Cyan>$</font> choice EightOf11 <font color=Cyan>$</font> choice NineOf11 <font color=Cyan>$</font> choice TenOf11
-<a name="(line250)"></a>        <font color=Cyan>$</font> choice ElevenOf11
-<a name="(line251)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf11"</font><font color=Cyan>)</font>
-<a name="(line252)"></a>    toContents <font color=Cyan>(</font>OneOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line253)"></a>    toContents <font color=Cyan>(</font>TwoOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line254)"></a>    toContents <font color=Cyan>(</font>ThreeOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line255)"></a>    toContents <font color=Cyan>(</font>FourOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line256)"></a>    toContents <font color=Cyan>(</font>FiveOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line257)"></a>    toContents <font color=Cyan>(</font>SixOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line258)"></a>    toContents <font color=Cyan>(</font>SevenOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line259)"></a>    toContents <font color=Cyan>(</font>EightOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line260)"></a>    toContents <font color=Cyan>(</font>NineOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line261)"></a>    toContents <font color=Cyan>(</font>TenOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line262)"></a>    toContents <font color=Cyan>(</font>ElevenOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line263)"></a>
-<a name="(line264)"></a><a name="OneOf12"></a><font color=Blue>----</font>
-<a name="(line265)"></a><a name="OneOf12"></a><font color=Green><u>data</u></font> OneOf12 a b c d e f g h i j k l
-<a name="(line266)"></a>    <font color=Red>=</font> OneOf12 a <font color=Red>|</font> TwoOf12 b <font color=Red>|</font> ThreeOf12 c <font color=Red>|</font> FourOf12 d <font color=Red>|</font> FiveOf12 e
-<a name="(line267)"></a>    <font color=Red>|</font> SixOf12 f <font color=Red>|</font> SevenOf12 g <font color=Red>|</font> EightOf12 h <font color=Red>|</font> NineOf12 i <font color=Red>|</font> TenOf12 j
-<a name="(line268)"></a>    <font color=Red>|</font> ElevenOf12 k <font color=Red>|</font> TwelveOf12 l
-<a name="(line269)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line270)"></a>
-<a name="(line271)"></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="(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 <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
-<a name="(line279)"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>)</font>
-<a name="(line280)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf12 a b c d e f g h i j k l<font color=Cyan>)</font>
-<a name="(line281)"></a>  <font color=Green><u>where</u></font>
-<a name="(line282)"></a>    parseContents <font color=Red>=</font>
-<a name="(line283)"></a>        <font color=Cyan>(</font>choice OneOf12 <font color=Cyan>$</font> choice TwoOf12 <font color=Cyan>$</font> choice ThreeOf12 <font color=Cyan>$</font> choice FourOf12
-<a name="(line284)"></a>        <font color=Cyan>$</font> choice FiveOf12 <font color=Cyan>$</font> choice SixOf12 <font color=Cyan>$</font> choice SevenOf12
-<a name="(line285)"></a>        <font color=Cyan>$</font> choice EightOf12 <font color=Cyan>$</font> choice NineOf12 <font color=Cyan>$</font> choice TenOf12
-<a name="(line286)"></a>        <font color=Cyan>$</font> choice ElevenOf12 <font color=Cyan>$</font> choice TwelveOf12
-<a name="(line287)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf12"</font><font color=Cyan>)</font>
-<a name="(line288)"></a>    toContents <font color=Cyan>(</font>OneOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line289)"></a>    toContents <font color=Cyan>(</font>TwoOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line290)"></a>    toContents <font color=Cyan>(</font>ThreeOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line291)"></a>    toContents <font color=Cyan>(</font>FourOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line292)"></a>    toContents <font color=Cyan>(</font>FiveOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line293)"></a>    toContents <font color=Cyan>(</font>SixOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line294)"></a>    toContents <font color=Cyan>(</font>SevenOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line295)"></a>    toContents <font color=Cyan>(</font>EightOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line296)"></a>    toContents <font color=Cyan>(</font>NineOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line297)"></a>    toContents <font color=Cyan>(</font>TenOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line298)"></a>    toContents <font color=Cyan>(</font>ElevenOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line299)"></a>    toContents <font color=Cyan>(</font>TwelveOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line300)"></a>
-<a name="(line301)"></a><a name="OneOf13"></a><font color=Blue>----</font>
-<a name="(line302)"></a><a name="OneOf13"></a><font color=Green><u>data</u></font> OneOf13 a b c d e f g h i j k l m
-<a name="(line303)"></a>    <font color=Red>=</font> OneOf13 a <font color=Red>|</font> TwoOf13 b <font color=Red>|</font> ThreeOf13 c <font color=Red>|</font> FourOf13 d <font color=Red>|</font> FiveOf13 e
-<a name="(line304)"></a>    <font color=Red>|</font> SixOf13 f <font color=Red>|</font> SevenOf13 g <font color=Red>|</font> EightOf13 h <font color=Red>|</font> NineOf13 i <font color=Red>|</font> TenOf13 j
-<a name="(line305)"></a>    <font color=Red>|</font> ElevenOf13 k <font color=Red>|</font> TwelveOf13 l <font color=Red>|</font> ThirteenOf13 m
-<a name="(line306)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line307)"></a>
-<a name="(line308)"></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="(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 <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
-<a name="(line316)"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>)</font>
-<a name="(line317)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf13 a b c d e f g h i j k l m<font color=Cyan>)</font>
-<a name="(line318)"></a>  <font color=Green><u>where</u></font>
-<a name="(line319)"></a>    parseContents <font color=Red>=</font>
-<a name="(line320)"></a>        <font color=Cyan>(</font>choice OneOf13 <font color=Cyan>$</font> choice TwoOf13 <font color=Cyan>$</font> choice ThreeOf13 <font color=Cyan>$</font> choice FourOf13
-<a name="(line321)"></a>        <font color=Cyan>$</font> choice FiveOf13 <font color=Cyan>$</font> choice SixOf13 <font color=Cyan>$</font> choice SevenOf13
-<a name="(line322)"></a>        <font color=Cyan>$</font> choice EightOf13 <font color=Cyan>$</font> choice NineOf13 <font color=Cyan>$</font> choice TenOf13
-<a name="(line323)"></a>        <font color=Cyan>$</font> choice ElevenOf13 <font color=Cyan>$</font> choice TwelveOf13 <font color=Cyan>$</font> choice ThirteenOf13
-<a name="(line324)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf13"</font><font color=Cyan>)</font>
-<a name="(line325)"></a>    toContents <font color=Cyan>(</font>OneOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line326)"></a>    toContents <font color=Cyan>(</font>TwoOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line327)"></a>    toContents <font color=Cyan>(</font>ThreeOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line328)"></a>    toContents <font color=Cyan>(</font>FourOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line329)"></a>    toContents <font color=Cyan>(</font>FiveOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line330)"></a>    toContents <font color=Cyan>(</font>SixOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line331)"></a>    toContents <font color=Cyan>(</font>SevenOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line332)"></a>    toContents <font color=Cyan>(</font>EightOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line333)"></a>    toContents <font color=Cyan>(</font>NineOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line334)"></a>    toContents <font color=Cyan>(</font>TenOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line335)"></a>    toContents <font color=Cyan>(</font>ElevenOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line336)"></a>    toContents <font color=Cyan>(</font>TwelveOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line337)"></a>    toContents <font color=Cyan>(</font>ThirteenOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line338)"></a>
-<a name="(line339)"></a><a name="OneOf14"></a><font color=Blue>----</font>
-<a name="(line340)"></a><a name="OneOf14"></a><font color=Green><u>data</u></font> OneOf14 a b c d e f g h i j k l m n
-<a name="(line341)"></a>    <font color=Red>=</font> OneOf14 a <font color=Red>|</font> TwoOf14 b <font color=Red>|</font> ThreeOf14 c <font color=Red>|</font> FourOf14 d <font color=Red>|</font> FiveOf14 e
-<a name="(line342)"></a>    <font color=Red>|</font> SixOf14 f <font color=Red>|</font> SevenOf14 g <font color=Red>|</font> EightOf14 h <font color=Red>|</font> NineOf14 i <font color=Red>|</font> TenOf14 j
-<a name="(line343)"></a>    <font color=Red>|</font> ElevenOf14 k <font color=Red>|</font> TwelveOf14 l <font color=Red>|</font> ThirteenOf14 m <font color=Red>|</font> FourteenOf14 n
-<a name="(line344)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line345)"></a>
-<a name="(line346)"></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="(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 <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
-<a name="(line354)"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>,</font>XmlContent n<font color=Cyan>)</font>
-<a name="(line355)"></a>    <font color=Red>=&gt;</font> XmlContent <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="(line356)"></a>  <font color=Green><u>where</u></font>
-<a name="(line357)"></a>    parseContents <font color=Red>=</font>
-<a name="(line358)"></a>        <font color=Cyan>(</font>choice OneOf14 <font color=Cyan>$</font> choice TwoOf14 <font color=Cyan>$</font> choice ThreeOf14 <font color=Cyan>$</font> choice FourOf14
-<a name="(line359)"></a>        <font color=Cyan>$</font> choice FiveOf14 <font color=Cyan>$</font> choice SixOf14 <font color=Cyan>$</font> choice SevenOf14
-<a name="(line360)"></a>        <font color=Cyan>$</font> choice EightOf14 <font color=Cyan>$</font> choice NineOf14 <font color=Cyan>$</font> choice TenOf14
-<a name="(line361)"></a>        <font color=Cyan>$</font> choice ElevenOf14 <font color=Cyan>$</font> choice TwelveOf14 <font color=Cyan>$</font> choice ThirteenOf14
-<a name="(line362)"></a>        <font color=Cyan>$</font> choice FourteenOf14
-<a name="(line363)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf14"</font><font color=Cyan>)</font>
-<a name="(line364)"></a>    toContents <font color=Cyan>(</font>OneOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line365)"></a>    toContents <font color=Cyan>(</font>TwoOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line366)"></a>    toContents <font color=Cyan>(</font>ThreeOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line367)"></a>    toContents <font color=Cyan>(</font>FourOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line368)"></a>    toContents <font color=Cyan>(</font>FiveOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line369)"></a>    toContents <font color=Cyan>(</font>SixOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line370)"></a>    toContents <font color=Cyan>(</font>SevenOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line371)"></a>    toContents <font color=Cyan>(</font>EightOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line372)"></a>    toContents <font color=Cyan>(</font>NineOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line373)"></a>    toContents <font color=Cyan>(</font>TenOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line374)"></a>    toContents <font color=Cyan>(</font>ElevenOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line375)"></a>    toContents <font color=Cyan>(</font>TwelveOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line376)"></a>    toContents <font color=Cyan>(</font>ThirteenOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line377)"></a>    toContents <font color=Cyan>(</font>FourteenOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line378)"></a>
-<a name="(line379)"></a><a name="OneOf15"></a><font color=Blue>----</font>
-<a name="(line380)"></a><a name="OneOf15"></a><font color=Green><u>data</u></font> OneOf15 a b c d e f g h i j k l m n o
-<a name="(line381)"></a>    <font color=Red>=</font> OneOf15 a <font color=Red>|</font> TwoOf15 b <font color=Red>|</font> ThreeOf15 c <font color=Red>|</font> FourOf15 d <font color=Red>|</font> FiveOf15 e
-<a name="(line382)"></a>    <font color=Red>|</font> SixOf15 f <font color=Red>|</font> SevenOf15 g <font color=Red>|</font> EightOf15 h <font color=Red>|</font> NineOf15 i <font color=Red>|</font> TenOf15 j
-<a name="(line383)"></a>    <font color=Red>|</font> ElevenOf15 k <font color=Red>|</font> TwelveOf15 l <font color=Red>|</font> ThirteenOf15 m <font color=Red>|</font> FourteenOf15 n
-<a name="(line384)"></a>    <font color=Red>|</font> FifteenOf15 o
-<a name="(line385)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line386)"></a>
-<a name="(line387)"></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="(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 <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
-<a name="(line395)"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>,</font>XmlContent n<font color=Cyan>,</font>XmlContent o<font color=Cyan>)</font>
-<a name="(line396)"></a>    <font color=Red>=&gt;</font> XmlContent <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="(line397)"></a>  <font color=Green><u>where</u></font>
-<a name="(line398)"></a>    parseContents <font color=Red>=</font>
-<a name="(line399)"></a>        <font color=Cyan>(</font>choice OneOf15 <font color=Cyan>$</font> choice TwoOf15 <font color=Cyan>$</font> choice ThreeOf15 <font color=Cyan>$</font> choice FourOf15
-<a name="(line400)"></a>        <font color=Cyan>$</font> choice FiveOf15 <font color=Cyan>$</font> choice SixOf15 <font color=Cyan>$</font> choice SevenOf15
-<a name="(line401)"></a>        <font color=Cyan>$</font> choice EightOf15 <font color=Cyan>$</font> choice NineOf15 <font color=Cyan>$</font> choice TenOf15
-<a name="(line402)"></a>        <font color=Cyan>$</font> choice ElevenOf15 <font color=Cyan>$</font> choice TwelveOf15 <font color=Cyan>$</font> choice ThirteenOf15
-<a name="(line403)"></a>        <font color=Cyan>$</font> choice FourteenOf15 <font color=Cyan>$</font> choice FifteenOf15
-<a name="(line404)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf15"</font><font color=Cyan>)</font>
-<a name="(line405)"></a>    toContents <font color=Cyan>(</font>OneOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line406)"></a>    toContents <font color=Cyan>(</font>TwoOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line407)"></a>    toContents <font color=Cyan>(</font>ThreeOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line408)"></a>    toContents <font color=Cyan>(</font>FourOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line409)"></a>    toContents <font color=Cyan>(</font>FiveOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line410)"></a>    toContents <font color=Cyan>(</font>SixOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line411)"></a>    toContents <font color=Cyan>(</font>SevenOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line412)"></a>    toContents <font color=Cyan>(</font>EightOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line413)"></a>    toContents <font color=Cyan>(</font>NineOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line414)"></a>    toContents <font color=Cyan>(</font>TenOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line415)"></a>    toContents <font color=Cyan>(</font>ElevenOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line416)"></a>    toContents <font color=Cyan>(</font>TwelveOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line417)"></a>    toContents <font color=Cyan>(</font>ThirteenOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line418)"></a>    toContents <font color=Cyan>(</font>FourteenOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line419)"></a>    toContents <font color=Cyan>(</font>FifteenOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line420)"></a>
-<a name="(line421)"></a><a name="OneOf16"></a><font color=Blue>----</font>
-<a name="(line422)"></a><a name="OneOf16"></a><font color=Green><u>data</u></font> OneOf16 a b c d e f g h i j k l m n o p
-<a name="(line423)"></a>    <font color=Red>=</font> OneOf16 a <font color=Red>|</font> TwoOf16 b <font color=Red>|</font> ThreeOf16 c <font color=Red>|</font> FourOf16 d <font color=Red>|</font> FiveOf16 e
-<a name="(line424)"></a>    <font color=Red>|</font> SixOf16 f <font color=Red>|</font> SevenOf16 g <font color=Red>|</font> EightOf16 h <font color=Red>|</font> NineOf16 i <font color=Red>|</font> TenOf16 j
-<a name="(line425)"></a>    <font color=Red>|</font> ElevenOf16 k <font color=Red>|</font> TwelveOf16 l <font color=Red>|</font> ThirteenOf16 m <font color=Red>|</font> FourteenOf16 n
-<a name="(line426)"></a>    <font color=Red>|</font> FifteenOf16 o <font color=Red>|</font> SixteenOf16 p
-<a name="(line427)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line428)"></a>
-<a name="(line429)"></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="(line430)"></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="(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 <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
-<a name="(line438)"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>,</font>XmlContent n<font color=Cyan>,</font>XmlContent o
-<a name="(line439)"></a>          <font color=Cyan>,</font>XmlContent p<font color=Cyan>)</font>
-<a name="(line440)"></a>    <font color=Red>=&gt;</font> XmlContent <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="(line441)"></a>  <font color=Green><u>where</u></font>
-<a name="(line442)"></a>    parseContents <font color=Red>=</font>
-<a name="(line443)"></a>        <font color=Cyan>(</font>choice OneOf16 <font color=Cyan>$</font> choice TwoOf16 <font color=Cyan>$</font> choice ThreeOf16 <font color=Cyan>$</font> choice FourOf16
-<a name="(line444)"></a>        <font color=Cyan>$</font> choice FiveOf16 <font color=Cyan>$</font> choice SixOf16 <font color=Cyan>$</font> choice SevenOf16
-<a name="(line445)"></a>        <font color=Cyan>$</font> choice EightOf16 <font color=Cyan>$</font> choice NineOf16 <font color=Cyan>$</font> choice TenOf16
-<a name="(line446)"></a>        <font color=Cyan>$</font> choice ElevenOf16 <font color=Cyan>$</font> choice TwelveOf16 <font color=Cyan>$</font> choice ThirteenOf16
-<a name="(line447)"></a>        <font color=Cyan>$</font> choice FourteenOf16 <font color=Cyan>$</font> choice FifteenOf16 <font color=Cyan>$</font> choice SixteenOf16
-<a name="(line448)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf16"</font><font color=Cyan>)</font>
-<a name="(line449)"></a>    toContents <font color=Cyan>(</font>OneOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line450)"></a>    toContents <font color=Cyan>(</font>TwoOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line451)"></a>    toContents <font color=Cyan>(</font>ThreeOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line452)"></a>    toContents <font color=Cyan>(</font>FourOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line453)"></a>    toContents <font color=Cyan>(</font>FiveOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line454)"></a>    toContents <font color=Cyan>(</font>SixOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line455)"></a>    toContents <font color=Cyan>(</font>SevenOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line456)"></a>    toContents <font color=Cyan>(</font>EightOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line457)"></a>    toContents <font color=Cyan>(</font>NineOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line458)"></a>    toContents <font color=Cyan>(</font>TenOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line459)"></a>    toContents <font color=Cyan>(</font>ElevenOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line460)"></a>    toContents <font color=Cyan>(</font>TwelveOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line461)"></a>    toContents <font color=Cyan>(</font>ThirteenOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line462)"></a>    toContents <font color=Cyan>(</font>FourteenOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line463)"></a>    toContents <font color=Cyan>(</font>FifteenOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line464)"></a>    toContents <font color=Cyan>(</font>SixteenOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line465)"></a>
-<a name="(line466)"></a><a name="OneOf17"></a><font color=Blue>----</font>
-<a name="(line467)"></a><a name="OneOf17"></a><font color=Green><u>data</u></font> OneOf17 a b c d e f g h i j k l m n o p q
-<a name="(line468)"></a>    <font color=Red>=</font> OneOf17 a <font color=Red>|</font> TwoOf17 b <font color=Red>|</font> ThreeOf17 c <font color=Red>|</font> FourOf17 d <font color=Red>|</font> FiveOf17 e
-<a name="(line469)"></a>    <font color=Red>|</font> SixOf17 f <font color=Red>|</font> SevenOf17 g <font color=Red>|</font> EightOf17 h <font color=Red>|</font> NineOf17 i <font color=Red>|</font> TenOf17 j
-<a name="(line470)"></a>    <font color=Red>|</font> ElevenOf17 k <font color=Red>|</font> TwelveOf17 l <font color=Red>|</font> ThirteenOf17 m <font color=Red>|</font> FourteenOf17 n
-<a name="(line471)"></a>    <font color=Red>|</font> FifteenOf17 o <font color=Red>|</font> SixteenOf17 p <font color=Red>|</font> SeventeenOf17 q
-<a name="(line472)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line473)"></a>
-<a name="(line474)"></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="(line475)"></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="(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 <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
-<a name="(line483)"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>,</font>XmlContent n<font color=Cyan>,</font>XmlContent o
-<a name="(line484)"></a>          <font color=Cyan>,</font>XmlContent p<font color=Cyan>,</font>XmlContent q<font color=Cyan>)</font>
-<a name="(line485)"></a>    <font color=Red>=&gt;</font> XmlContent <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="(line486)"></a>  <font color=Green><u>where</u></font>
-<a name="(line487)"></a>    parseContents <font color=Red>=</font>
-<a name="(line488)"></a>        <font color=Cyan>(</font>choice OneOf17 <font color=Cyan>$</font> choice TwoOf17 <font color=Cyan>$</font> choice ThreeOf17 <font color=Cyan>$</font> choice FourOf17
-<a name="(line489)"></a>        <font color=Cyan>$</font> choice FiveOf17 <font color=Cyan>$</font> choice SixOf17 <font color=Cyan>$</font> choice SevenOf17
-<a name="(line490)"></a>        <font color=Cyan>$</font> choice EightOf17 <font color=Cyan>$</font> choice NineOf17 <font color=Cyan>$</font> choice TenOf17
-<a name="(line491)"></a>        <font color=Cyan>$</font> choice ElevenOf17 <font color=Cyan>$</font> choice TwelveOf17 <font color=Cyan>$</font> choice ThirteenOf17
-<a name="(line492)"></a>        <font color=Cyan>$</font> choice FourteenOf17 <font color=Cyan>$</font> choice FifteenOf17 <font color=Cyan>$</font> choice SixteenOf17
-<a name="(line493)"></a>        <font color=Cyan>$</font> choice SeventeenOf17
-<a name="(line494)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf17"</font><font color=Cyan>)</font>
-<a name="(line495)"></a>    toContents <font color=Cyan>(</font>OneOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line496)"></a>    toContents <font color=Cyan>(</font>TwoOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line497)"></a>    toContents <font color=Cyan>(</font>ThreeOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line498)"></a>    toContents <font color=Cyan>(</font>FourOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line499)"></a>    toContents <font color=Cyan>(</font>FiveOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line500)"></a>    toContents <font color=Cyan>(</font>SixOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line501)"></a>    toContents <font color=Cyan>(</font>SevenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line502)"></a>    toContents <font color=Cyan>(</font>EightOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line503)"></a>    toContents <font color=Cyan>(</font>NineOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line504)"></a>    toContents <font color=Cyan>(</font>TenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line505)"></a>    toContents <font color=Cyan>(</font>ElevenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line506)"></a>    toContents <font color=Cyan>(</font>TwelveOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line507)"></a>    toContents <font color=Cyan>(</font>ThirteenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line508)"></a>    toContents <font color=Cyan>(</font>FourteenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line509)"></a>    toContents <font color=Cyan>(</font>FifteenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line510)"></a>    toContents <font color=Cyan>(</font>SixteenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line511)"></a>    toContents <font color=Cyan>(</font>SeventeenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line512)"></a>
-<a name="(line513)"></a><a name="OneOf18"></a><font color=Blue>----</font>
-<a name="(line514)"></a><a name="OneOf18"></a><font color=Green><u>data</u></font> OneOf18 a b c d e f g h i j k l m n o p q r
-<a name="(line515)"></a>    <font color=Red>=</font> OneOf18 a <font color=Red>|</font> TwoOf18 b <font color=Red>|</font> ThreeOf18 c <font color=Red>|</font> FourOf18 d <font color=Red>|</font> FiveOf18 e
-<a name="(line516)"></a>    <font color=Red>|</font> SixOf18 f <font color=Red>|</font> SevenOf18 g <font color=Red>|</font> EightOf18 h <font color=Red>|</font> NineOf18 i <font color=Red>|</font> TenOf18 j
-<a name="(line517)"></a>    <font color=Red>|</font> ElevenOf18 k <font color=Red>|</font> TwelveOf18 l <font color=Red>|</font> ThirteenOf18 m <font color=Red>|</font> FourteenOf18 n
-<a name="(line518)"></a>    <font color=Red>|</font> FifteenOf18 o <font color=Red>|</font> SixteenOf18 p <font color=Red>|</font> SeventeenOf18 q <font color=Red>|</font> EighteenOf18 r
-<a name="(line519)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line520)"></a>
-<a name="(line521)"></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="(line522)"></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="(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 <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
-<a name="(line530)"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>,</font>XmlContent n<font color=Cyan>,</font>XmlContent o
-<a name="(line531)"></a>          <font color=Cyan>,</font>XmlContent p<font color=Cyan>,</font>XmlContent q<font color=Cyan>,</font>XmlContent r<font color=Cyan>)</font>
-<a name="(line532)"></a>    <font color=Red>=&gt;</font> XmlContent <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="(line533)"></a>  <font color=Green><u>where</u></font>
-<a name="(line534)"></a>    parseContents <font color=Red>=</font>
-<a name="(line535)"></a>        <font color=Cyan>(</font>choice OneOf18 <font color=Cyan>$</font> choice TwoOf18 <font color=Cyan>$</font> choice ThreeOf18 <font color=Cyan>$</font> choice FourOf18
-<a name="(line536)"></a>        <font color=Cyan>$</font> choice FiveOf18 <font color=Cyan>$</font> choice SixOf18 <font color=Cyan>$</font> choice SevenOf18
-<a name="(line537)"></a>        <font color=Cyan>$</font> choice EightOf18 <font color=Cyan>$</font> choice NineOf18 <font color=Cyan>$</font> choice TenOf18
-<a name="(line538)"></a>        <font color=Cyan>$</font> choice ElevenOf18 <font color=Cyan>$</font> choice TwelveOf18 <font color=Cyan>$</font> choice ThirteenOf18
-<a name="(line539)"></a>        <font color=Cyan>$</font> choice FourteenOf18 <font color=Cyan>$</font> choice FifteenOf18 <font color=Cyan>$</font> choice SixteenOf18
-<a name="(line540)"></a>        <font color=Cyan>$</font> choice SeventeenOf18 <font color=Cyan>$</font> choice EighteenOf18
-<a name="(line541)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf18"</font><font color=Cyan>)</font>
-<a name="(line542)"></a>    toContents <font color=Cyan>(</font>OneOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line543)"></a>    toContents <font color=Cyan>(</font>TwoOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line544)"></a>    toContents <font color=Cyan>(</font>ThreeOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line545)"></a>    toContents <font color=Cyan>(</font>FourOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line546)"></a>    toContents <font color=Cyan>(</font>FiveOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line547)"></a>    toContents <font color=Cyan>(</font>SixOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line548)"></a>    toContents <font color=Cyan>(</font>SevenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line549)"></a>    toContents <font color=Cyan>(</font>EightOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line550)"></a>    toContents <font color=Cyan>(</font>NineOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line551)"></a>    toContents <font color=Cyan>(</font>TenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line552)"></a>    toContents <font color=Cyan>(</font>ElevenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line553)"></a>    toContents <font color=Cyan>(</font>TwelveOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line554)"></a>    toContents <font color=Cyan>(</font>ThirteenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line555)"></a>    toContents <font color=Cyan>(</font>FourteenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line556)"></a>    toContents <font color=Cyan>(</font>FifteenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line557)"></a>    toContents <font color=Cyan>(</font>SixteenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line558)"></a>    toContents <font color=Cyan>(</font>SeventeenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line559)"></a>    toContents <font color=Cyan>(</font>EighteenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line560)"></a>
-<a name="(line561)"></a><a name="OneOf19"></a><font color=Blue>----</font>
-<a name="(line562)"></a><a name="OneOf19"></a><font color=Green><u>data</u></font> OneOf19 a b c d e f g h i j k l m n o p q r s
-<a name="(line563)"></a>    <font color=Red>=</font> OneOf19 a <font color=Red>|</font> TwoOf19 b <font color=Red>|</font> ThreeOf19 c <font color=Red>|</font> FourOf19 d <font color=Red>|</font> FiveOf19 e
-<a name="(line564)"></a>    <font color=Red>|</font> SixOf19 f <font color=Red>|</font> SevenOf19 g <font color=Red>|</font> EightOf19 h <font color=Red>|</font> NineOf19 i <font color=Red>|</font> TenOf19 j
-<a name="(line565)"></a>    <font color=Red>|</font> ElevenOf19 k <font color=Red>|</font> TwelveOf19 l <font color=Red>|</font> ThirteenOf19 m <font color=Red>|</font> FourteenOf19 n
-<a name="(line566)"></a>    <font color=Red>|</font> FifteenOf19 o <font color=Red>|</font> SixteenOf19 p <font color=Red>|</font> SeventeenOf19 q <font color=Red>|</font> EighteenOf19 r
-<a name="(line567)"></a>    <font color=Red>|</font> NineteenOf19 s
-<a name="(line568)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line569)"></a>
-<a name="(line570)"></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="(line571)"></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="(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 <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
-<a name="(line579)"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>,</font>XmlContent n<font color=Cyan>,</font>XmlContent o
-<a name="(line580)"></a>          <font color=Cyan>,</font>XmlContent p<font color=Cyan>,</font>XmlContent q<font color=Cyan>,</font>XmlContent r<font color=Cyan>,</font>XmlContent s<font color=Cyan>)</font>
-<a name="(line581)"></a>    <font color=Red>=&gt;</font> XmlContent <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="(line582)"></a>  <font color=Green><u>where</u></font>
-<a name="(line583)"></a>    parseContents <font color=Red>=</font>
-<a name="(line584)"></a>        <font color=Cyan>(</font>choice OneOf19 <font color=Cyan>$</font> choice TwoOf19 <font color=Cyan>$</font> choice ThreeOf19 <font color=Cyan>$</font> choice FourOf19
-<a name="(line585)"></a>        <font color=Cyan>$</font> choice FiveOf19 <font color=Cyan>$</font> choice SixOf19 <font color=Cyan>$</font> choice SevenOf19
-<a name="(line586)"></a>        <font color=Cyan>$</font> choice EightOf19 <font color=Cyan>$</font> choice NineOf19 <font color=Cyan>$</font> choice TenOf19
-<a name="(line587)"></a>        <font color=Cyan>$</font> choice ElevenOf19 <font color=Cyan>$</font> choice TwelveOf19 <font color=Cyan>$</font> choice ThirteenOf19
-<a name="(line588)"></a>        <font color=Cyan>$</font> choice FourteenOf19 <font color=Cyan>$</font> choice FifteenOf19 <font color=Cyan>$</font> choice SixteenOf19
-<a name="(line589)"></a>        <font color=Cyan>$</font> choice SeventeenOf19 <font color=Cyan>$</font> choice EighteenOf19 <font color=Cyan>$</font> choice NineteenOf19
-<a name="(line590)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf19"</font><font color=Cyan>)</font>
-<a name="(line591)"></a>    toContents <font color=Cyan>(</font>OneOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line592)"></a>    toContents <font color=Cyan>(</font>TwoOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line593)"></a>    toContents <font color=Cyan>(</font>ThreeOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line594)"></a>    toContents <font color=Cyan>(</font>FourOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line595)"></a>    toContents <font color=Cyan>(</font>FiveOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line596)"></a>    toContents <font color=Cyan>(</font>SixOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line597)"></a>    toContents <font color=Cyan>(</font>SevenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line598)"></a>    toContents <font color=Cyan>(</font>EightOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line599)"></a>    toContents <font color=Cyan>(</font>NineOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line600)"></a>    toContents <font color=Cyan>(</font>TenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line601)"></a>    toContents <font color=Cyan>(</font>ElevenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line602)"></a>    toContents <font color=Cyan>(</font>TwelveOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line603)"></a>    toContents <font color=Cyan>(</font>ThirteenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line604)"></a>    toContents <font color=Cyan>(</font>FourteenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line605)"></a>    toContents <font color=Cyan>(</font>FifteenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line606)"></a>    toContents <font color=Cyan>(</font>SixteenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line607)"></a>    toContents <font color=Cyan>(</font>SeventeenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line608)"></a>    toContents <font color=Cyan>(</font>EighteenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line609)"></a>    toContents <font color=Cyan>(</font>NineteenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line610)"></a>
-<a name="(line611)"></a><a name="OneOf20"></a><font color=Blue>----</font>
-<a name="(line612)"></a><a name="OneOf20"></a><font color=Green><u>data</u></font> OneOf20 a b c d e f g h i j k l m n o p q r s t
-<a name="(line613)"></a>    <font color=Red>=</font> OneOf20 a <font color=Red>|</font> TwoOf20 b <font color=Red>|</font> ThreeOf20 c <font color=Red>|</font> FourOf20 d <font color=Red>|</font> FiveOf20 e
-<a name="(line614)"></a>    <font color=Red>|</font> SixOf20 f <font color=Red>|</font> SevenOf20 g <font color=Red>|</font> EightOf20 h <font color=Red>|</font> NineOf20 i <font color=Red>|</font> TenOf20 j
-<a name="(line615)"></a>    <font color=Red>|</font> ElevenOf20 k <font color=Red>|</font> TwelveOf20 l <font color=Red>|</font> ThirteenOf20 m <font color=Red>|</font> FourteenOf20 n
-<a name="(line616)"></a>    <font color=Red>|</font> FifteenOf20 o <font color=Red>|</font> SixteenOf20 p <font color=Red>|</font> SeventeenOf20 q <font color=Red>|</font> EighteenOf20 r
-<a name="(line617)"></a>    <font color=Red>|</font> NineteenOf20 s <font color=Red>|</font> TwentyOf20 t
-<a name="(line618)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line619)"></a>
-<a name="(line620)"></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="(line621)"></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="(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 <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
-<a name="(line629)"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>,</font>XmlContent n<font color=Cyan>,</font>XmlContent o
-<a name="(line630)"></a>          <font color=Cyan>,</font>XmlContent p<font color=Cyan>,</font>XmlContent q<font color=Cyan>,</font>XmlContent r<font color=Cyan>,</font>XmlContent s<font color=Cyan>,</font>XmlContent t<font color=Cyan>)</font>
-<a name="(line631)"></a>    <font color=Red>=&gt;</font> XmlContent <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="(line632)"></a>  <font color=Green><u>where</u></font>
-<a name="(line633)"></a>    parseContents <font color=Red>=</font>
-<a name="(line634)"></a>        <font color=Cyan>(</font>choice OneOf20 <font color=Cyan>$</font> choice TwoOf20 <font color=Cyan>$</font> choice ThreeOf20 <font color=Cyan>$</font> choice FourOf20
-<a name="(line635)"></a>        <font color=Cyan>$</font> choice FiveOf20 <font color=Cyan>$</font> choice SixOf20 <font color=Cyan>$</font> choice SevenOf20
-<a name="(line636)"></a>        <font color=Cyan>$</font> choice EightOf20 <font color=Cyan>$</font> choice NineOf20 <font color=Cyan>$</font> choice TenOf20
-<a name="(line637)"></a>        <font color=Cyan>$</font> choice ElevenOf20 <font color=Cyan>$</font> choice TwelveOf20 <font color=Cyan>$</font> choice ThirteenOf20
-<a name="(line638)"></a>        <font color=Cyan>$</font> choice FourteenOf20 <font color=Cyan>$</font> choice FifteenOf20 <font color=Cyan>$</font> choice SixteenOf20
-<a name="(line639)"></a>        <font color=Cyan>$</font> choice SeventeenOf20 <font color=Cyan>$</font> choice EighteenOf20 <font color=Cyan>$</font> choice NineteenOf20
-<a name="(line640)"></a>        <font color=Cyan>$</font> choice TwentyOf20
-<a name="(line641)"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf20"</font><font color=Cyan>)</font>
-<a name="(line642)"></a>    toContents <font color=Cyan>(</font>OneOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line643)"></a>    toContents <font color=Cyan>(</font>TwoOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line644)"></a>    toContents <font color=Cyan>(</font>ThreeOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line645)"></a>    toContents <font color=Cyan>(</font>FourOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line646)"></a>    toContents <font color=Cyan>(</font>FiveOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line647)"></a>    toContents <font color=Cyan>(</font>SixOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line648)"></a>    toContents <font color=Cyan>(</font>SevenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line649)"></a>    toContents <font color=Cyan>(</font>EightOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line650)"></a>    toContents <font color=Cyan>(</font>NineOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line651)"></a>    toContents <font color=Cyan>(</font>TenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line652)"></a>    toContents <font color=Cyan>(</font>ElevenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line653)"></a>    toContents <font color=Cyan>(</font>TwelveOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line654)"></a>    toContents <font color=Cyan>(</font>ThirteenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line655)"></a>    toContents <font color=Cyan>(</font>FourteenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line656)"></a>    toContents <font color=Cyan>(</font>FifteenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line657)"></a>    toContents <font color=Cyan>(</font>SixteenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line658)"></a>    toContents <font color=Cyan>(</font>SeventeenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line659)"></a>    toContents <font color=Cyan>(</font>EighteenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line660)"></a>    toContents <font color=Cyan>(</font>NineteenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line661)"></a>    toContents <font color=Cyan>(</font>TwentyOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
-<a name="(line662)"></a>
-<a name="(line663)"></a><font color=Blue>----</font>
-</pre>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/OneOfN.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>OneOfN <font color=Green><u>where</u></font>
+<a name="line-2"></a>
+<a name="line-3"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent
+<a name="line-4"></a>
+<a name="line-5"></a><a name="OneOf2"></a><font color=Green><u>data</u></font> OneOf2 a b
+<a name="line-6"></a>    <font color=Red>=</font> OneOf2 a <font color=Red>|</font> TwoOf2 b
+<a name="line-7"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-8"></a>
+<a name="line-9"></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="line-10"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf2 a b<font color=Cyan>)</font>
+<a name="line-11"></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="line-12"></a>  <font color=Blue>--         toHType m = Defined "OneOf2" [a,b] []</font>
+<a name="line-13"></a>  <font color=Blue>--            where a = toHType $ (\ (OneOf2 a)-&gt;a) $ m</font>
+<a name="line-14"></a>  <font color=Blue>--                  b = toHType $ (\ (TwoOf2 b)-&gt;b) $ m</font>
+<a name="line-15"></a>
+<a name="line-16"></a>
+<a name="line-17"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>)</font>
+<a name="line-18"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf2 a b<font color=Cyan>)</font>
+<a name="line-19"></a>  <font color=Green><u>where</u></font>
+<a name="line-20"></a>    parseContents <font color=Red>=</font>
+<a name="line-21"></a>        <font color=Cyan>(</font>choice OneOf2 <font color=Cyan>$</font> choice TwoOf2
+<a name="line-22"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf2"</font><font color=Cyan>)</font>
+<a name="line-23"></a>    toContents <font color=Cyan>(</font>OneOf2 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-24"></a>    toContents <font color=Cyan>(</font>TwoOf2 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-25"></a>
+<a name="line-26"></a><a name="OneOf3"></a><font color=Blue>----</font>
+<a name="line-27"></a><a name="OneOf3"></a><font color=Green><u>data</u></font> OneOf3 a b c
+<a name="line-28"></a>    <font color=Red>=</font> OneOf3 a <font color=Red>|</font> TwoOf3 b <font color=Red>|</font> ThreeOf3 c
+<a name="line-29"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-30"></a>
+<a name="line-31"></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="line-32"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf3 a b c<font color=Cyan>)</font>
+<a name="line-33"></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="line-34"></a>
+<a name="line-35"></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="line-36"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf3 a b c<font color=Cyan>)</font>
+<a name="line-37"></a>  <font color=Green><u>where</u></font>
+<a name="line-38"></a>    parseContents <font color=Red>=</font>
+<a name="line-39"></a>        <font color=Cyan>(</font>choice OneOf3 <font color=Cyan>$</font> choice TwoOf3 <font color=Cyan>$</font> choice ThreeOf3
+<a name="line-40"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf3"</font><font color=Cyan>)</font>
+<a name="line-41"></a>    toContents <font color=Cyan>(</font>OneOf3 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-42"></a>    toContents <font color=Cyan>(</font>TwoOf3 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-43"></a>    toContents <font color=Cyan>(</font>ThreeOf3 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-44"></a>
+<a name="line-45"></a><a name="OneOf4"></a><font color=Blue>----</font>
+<a name="line-46"></a><a name="OneOf4"></a><font color=Green><u>data</u></font> OneOf4 a b c d
+<a name="line-47"></a>    <font color=Red>=</font> OneOf4 a <font color=Red>|</font> TwoOf4 b <font color=Red>|</font> ThreeOf4 c <font color=Red>|</font> FourOf4 d
+<a name="line-48"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-49"></a>
+<a name="line-50"></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="line-51"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf4 a b c d<font color=Cyan>)</font>
+<a name="line-52"></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="line-53"></a>
+<a name="line-54"></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="line-55"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf4 a b c d<font color=Cyan>)</font>
+<a name="line-56"></a>  <font color=Green><u>where</u></font>
+<a name="line-57"></a>    parseContents <font color=Red>=</font>
+<a name="line-58"></a>        <font color=Cyan>(</font>choice OneOf4 <font color=Cyan>$</font> choice TwoOf4 <font color=Cyan>$</font> choice ThreeOf4 <font color=Cyan>$</font> choice FourOf4
+<a name="line-59"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf4"</font><font color=Cyan>)</font>
+<a name="line-60"></a>    toContents <font color=Cyan>(</font>OneOf4 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-61"></a>    toContents <font color=Cyan>(</font>TwoOf4 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-62"></a>    toContents <font color=Cyan>(</font>ThreeOf4 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-63"></a>    toContents <font color=Cyan>(</font>FourOf4 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-64"></a>
+<a name="line-65"></a><a name="OneOf5"></a><font color=Blue>----</font>
+<a name="line-66"></a><a name="OneOf5"></a><font color=Green><u>data</u></font> OneOf5 a b c d e
+<a name="line-67"></a>    <font color=Red>=</font> OneOf5 a <font color=Red>|</font> TwoOf5 b <font color=Red>|</font> ThreeOf5 c <font color=Red>|</font> FourOf5 d <font color=Red>|</font> FiveOf5 e
+<a name="line-68"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-69"></a>
+<a name="line-70"></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="line-71"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf5 a b c d e<font color=Cyan>)</font>
+<a name="line-72"></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="line-73"></a>
+<a name="line-74"></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="line-75"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf5 a b c d e<font color=Cyan>)</font>
+<a name="line-76"></a>  <font color=Green><u>where</u></font>
+<a name="line-77"></a>    parseContents <font color=Red>=</font>
+<a name="line-78"></a>        <font color=Cyan>(</font>choice OneOf5 <font color=Cyan>$</font> choice TwoOf5 <font color=Cyan>$</font> choice ThreeOf5 <font color=Cyan>$</font> choice FourOf5
+<a name="line-79"></a>        <font color=Cyan>$</font> choice FiveOf5
+<a name="line-80"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf5"</font><font color=Cyan>)</font>
+<a name="line-81"></a>    toContents <font color=Cyan>(</font>OneOf5 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-82"></a>    toContents <font color=Cyan>(</font>TwoOf5 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-83"></a>    toContents <font color=Cyan>(</font>ThreeOf5 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-84"></a>    toContents <font color=Cyan>(</font>FourOf5 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-85"></a>    toContents <font color=Cyan>(</font>FiveOf5 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-86"></a>
+<a name="line-87"></a><a name="OneOf6"></a><font color=Blue>----</font>
+<a name="line-88"></a><a name="OneOf6"></a><font color=Green><u>data</u></font> OneOf6 a b c d e f
+<a name="line-89"></a>    <font color=Red>=</font> OneOf6 a <font color=Red>|</font> TwoOf6 b <font color=Red>|</font> ThreeOf6 c <font color=Red>|</font> FourOf6 d <font color=Red>|</font> FiveOf6 e <font color=Red>|</font> SixOf6 f
+<a name="line-90"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-91"></a>
+<a name="line-92"></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="line-93"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>)</font>
+<a name="line-94"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf6 a b c d e f<font color=Cyan>)</font>
+<a name="line-95"></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="line-96"></a>
+<a name="line-97"></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="line-98"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>)</font>
+<a name="line-99"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf6 a b c d e f<font color=Cyan>)</font>
+<a name="line-100"></a>  <font color=Green><u>where</u></font>
+<a name="line-101"></a>    parseContents <font color=Red>=</font>
+<a name="line-102"></a>        <font color=Cyan>(</font>choice OneOf6 <font color=Cyan>$</font> choice TwoOf6 <font color=Cyan>$</font> choice ThreeOf6 <font color=Cyan>$</font> choice FourOf6
+<a name="line-103"></a>        <font color=Cyan>$</font> choice FiveOf6 <font color=Cyan>$</font> choice SixOf6
+<a name="line-104"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf6"</font><font color=Cyan>)</font>
+<a name="line-105"></a>    toContents <font color=Cyan>(</font>OneOf6 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-106"></a>    toContents <font color=Cyan>(</font>TwoOf6 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-107"></a>    toContents <font color=Cyan>(</font>ThreeOf6 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-108"></a>    toContents <font color=Cyan>(</font>FourOf6 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-109"></a>    toContents <font color=Cyan>(</font>FiveOf6 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-110"></a>    toContents <font color=Cyan>(</font>SixOf6 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-111"></a>
+<a name="line-112"></a><a name="OneOf7"></a><font color=Blue>----</font>
+<a name="line-113"></a><a name="OneOf7"></a><font color=Green><u>data</u></font> OneOf7 a b c d e f g
+<a name="line-114"></a>    <font color=Red>=</font> OneOf7 a <font color=Red>|</font> TwoOf7 b <font color=Red>|</font> ThreeOf7 c <font color=Red>|</font> FourOf7 d <font color=Red>|</font> FiveOf7 e <font color=Red>|</font> SixOf7 f
+<a name="line-115"></a>    <font color=Red>|</font> SevenOf7 g
+<a name="line-116"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-117"></a>
+<a name="line-118"></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="line-119"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>)</font>
+<a name="line-120"></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="line-121"></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="line-122"></a>
+<a name="line-123"></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="line-124"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>)</font>
+<a name="line-125"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf7 a b c d e f g<font color=Cyan>)</font>
+<a name="line-126"></a>  <font color=Green><u>where</u></font>
+<a name="line-127"></a>    parseContents <font color=Red>=</font>
+<a name="line-128"></a>        <font color=Cyan>(</font>choice OneOf7 <font color=Cyan>$</font> choice TwoOf7 <font color=Cyan>$</font> choice ThreeOf7 <font color=Cyan>$</font> choice FourOf7
+<a name="line-129"></a>        <font color=Cyan>$</font> choice FiveOf7 <font color=Cyan>$</font> choice SixOf7 <font color=Cyan>$</font> choice SevenOf7
+<a name="line-130"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf7"</font><font color=Cyan>)</font>
+<a name="line-131"></a>    toContents <font color=Cyan>(</font>OneOf7 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-132"></a>    toContents <font color=Cyan>(</font>TwoOf7 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-133"></a>    toContents <font color=Cyan>(</font>ThreeOf7 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-134"></a>    toContents <font color=Cyan>(</font>FourOf7 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-135"></a>    toContents <font color=Cyan>(</font>FiveOf7 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-136"></a>    toContents <font color=Cyan>(</font>SixOf7 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-137"></a>    toContents <font color=Cyan>(</font>SevenOf7 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-138"></a>
+<a name="line-139"></a><a name="OneOf8"></a><font color=Blue>----</font>
+<a name="line-140"></a><a name="OneOf8"></a><font color=Green><u>data</u></font> OneOf8 a b c d e f g h
+<a name="line-141"></a>    <font color=Red>=</font> OneOf8 a <font color=Red>|</font> TwoOf8 b <font color=Red>|</font> ThreeOf8 c <font color=Red>|</font> FourOf8 d <font color=Red>|</font> FiveOf8 e <font color=Red>|</font> SixOf8 f
+<a name="line-142"></a>    <font color=Red>|</font> SevenOf8 g <font color=Red>|</font> EightOf8 h
+<a name="line-143"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-144"></a>
+<a name="line-145"></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="line-146"></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="line-147"></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="line-148"></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="line-149"></a>
+<a name="line-150"></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="line-151"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>)</font>
+<a name="line-152"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf8 a b c d e f g h<font color=Cyan>)</font>
+<a name="line-153"></a>  <font color=Green><u>where</u></font>
+<a name="line-154"></a>    parseContents <font color=Red>=</font>
+<a name="line-155"></a>        <font color=Cyan>(</font>choice OneOf8 <font color=Cyan>$</font> choice TwoOf8 <font color=Cyan>$</font> choice ThreeOf8 <font color=Cyan>$</font> choice FourOf8
+<a name="line-156"></a>        <font color=Cyan>$</font> choice FiveOf8 <font color=Cyan>$</font> choice SixOf8 <font color=Cyan>$</font> choice SevenOf8 <font color=Cyan>$</font> choice EightOf8
+<a name="line-157"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf8"</font><font color=Cyan>)</font>
+<a name="line-158"></a>    toContents <font color=Cyan>(</font>OneOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-159"></a>    toContents <font color=Cyan>(</font>TwoOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-160"></a>    toContents <font color=Cyan>(</font>ThreeOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-161"></a>    toContents <font color=Cyan>(</font>FourOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-162"></a>    toContents <font color=Cyan>(</font>FiveOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-163"></a>    toContents <font color=Cyan>(</font>SixOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-164"></a>    toContents <font color=Cyan>(</font>SevenOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-165"></a>    toContents <font color=Cyan>(</font>EightOf8 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-166"></a>
+<a name="line-167"></a><a name="OneOf9"></a><font color=Blue>----</font>
+<a name="line-168"></a><a name="OneOf9"></a><font color=Green><u>data</u></font> OneOf9 a b c d e f g h i
+<a name="line-169"></a>    <font color=Red>=</font> OneOf9 a <font color=Red>|</font> TwoOf9 b <font color=Red>|</font> ThreeOf9 c <font color=Red>|</font> FourOf9 d <font color=Red>|</font> FiveOf9 e <font color=Red>|</font> SixOf9 f
+<a name="line-170"></a>    <font color=Red>|</font> SevenOf9 g <font color=Red>|</font> EightOf9 h <font color=Red>|</font> NineOf9 i
+<a name="line-171"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-172"></a>
+<a name="line-173"></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="line-174"></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="line-175"></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="line-176"></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="line-177"></a>
+<a name="line-178"></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="line-179"></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>
+<a name="line-180"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf9 a b c d e f g h i<font color=Cyan>)</font>
+<a name="line-181"></a>  <font color=Green><u>where</u></font>
+<a name="line-182"></a>    parseContents <font color=Red>=</font>
+<a name="line-183"></a>        <font color=Cyan>(</font>choice OneOf9 <font color=Cyan>$</font> choice TwoOf9 <font color=Cyan>$</font> choice ThreeOf9 <font color=Cyan>$</font> choice FourOf9
+<a name="line-184"></a>        <font color=Cyan>$</font> choice FiveOf9 <font color=Cyan>$</font> choice SixOf9 <font color=Cyan>$</font> choice SevenOf9 <font color=Cyan>$</font> choice EightOf9
+<a name="line-185"></a>        <font color=Cyan>$</font> choice NineOf9
+<a name="line-186"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf9"</font><font color=Cyan>)</font>
+<a name="line-187"></a>    toContents <font color=Cyan>(</font>OneOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-188"></a>    toContents <font color=Cyan>(</font>TwoOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-189"></a>    toContents <font color=Cyan>(</font>ThreeOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-190"></a>    toContents <font color=Cyan>(</font>FourOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-191"></a>    toContents <font color=Cyan>(</font>FiveOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-192"></a>    toContents <font color=Cyan>(</font>SixOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-193"></a>    toContents <font color=Cyan>(</font>SevenOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-194"></a>    toContents <font color=Cyan>(</font>EightOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-195"></a>    toContents <font color=Cyan>(</font>NineOf9 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-196"></a>
+<a name="line-197"></a><a name="OneOf10"></a><font color=Blue>----</font>
+<a name="line-198"></a><a name="OneOf10"></a><font color=Green><u>data</u></font> OneOf10 a b c d e f g h i j
+<a name="line-199"></a>    <font color=Red>=</font> OneOf10 a <font color=Red>|</font> TwoOf10 b <font color=Red>|</font> ThreeOf10 c <font color=Red>|</font> FourOf10 d <font color=Red>|</font> FiveOf10 e
+<a name="line-200"></a>    <font color=Red>|</font> SixOf10 f <font color=Red>|</font> SevenOf10 g <font color=Red>|</font> EightOf10 h <font color=Red>|</font> NineOf10 i <font color=Red>|</font> TenOf10 j
+<a name="line-201"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-202"></a>
+<a name="line-203"></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="line-204"></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="line-205"></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="line-206"></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="line-207"></a>
+<a name="line-208"></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="line-209"></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>
+<a name="line-210"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf10 a b c d e f g h i j<font color=Cyan>)</font>
+<a name="line-211"></a>  <font color=Green><u>where</u></font>
+<a name="line-212"></a>    parseContents <font color=Red>=</font>
+<a name="line-213"></a>        <font color=Cyan>(</font>choice OneOf10 <font color=Cyan>$</font> choice TwoOf10 <font color=Cyan>$</font> choice ThreeOf10 <font color=Cyan>$</font> choice FourOf10
+<a name="line-214"></a>        <font color=Cyan>$</font> choice FiveOf10 <font color=Cyan>$</font> choice SixOf10 <font color=Cyan>$</font> choice SevenOf10
+<a name="line-215"></a>        <font color=Cyan>$</font> choice EightOf10 <font color=Cyan>$</font> choice NineOf10 <font color=Cyan>$</font> choice TenOf10
+<a name="line-216"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf10"</font><font color=Cyan>)</font>
+<a name="line-217"></a>    toContents <font color=Cyan>(</font>OneOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-218"></a>    toContents <font color=Cyan>(</font>TwoOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-219"></a>    toContents <font color=Cyan>(</font>ThreeOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-220"></a>    toContents <font color=Cyan>(</font>FourOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-221"></a>    toContents <font color=Cyan>(</font>FiveOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-222"></a>    toContents <font color=Cyan>(</font>SixOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-223"></a>    toContents <font color=Cyan>(</font>SevenOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-224"></a>    toContents <font color=Cyan>(</font>EightOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-225"></a>    toContents <font color=Cyan>(</font>NineOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-226"></a>    toContents <font color=Cyan>(</font>TenOf10 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-227"></a>
+<a name="line-228"></a><a name="OneOf11"></a><font color=Blue>----</font>
+<a name="line-229"></a><a name="OneOf11"></a><font color=Green><u>data</u></font> OneOf11 a b c d e f g h i j k
+<a name="line-230"></a>    <font color=Red>=</font> OneOf11 a <font color=Red>|</font> TwoOf11 b <font color=Red>|</font> ThreeOf11 c <font color=Red>|</font> FourOf11 d <font color=Red>|</font> FiveOf11 e
+<a name="line-231"></a>    <font color=Red>|</font> SixOf11 f <font color=Red>|</font> SevenOf11 g <font color=Red>|</font> EightOf11 h <font color=Red>|</font> NineOf11 i <font color=Red>|</font> TenOf11 j
+<a name="line-232"></a>    <font color=Red>|</font> ElevenOf11 k
+<a name="line-233"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-234"></a>
+<a name="line-235"></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="line-236"></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="line-237"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>)</font>
+<a name="line-238"></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="line-239"></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="line-240"></a>
+<a name="line-241"></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="line-242"></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
+<a name="line-243"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>)</font>
+<a name="line-244"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf11 a b c d e f g h i j k<font color=Cyan>)</font>
+<a name="line-245"></a>  <font color=Green><u>where</u></font>
+<a name="line-246"></a>    parseContents <font color=Red>=</font>
+<a name="line-247"></a>        <font color=Cyan>(</font>choice OneOf11 <font color=Cyan>$</font> choice TwoOf11 <font color=Cyan>$</font> choice ThreeOf11 <font color=Cyan>$</font> choice FourOf11
+<a name="line-248"></a>        <font color=Cyan>$</font> choice FiveOf11 <font color=Cyan>$</font> choice SixOf11 <font color=Cyan>$</font> choice SevenOf11
+<a name="line-249"></a>        <font color=Cyan>$</font> choice EightOf11 <font color=Cyan>$</font> choice NineOf11 <font color=Cyan>$</font> choice TenOf11
+<a name="line-250"></a>        <font color=Cyan>$</font> choice ElevenOf11
+<a name="line-251"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf11"</font><font color=Cyan>)</font>
+<a name="line-252"></a>    toContents <font color=Cyan>(</font>OneOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-253"></a>    toContents <font color=Cyan>(</font>TwoOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-254"></a>    toContents <font color=Cyan>(</font>ThreeOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-255"></a>    toContents <font color=Cyan>(</font>FourOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-256"></a>    toContents <font color=Cyan>(</font>FiveOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-257"></a>    toContents <font color=Cyan>(</font>SixOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-258"></a>    toContents <font color=Cyan>(</font>SevenOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-259"></a>    toContents <font color=Cyan>(</font>EightOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-260"></a>    toContents <font color=Cyan>(</font>NineOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-261"></a>    toContents <font color=Cyan>(</font>TenOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-262"></a>    toContents <font color=Cyan>(</font>ElevenOf11 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-263"></a>
+<a name="line-264"></a><a name="OneOf12"></a><font color=Blue>----</font>
+<a name="line-265"></a><a name="OneOf12"></a><font color=Green><u>data</u></font> OneOf12 a b c d e f g h i j k l
+<a name="line-266"></a>    <font color=Red>=</font> OneOf12 a <font color=Red>|</font> TwoOf12 b <font color=Red>|</font> ThreeOf12 c <font color=Red>|</font> FourOf12 d <font color=Red>|</font> FiveOf12 e
+<a name="line-267"></a>    <font color=Red>|</font> SixOf12 f <font color=Red>|</font> SevenOf12 g <font color=Red>|</font> EightOf12 h <font color=Red>|</font> NineOf12 i <font color=Red>|</font> TenOf12 j
+<a name="line-268"></a>    <font color=Red>|</font> ElevenOf12 k <font color=Red>|</font> TwelveOf12 l
+<a name="line-269"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-270"></a>
+<a name="line-271"></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="line-272"></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="line-273"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>)</font>
+<a name="line-274"></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="line-275"></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="line-276"></a>
+<a name="line-277"></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="line-278"></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
+<a name="line-279"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>)</font>
+<a name="line-280"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf12 a b c d e f g h i j k l<font color=Cyan>)</font>
+<a name="line-281"></a>  <font color=Green><u>where</u></font>
+<a name="line-282"></a>    parseContents <font color=Red>=</font>
+<a name="line-283"></a>        <font color=Cyan>(</font>choice OneOf12 <font color=Cyan>$</font> choice TwoOf12 <font color=Cyan>$</font> choice ThreeOf12 <font color=Cyan>$</font> choice FourOf12
+<a name="line-284"></a>        <font color=Cyan>$</font> choice FiveOf12 <font color=Cyan>$</font> choice SixOf12 <font color=Cyan>$</font> choice SevenOf12
+<a name="line-285"></a>        <font color=Cyan>$</font> choice EightOf12 <font color=Cyan>$</font> choice NineOf12 <font color=Cyan>$</font> choice TenOf12
+<a name="line-286"></a>        <font color=Cyan>$</font> choice ElevenOf12 <font color=Cyan>$</font> choice TwelveOf12
+<a name="line-287"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf12"</font><font color=Cyan>)</font>
+<a name="line-288"></a>    toContents <font color=Cyan>(</font>OneOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-289"></a>    toContents <font color=Cyan>(</font>TwoOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-290"></a>    toContents <font color=Cyan>(</font>ThreeOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-291"></a>    toContents <font color=Cyan>(</font>FourOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-292"></a>    toContents <font color=Cyan>(</font>FiveOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-293"></a>    toContents <font color=Cyan>(</font>SixOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-294"></a>    toContents <font color=Cyan>(</font>SevenOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-295"></a>    toContents <font color=Cyan>(</font>EightOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-296"></a>    toContents <font color=Cyan>(</font>NineOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-297"></a>    toContents <font color=Cyan>(</font>TenOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-298"></a>    toContents <font color=Cyan>(</font>ElevenOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-299"></a>    toContents <font color=Cyan>(</font>TwelveOf12 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-300"></a>
+<a name="line-301"></a><a name="OneOf13"></a><font color=Blue>----</font>
+<a name="line-302"></a><a name="OneOf13"></a><font color=Green><u>data</u></font> OneOf13 a b c d e f g h i j k l m
+<a name="line-303"></a>    <font color=Red>=</font> OneOf13 a <font color=Red>|</font> TwoOf13 b <font color=Red>|</font> ThreeOf13 c <font color=Red>|</font> FourOf13 d <font color=Red>|</font> FiveOf13 e
+<a name="line-304"></a>    <font color=Red>|</font> SixOf13 f <font color=Red>|</font> SevenOf13 g <font color=Red>|</font> EightOf13 h <font color=Red>|</font> NineOf13 i <font color=Red>|</font> TenOf13 j
+<a name="line-305"></a>    <font color=Red>|</font> ElevenOf13 k <font color=Red>|</font> TwelveOf13 l <font color=Red>|</font> ThirteenOf13 m
+<a name="line-306"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-307"></a>
+<a name="line-308"></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="line-309"></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="line-310"></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="line-311"></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="line-312"></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="line-313"></a>
+<a name="line-314"></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="line-315"></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
+<a name="line-316"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>)</font>
+<a name="line-317"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf13 a b c d e f g h i j k l m<font color=Cyan>)</font>
+<a name="line-318"></a>  <font color=Green><u>where</u></font>
+<a name="line-319"></a>    parseContents <font color=Red>=</font>
+<a name="line-320"></a>        <font color=Cyan>(</font>choice OneOf13 <font color=Cyan>$</font> choice TwoOf13 <font color=Cyan>$</font> choice ThreeOf13 <font color=Cyan>$</font> choice FourOf13
+<a name="line-321"></a>        <font color=Cyan>$</font> choice FiveOf13 <font color=Cyan>$</font> choice SixOf13 <font color=Cyan>$</font> choice SevenOf13
+<a name="line-322"></a>        <font color=Cyan>$</font> choice EightOf13 <font color=Cyan>$</font> choice NineOf13 <font color=Cyan>$</font> choice TenOf13
+<a name="line-323"></a>        <font color=Cyan>$</font> choice ElevenOf13 <font color=Cyan>$</font> choice TwelveOf13 <font color=Cyan>$</font> choice ThirteenOf13
+<a name="line-324"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf13"</font><font color=Cyan>)</font>
+<a name="line-325"></a>    toContents <font color=Cyan>(</font>OneOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-326"></a>    toContents <font color=Cyan>(</font>TwoOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-327"></a>    toContents <font color=Cyan>(</font>ThreeOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-328"></a>    toContents <font color=Cyan>(</font>FourOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-329"></a>    toContents <font color=Cyan>(</font>FiveOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-330"></a>    toContents <font color=Cyan>(</font>SixOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-331"></a>    toContents <font color=Cyan>(</font>SevenOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-332"></a>    toContents <font color=Cyan>(</font>EightOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-333"></a>    toContents <font color=Cyan>(</font>NineOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-334"></a>    toContents <font color=Cyan>(</font>TenOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-335"></a>    toContents <font color=Cyan>(</font>ElevenOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-336"></a>    toContents <font color=Cyan>(</font>TwelveOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-337"></a>    toContents <font color=Cyan>(</font>ThirteenOf13 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-338"></a>
+<a name="line-339"></a><a name="OneOf14"></a><font color=Blue>----</font>
+<a name="line-340"></a><a name="OneOf14"></a><font color=Green><u>data</u></font> OneOf14 a b c d e f g h i j k l m n
+<a name="line-341"></a>    <font color=Red>=</font> OneOf14 a <font color=Red>|</font> TwoOf14 b <font color=Red>|</font> ThreeOf14 c <font color=Red>|</font> FourOf14 d <font color=Red>|</font> FiveOf14 e
+<a name="line-342"></a>    <font color=Red>|</font> SixOf14 f <font color=Red>|</font> SevenOf14 g <font color=Red>|</font> EightOf14 h <font color=Red>|</font> NineOf14 i <font color=Red>|</font> TenOf14 j
+<a name="line-343"></a>    <font color=Red>|</font> ElevenOf14 k <font color=Red>|</font> TwelveOf14 l <font color=Red>|</font> ThirteenOf14 m <font color=Red>|</font> FourteenOf14 n
+<a name="line-344"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-345"></a>
+<a name="line-346"></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="line-347"></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="line-348"></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="line-349"></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="line-350"></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="line-351"></a>
+<a name="line-352"></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="line-353"></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
+<a name="line-354"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>,</font>XmlContent n<font color=Cyan>)</font>
+<a name="line-355"></a>    <font color=Red>=&gt;</font> XmlContent <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="line-356"></a>  <font color=Green><u>where</u></font>
+<a name="line-357"></a>    parseContents <font color=Red>=</font>
+<a name="line-358"></a>        <font color=Cyan>(</font>choice OneOf14 <font color=Cyan>$</font> choice TwoOf14 <font color=Cyan>$</font> choice ThreeOf14 <font color=Cyan>$</font> choice FourOf14
+<a name="line-359"></a>        <font color=Cyan>$</font> choice FiveOf14 <font color=Cyan>$</font> choice SixOf14 <font color=Cyan>$</font> choice SevenOf14
+<a name="line-360"></a>        <font color=Cyan>$</font> choice EightOf14 <font color=Cyan>$</font> choice NineOf14 <font color=Cyan>$</font> choice TenOf14
+<a name="line-361"></a>        <font color=Cyan>$</font> choice ElevenOf14 <font color=Cyan>$</font> choice TwelveOf14 <font color=Cyan>$</font> choice ThirteenOf14
+<a name="line-362"></a>        <font color=Cyan>$</font> choice FourteenOf14
+<a name="line-363"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf14"</font><font color=Cyan>)</font>
+<a name="line-364"></a>    toContents <font color=Cyan>(</font>OneOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-365"></a>    toContents <font color=Cyan>(</font>TwoOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-366"></a>    toContents <font color=Cyan>(</font>ThreeOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-367"></a>    toContents <font color=Cyan>(</font>FourOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-368"></a>    toContents <font color=Cyan>(</font>FiveOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-369"></a>    toContents <font color=Cyan>(</font>SixOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-370"></a>    toContents <font color=Cyan>(</font>SevenOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-371"></a>    toContents <font color=Cyan>(</font>EightOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-372"></a>    toContents <font color=Cyan>(</font>NineOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-373"></a>    toContents <font color=Cyan>(</font>TenOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-374"></a>    toContents <font color=Cyan>(</font>ElevenOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-375"></a>    toContents <font color=Cyan>(</font>TwelveOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-376"></a>    toContents <font color=Cyan>(</font>ThirteenOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-377"></a>    toContents <font color=Cyan>(</font>FourteenOf14 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-378"></a>
+<a name="line-379"></a><a name="OneOf15"></a><font color=Blue>----</font>
+<a name="line-380"></a><a name="OneOf15"></a><font color=Green><u>data</u></font> OneOf15 a b c d e f g h i j k l m n o
+<a name="line-381"></a>    <font color=Red>=</font> OneOf15 a <font color=Red>|</font> TwoOf15 b <font color=Red>|</font> ThreeOf15 c <font color=Red>|</font> FourOf15 d <font color=Red>|</font> FiveOf15 e
+<a name="line-382"></a>    <font color=Red>|</font> SixOf15 f <font color=Red>|</font> SevenOf15 g <font color=Red>|</font> EightOf15 h <font color=Red>|</font> NineOf15 i <font color=Red>|</font> TenOf15 j
+<a name="line-383"></a>    <font color=Red>|</font> ElevenOf15 k <font color=Red>|</font> TwelveOf15 l <font color=Red>|</font> ThirteenOf15 m <font color=Red>|</font> FourteenOf15 n
+<a name="line-384"></a>    <font color=Red>|</font> FifteenOf15 o
+<a name="line-385"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-386"></a>
+<a name="line-387"></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="line-388"></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="line-389"></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="line-390"></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="line-391"></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="line-392"></a>
+<a name="line-393"></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="line-394"></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
+<a name="line-395"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>,</font>XmlContent n<font color=Cyan>,</font>XmlContent o<font color=Cyan>)</font>
+<a name="line-396"></a>    <font color=Red>=&gt;</font> XmlContent <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="line-397"></a>  <font color=Green><u>where</u></font>
+<a name="line-398"></a>    parseContents <font color=Red>=</font>
+<a name="line-399"></a>        <font color=Cyan>(</font>choice OneOf15 <font color=Cyan>$</font> choice TwoOf15 <font color=Cyan>$</font> choice ThreeOf15 <font color=Cyan>$</font> choice FourOf15
+<a name="line-400"></a>        <font color=Cyan>$</font> choice FiveOf15 <font color=Cyan>$</font> choice SixOf15 <font color=Cyan>$</font> choice SevenOf15
+<a name="line-401"></a>        <font color=Cyan>$</font> choice EightOf15 <font color=Cyan>$</font> choice NineOf15 <font color=Cyan>$</font> choice TenOf15
+<a name="line-402"></a>        <font color=Cyan>$</font> choice ElevenOf15 <font color=Cyan>$</font> choice TwelveOf15 <font color=Cyan>$</font> choice ThirteenOf15
+<a name="line-403"></a>        <font color=Cyan>$</font> choice FourteenOf15 <font color=Cyan>$</font> choice FifteenOf15
+<a name="line-404"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf15"</font><font color=Cyan>)</font>
+<a name="line-405"></a>    toContents <font color=Cyan>(</font>OneOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-406"></a>    toContents <font color=Cyan>(</font>TwoOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-407"></a>    toContents <font color=Cyan>(</font>ThreeOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-408"></a>    toContents <font color=Cyan>(</font>FourOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-409"></a>    toContents <font color=Cyan>(</font>FiveOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-410"></a>    toContents <font color=Cyan>(</font>SixOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-411"></a>    toContents <font color=Cyan>(</font>SevenOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-412"></a>    toContents <font color=Cyan>(</font>EightOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-413"></a>    toContents <font color=Cyan>(</font>NineOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-414"></a>    toContents <font color=Cyan>(</font>TenOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-415"></a>    toContents <font color=Cyan>(</font>ElevenOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-416"></a>    toContents <font color=Cyan>(</font>TwelveOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-417"></a>    toContents <font color=Cyan>(</font>ThirteenOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-418"></a>    toContents <font color=Cyan>(</font>FourteenOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-419"></a>    toContents <font color=Cyan>(</font>FifteenOf15 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-420"></a>
+<a name="line-421"></a><a name="OneOf16"></a><font color=Blue>----</font>
+<a name="line-422"></a><a name="OneOf16"></a><font color=Green><u>data</u></font> OneOf16 a b c d e f g h i j k l m n o p
+<a name="line-423"></a>    <font color=Red>=</font> OneOf16 a <font color=Red>|</font> TwoOf16 b <font color=Red>|</font> ThreeOf16 c <font color=Red>|</font> FourOf16 d <font color=Red>|</font> FiveOf16 e
+<a name="line-424"></a>    <font color=Red>|</font> SixOf16 f <font color=Red>|</font> SevenOf16 g <font color=Red>|</font> EightOf16 h <font color=Red>|</font> NineOf16 i <font color=Red>|</font> TenOf16 j
+<a name="line-425"></a>    <font color=Red>|</font> ElevenOf16 k <font color=Red>|</font> TwelveOf16 l <font color=Red>|</font> ThirteenOf16 m <font color=Red>|</font> FourteenOf16 n
+<a name="line-426"></a>    <font color=Red>|</font> FifteenOf16 o <font color=Red>|</font> SixteenOf16 p
+<a name="line-427"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-428"></a>
+<a name="line-429"></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="line-430"></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="line-431"></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="line-432"></a>          <font color=Cyan>,</font>HTypeable p<font color=Cyan>)</font>
+<a name="line-433"></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="line-434"></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="line-435"></a>
+<a name="line-436"></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="line-437"></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
+<a name="line-438"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>,</font>XmlContent n<font color=Cyan>,</font>XmlContent o
+<a name="line-439"></a>          <font color=Cyan>,</font>XmlContent p<font color=Cyan>)</font>
+<a name="line-440"></a>    <font color=Red>=&gt;</font> XmlContent <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="line-441"></a>  <font color=Green><u>where</u></font>
+<a name="line-442"></a>    parseContents <font color=Red>=</font>
+<a name="line-443"></a>        <font color=Cyan>(</font>choice OneOf16 <font color=Cyan>$</font> choice TwoOf16 <font color=Cyan>$</font> choice ThreeOf16 <font color=Cyan>$</font> choice FourOf16
+<a name="line-444"></a>        <font color=Cyan>$</font> choice FiveOf16 <font color=Cyan>$</font> choice SixOf16 <font color=Cyan>$</font> choice SevenOf16
+<a name="line-445"></a>        <font color=Cyan>$</font> choice EightOf16 <font color=Cyan>$</font> choice NineOf16 <font color=Cyan>$</font> choice TenOf16
+<a name="line-446"></a>        <font color=Cyan>$</font> choice ElevenOf16 <font color=Cyan>$</font> choice TwelveOf16 <font color=Cyan>$</font> choice ThirteenOf16
+<a name="line-447"></a>        <font color=Cyan>$</font> choice FourteenOf16 <font color=Cyan>$</font> choice FifteenOf16 <font color=Cyan>$</font> choice SixteenOf16
+<a name="line-448"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf16"</font><font color=Cyan>)</font>
+<a name="line-449"></a>    toContents <font color=Cyan>(</font>OneOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-450"></a>    toContents <font color=Cyan>(</font>TwoOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-451"></a>    toContents <font color=Cyan>(</font>ThreeOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-452"></a>    toContents <font color=Cyan>(</font>FourOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-453"></a>    toContents <font color=Cyan>(</font>FiveOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-454"></a>    toContents <font color=Cyan>(</font>SixOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-455"></a>    toContents <font color=Cyan>(</font>SevenOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-456"></a>    toContents <font color=Cyan>(</font>EightOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-457"></a>    toContents <font color=Cyan>(</font>NineOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-458"></a>    toContents <font color=Cyan>(</font>TenOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-459"></a>    toContents <font color=Cyan>(</font>ElevenOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-460"></a>    toContents <font color=Cyan>(</font>TwelveOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-461"></a>    toContents <font color=Cyan>(</font>ThirteenOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-462"></a>    toContents <font color=Cyan>(</font>FourteenOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-463"></a>    toContents <font color=Cyan>(</font>FifteenOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-464"></a>    toContents <font color=Cyan>(</font>SixteenOf16 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-465"></a>
+<a name="line-466"></a><a name="OneOf17"></a><font color=Blue>----</font>
+<a name="line-467"></a><a name="OneOf17"></a><font color=Green><u>data</u></font> OneOf17 a b c d e f g h i j k l m n o p q
+<a name="line-468"></a>    <font color=Red>=</font> OneOf17 a <font color=Red>|</font> TwoOf17 b <font color=Red>|</font> ThreeOf17 c <font color=Red>|</font> FourOf17 d <font color=Red>|</font> FiveOf17 e
+<a name="line-469"></a>    <font color=Red>|</font> SixOf17 f <font color=Red>|</font> SevenOf17 g <font color=Red>|</font> EightOf17 h <font color=Red>|</font> NineOf17 i <font color=Red>|</font> TenOf17 j
+<a name="line-470"></a>    <font color=Red>|</font> ElevenOf17 k <font color=Red>|</font> TwelveOf17 l <font color=Red>|</font> ThirteenOf17 m <font color=Red>|</font> FourteenOf17 n
+<a name="line-471"></a>    <font color=Red>|</font> FifteenOf17 o <font color=Red>|</font> SixteenOf17 p <font color=Red>|</font> SeventeenOf17 q
+<a name="line-472"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-473"></a>
+<a name="line-474"></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="line-475"></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="line-476"></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="line-477"></a>          <font color=Cyan>,</font>HTypeable p<font color=Cyan>,</font>HTypeable q<font color=Cyan>)</font>
+<a name="line-478"></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="line-479"></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="line-480"></a>
+<a name="line-481"></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="line-482"></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
+<a name="line-483"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>,</font>XmlContent n<font color=Cyan>,</font>XmlContent o
+<a name="line-484"></a>          <font color=Cyan>,</font>XmlContent p<font color=Cyan>,</font>XmlContent q<font color=Cyan>)</font>
+<a name="line-485"></a>    <font color=Red>=&gt;</font> XmlContent <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="line-486"></a>  <font color=Green><u>where</u></font>
+<a name="line-487"></a>    parseContents <font color=Red>=</font>
+<a name="line-488"></a>        <font color=Cyan>(</font>choice OneOf17 <font color=Cyan>$</font> choice TwoOf17 <font color=Cyan>$</font> choice ThreeOf17 <font color=Cyan>$</font> choice FourOf17
+<a name="line-489"></a>        <font color=Cyan>$</font> choice FiveOf17 <font color=Cyan>$</font> choice SixOf17 <font color=Cyan>$</font> choice SevenOf17
+<a name="line-490"></a>        <font color=Cyan>$</font> choice EightOf17 <font color=Cyan>$</font> choice NineOf17 <font color=Cyan>$</font> choice TenOf17
+<a name="line-491"></a>        <font color=Cyan>$</font> choice ElevenOf17 <font color=Cyan>$</font> choice TwelveOf17 <font color=Cyan>$</font> choice ThirteenOf17
+<a name="line-492"></a>        <font color=Cyan>$</font> choice FourteenOf17 <font color=Cyan>$</font> choice FifteenOf17 <font color=Cyan>$</font> choice SixteenOf17
+<a name="line-493"></a>        <font color=Cyan>$</font> choice SeventeenOf17
+<a name="line-494"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf17"</font><font color=Cyan>)</font>
+<a name="line-495"></a>    toContents <font color=Cyan>(</font>OneOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-496"></a>    toContents <font color=Cyan>(</font>TwoOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-497"></a>    toContents <font color=Cyan>(</font>ThreeOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-498"></a>    toContents <font color=Cyan>(</font>FourOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-499"></a>    toContents <font color=Cyan>(</font>FiveOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-500"></a>    toContents <font color=Cyan>(</font>SixOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-501"></a>    toContents <font color=Cyan>(</font>SevenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-502"></a>    toContents <font color=Cyan>(</font>EightOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-503"></a>    toContents <font color=Cyan>(</font>NineOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-504"></a>    toContents <font color=Cyan>(</font>TenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-505"></a>    toContents <font color=Cyan>(</font>ElevenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-506"></a>    toContents <font color=Cyan>(</font>TwelveOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-507"></a>    toContents <font color=Cyan>(</font>ThirteenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-508"></a>    toContents <font color=Cyan>(</font>FourteenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-509"></a>    toContents <font color=Cyan>(</font>FifteenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-510"></a>    toContents <font color=Cyan>(</font>SixteenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-511"></a>    toContents <font color=Cyan>(</font>SeventeenOf17 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-512"></a>
+<a name="line-513"></a><a name="OneOf18"></a><font color=Blue>----</font>
+<a name="line-514"></a><a name="OneOf18"></a><font color=Green><u>data</u></font> OneOf18 a b c d e f g h i j k l m n o p q r
+<a name="line-515"></a>    <font color=Red>=</font> OneOf18 a <font color=Red>|</font> TwoOf18 b <font color=Red>|</font> ThreeOf18 c <font color=Red>|</font> FourOf18 d <font color=Red>|</font> FiveOf18 e
+<a name="line-516"></a>    <font color=Red>|</font> SixOf18 f <font color=Red>|</font> SevenOf18 g <font color=Red>|</font> EightOf18 h <font color=Red>|</font> NineOf18 i <font color=Red>|</font> TenOf18 j
+<a name="line-517"></a>    <font color=Red>|</font> ElevenOf18 k <font color=Red>|</font> TwelveOf18 l <font color=Red>|</font> ThirteenOf18 m <font color=Red>|</font> FourteenOf18 n
+<a name="line-518"></a>    <font color=Red>|</font> FifteenOf18 o <font color=Red>|</font> SixteenOf18 p <font color=Red>|</font> SeventeenOf18 q <font color=Red>|</font> EighteenOf18 r
+<a name="line-519"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-520"></a>
+<a name="line-521"></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="line-522"></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="line-523"></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="line-524"></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="line-525"></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="line-526"></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="line-527"></a>
+<a name="line-528"></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="line-529"></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
+<a name="line-530"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>,</font>XmlContent n<font color=Cyan>,</font>XmlContent o
+<a name="line-531"></a>          <font color=Cyan>,</font>XmlContent p<font color=Cyan>,</font>XmlContent q<font color=Cyan>,</font>XmlContent r<font color=Cyan>)</font>
+<a name="line-532"></a>    <font color=Red>=&gt;</font> XmlContent <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="line-533"></a>  <font color=Green><u>where</u></font>
+<a name="line-534"></a>    parseContents <font color=Red>=</font>
+<a name="line-535"></a>        <font color=Cyan>(</font>choice OneOf18 <font color=Cyan>$</font> choice TwoOf18 <font color=Cyan>$</font> choice ThreeOf18 <font color=Cyan>$</font> choice FourOf18
+<a name="line-536"></a>        <font color=Cyan>$</font> choice FiveOf18 <font color=Cyan>$</font> choice SixOf18 <font color=Cyan>$</font> choice SevenOf18
+<a name="line-537"></a>        <font color=Cyan>$</font> choice EightOf18 <font color=Cyan>$</font> choice NineOf18 <font color=Cyan>$</font> choice TenOf18
+<a name="line-538"></a>        <font color=Cyan>$</font> choice ElevenOf18 <font color=Cyan>$</font> choice TwelveOf18 <font color=Cyan>$</font> choice ThirteenOf18
+<a name="line-539"></a>        <font color=Cyan>$</font> choice FourteenOf18 <font color=Cyan>$</font> choice FifteenOf18 <font color=Cyan>$</font> choice SixteenOf18
+<a name="line-540"></a>        <font color=Cyan>$</font> choice SeventeenOf18 <font color=Cyan>$</font> choice EighteenOf18
+<a name="line-541"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf18"</font><font color=Cyan>)</font>
+<a name="line-542"></a>    toContents <font color=Cyan>(</font>OneOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-543"></a>    toContents <font color=Cyan>(</font>TwoOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-544"></a>    toContents <font color=Cyan>(</font>ThreeOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-545"></a>    toContents <font color=Cyan>(</font>FourOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-546"></a>    toContents <font color=Cyan>(</font>FiveOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-547"></a>    toContents <font color=Cyan>(</font>SixOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-548"></a>    toContents <font color=Cyan>(</font>SevenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-549"></a>    toContents <font color=Cyan>(</font>EightOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-550"></a>    toContents <font color=Cyan>(</font>NineOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-551"></a>    toContents <font color=Cyan>(</font>TenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-552"></a>    toContents <font color=Cyan>(</font>ElevenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-553"></a>    toContents <font color=Cyan>(</font>TwelveOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-554"></a>    toContents <font color=Cyan>(</font>ThirteenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-555"></a>    toContents <font color=Cyan>(</font>FourteenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-556"></a>    toContents <font color=Cyan>(</font>FifteenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-557"></a>    toContents <font color=Cyan>(</font>SixteenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-558"></a>    toContents <font color=Cyan>(</font>SeventeenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-559"></a>    toContents <font color=Cyan>(</font>EighteenOf18 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-560"></a>
+<a name="line-561"></a><a name="OneOf19"></a><font color=Blue>----</font>
+<a name="line-562"></a><a name="OneOf19"></a><font color=Green><u>data</u></font> OneOf19 a b c d e f g h i j k l m n o p q r s
+<a name="line-563"></a>    <font color=Red>=</font> OneOf19 a <font color=Red>|</font> TwoOf19 b <font color=Red>|</font> ThreeOf19 c <font color=Red>|</font> FourOf19 d <font color=Red>|</font> FiveOf19 e
+<a name="line-564"></a>    <font color=Red>|</font> SixOf19 f <font color=Red>|</font> SevenOf19 g <font color=Red>|</font> EightOf19 h <font color=Red>|</font> NineOf19 i <font color=Red>|</font> TenOf19 j
+<a name="line-565"></a>    <font color=Red>|</font> ElevenOf19 k <font color=Red>|</font> TwelveOf19 l <font color=Red>|</font> ThirteenOf19 m <font color=Red>|</font> FourteenOf19 n
+<a name="line-566"></a>    <font color=Red>|</font> FifteenOf19 o <font color=Red>|</font> SixteenOf19 p <font color=Red>|</font> SeventeenOf19 q <font color=Red>|</font> EighteenOf19 r
+<a name="line-567"></a>    <font color=Red>|</font> NineteenOf19 s
+<a name="line-568"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-569"></a>
+<a name="line-570"></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="line-571"></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="line-572"></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="line-573"></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="line-574"></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="line-575"></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="line-576"></a>
+<a name="line-577"></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="line-578"></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
+<a name="line-579"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>,</font>XmlContent n<font color=Cyan>,</font>XmlContent o
+<a name="line-580"></a>          <font color=Cyan>,</font>XmlContent p<font color=Cyan>,</font>XmlContent q<font color=Cyan>,</font>XmlContent r<font color=Cyan>,</font>XmlContent s<font color=Cyan>)</font>
+<a name="line-581"></a>    <font color=Red>=&gt;</font> XmlContent <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="line-582"></a>  <font color=Green><u>where</u></font>
+<a name="line-583"></a>    parseContents <font color=Red>=</font>
+<a name="line-584"></a>        <font color=Cyan>(</font>choice OneOf19 <font color=Cyan>$</font> choice TwoOf19 <font color=Cyan>$</font> choice ThreeOf19 <font color=Cyan>$</font> choice FourOf19
+<a name="line-585"></a>        <font color=Cyan>$</font> choice FiveOf19 <font color=Cyan>$</font> choice SixOf19 <font color=Cyan>$</font> choice SevenOf19
+<a name="line-586"></a>        <font color=Cyan>$</font> choice EightOf19 <font color=Cyan>$</font> choice NineOf19 <font color=Cyan>$</font> choice TenOf19
+<a name="line-587"></a>        <font color=Cyan>$</font> choice ElevenOf19 <font color=Cyan>$</font> choice TwelveOf19 <font color=Cyan>$</font> choice ThirteenOf19
+<a name="line-588"></a>        <font color=Cyan>$</font> choice FourteenOf19 <font color=Cyan>$</font> choice FifteenOf19 <font color=Cyan>$</font> choice SixteenOf19
+<a name="line-589"></a>        <font color=Cyan>$</font> choice SeventeenOf19 <font color=Cyan>$</font> choice EighteenOf19 <font color=Cyan>$</font> choice NineteenOf19
+<a name="line-590"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf19"</font><font color=Cyan>)</font>
+<a name="line-591"></a>    toContents <font color=Cyan>(</font>OneOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-592"></a>    toContents <font color=Cyan>(</font>TwoOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-593"></a>    toContents <font color=Cyan>(</font>ThreeOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-594"></a>    toContents <font color=Cyan>(</font>FourOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-595"></a>    toContents <font color=Cyan>(</font>FiveOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-596"></a>    toContents <font color=Cyan>(</font>SixOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-597"></a>    toContents <font color=Cyan>(</font>SevenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-598"></a>    toContents <font color=Cyan>(</font>EightOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-599"></a>    toContents <font color=Cyan>(</font>NineOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-600"></a>    toContents <font color=Cyan>(</font>TenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-601"></a>    toContents <font color=Cyan>(</font>ElevenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-602"></a>    toContents <font color=Cyan>(</font>TwelveOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-603"></a>    toContents <font color=Cyan>(</font>ThirteenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-604"></a>    toContents <font color=Cyan>(</font>FourteenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-605"></a>    toContents <font color=Cyan>(</font>FifteenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-606"></a>    toContents <font color=Cyan>(</font>SixteenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-607"></a>    toContents <font color=Cyan>(</font>SeventeenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-608"></a>    toContents <font color=Cyan>(</font>EighteenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-609"></a>    toContents <font color=Cyan>(</font>NineteenOf19 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-610"></a>
+<a name="line-611"></a><a name="OneOf20"></a><font color=Blue>----</font>
+<a name="line-612"></a><a name="OneOf20"></a><font color=Green><u>data</u></font> OneOf20 a b c d e f g h i j k l m n o p q r s t
+<a name="line-613"></a>    <font color=Red>=</font> OneOf20 a <font color=Red>|</font> TwoOf20 b <font color=Red>|</font> ThreeOf20 c <font color=Red>|</font> FourOf20 d <font color=Red>|</font> FiveOf20 e
+<a name="line-614"></a>    <font color=Red>|</font> SixOf20 f <font color=Red>|</font> SevenOf20 g <font color=Red>|</font> EightOf20 h <font color=Red>|</font> NineOf20 i <font color=Red>|</font> TenOf20 j
+<a name="line-615"></a>    <font color=Red>|</font> ElevenOf20 k <font color=Red>|</font> TwelveOf20 l <font color=Red>|</font> ThirteenOf20 m <font color=Red>|</font> FourteenOf20 n
+<a name="line-616"></a>    <font color=Red>|</font> FifteenOf20 o <font color=Red>|</font> SixteenOf20 p <font color=Red>|</font> SeventeenOf20 q <font color=Red>|</font> EighteenOf20 r
+<a name="line-617"></a>    <font color=Red>|</font> NineteenOf20 s <font color=Red>|</font> TwentyOf20 t
+<a name="line-618"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-619"></a>
+<a name="line-620"></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="line-621"></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="line-622"></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="line-623"></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="line-624"></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="line-625"></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="line-626"></a>
+<a name="line-627"></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="line-628"></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
+<a name="line-629"></a>          <font color=Cyan>,</font>XmlContent k<font color=Cyan>,</font>XmlContent l<font color=Cyan>,</font>XmlContent m<font color=Cyan>,</font>XmlContent n<font color=Cyan>,</font>XmlContent o
+<a name="line-630"></a>          <font color=Cyan>,</font>XmlContent p<font color=Cyan>,</font>XmlContent q<font color=Cyan>,</font>XmlContent r<font color=Cyan>,</font>XmlContent s<font color=Cyan>,</font>XmlContent t<font color=Cyan>)</font>
+<a name="line-631"></a>    <font color=Red>=&gt;</font> XmlContent <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="line-632"></a>  <font color=Green><u>where</u></font>
+<a name="line-633"></a>    parseContents <font color=Red>=</font>
+<a name="line-634"></a>        <font color=Cyan>(</font>choice OneOf20 <font color=Cyan>$</font> choice TwoOf20 <font color=Cyan>$</font> choice ThreeOf20 <font color=Cyan>$</font> choice FourOf20
+<a name="line-635"></a>        <font color=Cyan>$</font> choice FiveOf20 <font color=Cyan>$</font> choice SixOf20 <font color=Cyan>$</font> choice SevenOf20
+<a name="line-636"></a>        <font color=Cyan>$</font> choice EightOf20 <font color=Cyan>$</font> choice NineOf20 <font color=Cyan>$</font> choice TenOf20
+<a name="line-637"></a>        <font color=Cyan>$</font> choice ElevenOf20 <font color=Cyan>$</font> choice TwelveOf20 <font color=Cyan>$</font> choice ThirteenOf20
+<a name="line-638"></a>        <font color=Cyan>$</font> choice FourteenOf20 <font color=Cyan>$</font> choice FifteenOf20 <font color=Cyan>$</font> choice SixteenOf20
+<a name="line-639"></a>        <font color=Cyan>$</font> choice SeventeenOf20 <font color=Cyan>$</font> choice EighteenOf20 <font color=Cyan>$</font> choice NineteenOf20
+<a name="line-640"></a>        <font color=Cyan>$</font> choice TwentyOf20
+<a name="line-641"></a>        <font color=Cyan>$</font> fail <font color=Magenta>"OneOf20"</font><font color=Cyan>)</font>
+<a name="line-642"></a>    toContents <font color=Cyan>(</font>OneOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-643"></a>    toContents <font color=Cyan>(</font>TwoOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-644"></a>    toContents <font color=Cyan>(</font>ThreeOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-645"></a>    toContents <font color=Cyan>(</font>FourOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-646"></a>    toContents <font color=Cyan>(</font>FiveOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-647"></a>    toContents <font color=Cyan>(</font>SixOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-648"></a>    toContents <font color=Cyan>(</font>SevenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-649"></a>    toContents <font color=Cyan>(</font>EightOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-650"></a>    toContents <font color=Cyan>(</font>NineOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-651"></a>    toContents <font color=Cyan>(</font>TenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-652"></a>    toContents <font color=Cyan>(</font>ElevenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-653"></a>    toContents <font color=Cyan>(</font>TwelveOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-654"></a>    toContents <font color=Cyan>(</font>ThirteenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-655"></a>    toContents <font color=Cyan>(</font>FourteenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-656"></a>    toContents <font color=Cyan>(</font>FifteenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-657"></a>    toContents <font color=Cyan>(</font>SixteenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-658"></a>    toContents <font color=Cyan>(</font>SeventeenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-659"></a>    toContents <font color=Cyan>(</font>EighteenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-660"></a>    toContents <font color=Cyan>(</font>NineteenOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-661"></a>    toContents <font color=Cyan>(</font>TwentyOf20 x<font color=Cyan>)</font> <font color=Red>=</font> toContents x
+<a name="line-662"></a>
+<a name="line-663"></a><font color=Blue>----</font>
+</pre>
+</body>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Parse.html b/docs/HaXml/src/Text/XML/HaXml/Parse.html
--- a/docs/HaXml/src/Text/XML/HaXml/Parse.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Parse.html
@@ -1,887 +1,896 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>{-# OPTIONS -cpp #-}</font>
-<a name="(line2)"></a><font color=Blue>-- | A non-validating XML parser.  For the input grammar, see</font>
-<a name="(line3)"></a><font color=Blue>--   &lt;<a href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</a>&gt;.</font>
-<a name="(line4)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse
-<a name="(line5)"></a>  <font color=Cyan>(</font>
-<a name="(line6)"></a>  <font color=Blue>-- * Parse a whole document</font>
-<a name="(line7)"></a>    xmlParse<font color=Cyan>,</font> xmlParse'
-<a name="(line8)"></a>  <font color=Blue>-- * Parse just a DTD</font>
-<a name="(line9)"></a>  <font color=Cyan>,</font> dtdParse<font color=Cyan>,</font> dtdParse'
-<a name="(line10)"></a>  <font color=Blue>-- * Parse a partial document</font>
-<a name="(line11)"></a>  <font color=Cyan>,</font> xmlParseWith
-<a name="(line12)"></a>  <font color=Blue>-- * Individual parsers for use with /xmlParseWith/ and module SAX</font>
-<a name="(line13)"></a>  <font color=Cyan>,</font> document<font color=Cyan>,</font> element<font color=Cyan>,</font> content
-<a name="(line14)"></a>  <font color=Cyan>,</font> comment<font color=Cyan>,</font> cdsect<font color=Cyan>,</font> chardata
-<a name="(line15)"></a>  <font color=Cyan>,</font> reference<font color=Cyan>,</font> doctypedecl
-<a name="(line16)"></a>  <font color=Cyan>,</font> processinginstruction
-<a name="(line17)"></a>  <font color=Cyan>,</font> elemtag<font color=Cyan>,</font> name<font color=Cyan>,</font> tok
-<a name="(line18)"></a>  <font color=Cyan>,</font> elemOpenTag<font color=Cyan>,</font> elemCloseTag
-<a name="(line19)"></a>  <font color=Cyan>,</font> emptySTs<font color=Cyan>,</font> XParser
-<a name="(line20)"></a>  <font color=Blue>-- * These general utility functions don't belong here</font>
-<a name="(line21)"></a>  <font color=Cyan>,</font> fst3<font color=Cyan>,</font> snd3<font color=Cyan>,</font> thd3
-<a name="(line22)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line23)"></a>
-<a name="(line24)"></a><font color=Blue>-- An XML parser, written using a slightly extended version of the</font>
-<a name="(line25)"></a><font color=Blue>-- Hutton/Meijer parser combinators.  The input is tokenised internally</font>
-<a name="(line26)"></a><font color=Blue>-- by the lexer xmlLex.  Whilst parsing, we gather a symbol</font>
-<a name="(line27)"></a><font color=Blue>-- table of entity references.  PERefs must be defined before use, so we</font>
-<a name="(line28)"></a><font color=Blue>-- expand their uses as we encounter them, forcing the remainder of the</font>
-<a name="(line29)"></a><font color=Blue>-- input to be re-lexed and re-parsed.  GERefs are simply stored for</font>
-<a name="(line30)"></a><font color=Blue>-- later retrieval.</font>
-<a name="(line31)"></a>
-<a name="(line32)"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>either<font color=Cyan>,</font>maybe<font color=Cyan>,</font>sequence<font color=Cyan>)</font>
-<a name="(line33)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Prelude <font color=Cyan>(</font>either<font color=Cyan>)</font>
-<a name="(line34)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
-<a name="(line35)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font>       <font color=Blue>-- debugging only</font>
-<a name="(line36)"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>isSpace<font color=Cyan>,</font>isDigit<font color=Cyan>,</font>isHexDigit<font color=Cyan>)</font>
-<a name="(line37)"></a><font color=Green><u>import</u></font> Monad hiding <font color=Cyan>(</font>sequence<font color=Cyan>)</font>
-<a name="(line38)"></a><font color=Green><u>import</u></font> Numeric <font color=Cyan>(</font>readDec<font color=Cyan>,</font>readHex<font color=Cyan>)</font>
-<a name="(line39)"></a>
-<a name="(line40)"></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="(line41)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn
-<a name="(line42)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Lex
-<a name="(line43)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly<font color=Cyan>.</font>NoLeak<font color=Cyan>.</font>State
-<a name="(line44)"></a>
-<a name="(line45)"></a>
-<a name="(line46)"></a><font color=Magenta><em>#if ( defined(__GLASGOW_HASKELL__) &amp;&amp; __GLASGOW_HASKELL__ &gt; 502 ) || \</em></font>
-<a name="(line47)"></a>    <font color=Cyan>(</font> defined<font color=Cyan>(</font><b><font color=Magenta>__NHC__</font></b><font color=Cyan>)</font> <font color=Cyan>&amp;&amp;</font> <b><font color=Magenta>__NHC__</font></b> <font color=Cyan>&gt;</font> <font color=Magenta>114</font> <font color=Cyan>)</font> <font color=Cyan>||</font> defined<font color=Cyan>(</font><b><font color=Magenta>__HUGS__</font></b><font color=Cyan>)</font>
-<a name="(line48)"></a><font color=Green><u>import</u></font> System<font color=Cyan>.</font>IO<font color=Cyan>.</font>Unsafe <font color=Cyan>(</font>unsafePerformIO<font color=Cyan>)</font>
-<a name="(line49)"></a><font color=Magenta><em>#elif defined(__GLASGOW_HASKELL__)</em></font>
-<a name="(line50)"></a><font color=Green><u>import</u></font> IOExts <font color=Cyan>(</font>unsafePerformIO<font color=Cyan>)</font>
-<a name="(line51)"></a><font color=Magenta><em>#elif defined(__NHC__)</em></font>
-<a name="(line52)"></a><font color=Green><u>import</u></font> IOExtras <font color=Cyan>(</font>unsafePerformIO<font color=Cyan>)</font>
-<a name="(line53)"></a><font color=Magenta><em>#elif defined(__HBC__)</em></font>
-<a name="(line54)"></a><font color=Green><u>import</u></font> UnsafePerformIO
-<a name="(line55)"></a><font color=Magenta><em>#endif</em></font>
-<a name="(line56)"></a>
-<a name="(line57)"></a><font color=Blue>--  #define DEBUG</font>
-<a name="(line58)"></a>
-<a name="(line59)"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>
-<a name="(line60)"></a><font color=Magenta><em>#  if ( defined(__GLASGOW_HASKELL__) &amp;&amp; __GLASGOW_HASKELL__ &gt; 502 ) || \</em></font>
-<a name="(line61)"></a>      <font color=Cyan>(</font> defined<font color=Cyan>(</font><b><font color=Magenta>__NHC__</font></b><font color=Cyan>)</font> <font color=Cyan>&amp;&amp;</font> <b><font color=Magenta>__NHC__</font></b> <font color=Cyan>&gt;</font> <font color=Magenta>114</font> <font color=Cyan>)</font> <font color=Cyan>||</font> defined<font color=Cyan>(</font><b><font color=Magenta>__HUGS__</font></b><font color=Cyan>)</font>
-<a name="(line62)"></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="(line63)"></a><font color=Magenta><em>#  elif defined(__GLASGOW_HASKELL__)</em></font>
-<a name="(line64)"></a><font color=Green><u>import</u></font> IOExts<font color=Cyan>(</font>trace<font color=Cyan>)</font>
-<a name="(line65)"></a><font color=Magenta><em>#  elif defined(__NHC__) || defined(__HBC__)</em></font>
-<a name="(line66)"></a><font color=Green><u>import</u></font> NonStdTrace
-<a name="(line67)"></a><font color=Magenta><em>#  endif</em></font>
-<a name="(line68)"></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="(line69)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> s <font color=Red>=</font> trace s v
-<a name="(line70)"></a><font color=Magenta><em>#else</em></font>
-<a name="(line71)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> s <font color=Red>=</font> v
-<a name="(line72)"></a><font color=Magenta><em>#endif</em></font>
-<a name="(line73)"></a>
-<a name="(line74)"></a>
-<a name="(line75)"></a><a name="xmlParse"></a><font color=Blue>-- | To parse a whole document, @xmlParse file content@ takes a filename</font>
-<a name="(line76)"></a><font color=Blue>--   (for generating error reports) and the string content of that file.</font>
-<a name="(line77)"></a><font color=Blue>--   A parse error causes program failure, with message to stderr.</font>
-<a name="(line78)"></a>xmlParse <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Document Posn
-<a name="(line79)"></a>
-<a name="(line80)"></a><a name="xmlParse'"></a><font color=Blue>-- | To parse a whole document, @xmlParse' file content@ takes a filename</font>
-<a name="(line81)"></a><font color=Blue>--   (for generating error reports) and the string content of that file.</font>
-<a name="(line82)"></a><font color=Blue>--   Any parse error message is passed back to the caller through the</font>
-<a name="(line83)"></a><font color=Blue>--   @Either@ type.</font>
-<a name="(line84)"></a>xmlParse' <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Either String <font color=Cyan>(</font>Document Posn<font color=Cyan>)</font>
-<a name="(line85)"></a>
-<a name="(line86)"></a><a name="dtdParse"></a><font color=Blue>-- | To parse just a DTD, @dtdParse file content@ takes a filename</font>
-<a name="(line87)"></a><font color=Blue>--   (for generating error reports) and the string content of that</font>
-<a name="(line88)"></a><font color=Blue>--   file.  If no DTD was found, you get @Nothing@ rather than an error.</font>
-<a name="(line89)"></a><font color=Blue>--   However, if a DTD is found but contains errors, the program crashes.</font>
-<a name="(line90)"></a>dtdParse  <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Maybe DocTypeDecl
-<a name="(line91)"></a>
-<a name="(line92)"></a><a name="dtdParse'"></a><font color=Blue>-- | To parse just a DTD, @dtdParse' file content@ takes a filename</font>
-<a name="(line93)"></a><font color=Blue>--   (for generating error reports) and the string content of that</font>
-<a name="(line94)"></a><font color=Blue>--   file.  If no DTD was found, you get @Right Nothing@.</font>
-<a name="(line95)"></a><font color=Blue>--   If a DTD was found but contains errors, you get a @Left message@.</font>
-<a name="(line96)"></a>dtdParse' <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Either String <font color=Cyan>(</font>Maybe DocTypeDecl<font color=Cyan>)</font>
-<a name="(line97)"></a>
-<a name="(line98)"></a>xmlParse  name  <font color=Red>=</font> Prelude<font color=Cyan>.</font>either error id <font color=Cyan>.</font> xmlParse' name
-<a name="(line99)"></a>dtdParse  name  <font color=Red>=</font> Prelude<font color=Cyan>.</font>either error id <font color=Cyan>.</font> dtdParse' name
-<a name="(line100)"></a>
-<a name="(line101)"></a>xmlParse' name  <font color=Red>=</font> fst3 <font color=Cyan>.</font> runParser <font color=Cyan>(</font>toEOF document<font color=Cyan>)</font> emptySTs <font color=Cyan>.</font> xmlLex name
-<a name="(line102)"></a>dtdParse' name  <font color=Red>=</font> fst3 <font color=Cyan>.</font> runParser justDTD  emptySTs <font color=Cyan>.</font> xmlLex name
-<a name="(line103)"></a>
-<a name="(line104)"></a><a name="toEOF"></a>toEOF <font color=Red>=</font> id	<font color=Blue>-- there are other possible implementations...</font>
-<a name="(line105)"></a>
-<a name="(line106)"></a><a name="xmlParseWith"></a><font color=Blue>-- | To parse a partial document, e.g. from an XML-based stream protocol,</font>
-<a name="(line107)"></a><font color=Blue>--   where you may later want to get more document elements from the same</font>
-<a name="(line108)"></a><font color=Blue>--   stream.  Arguments are: a parser for the item you want, and the</font>
-<a name="(line109)"></a><font color=Blue>--   already-lexed input to parse from.  Returns the item you wanted</font>
-<a name="(line110)"></a><font color=Blue>--   (or an error message), plus the remainder of the input.</font>
-<a name="(line111)"></a>xmlParseWith <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line112)"></a>                <font color=Red>-&gt;</font> <font color=Cyan>(</font>Either String a<font color=Cyan>,</font> <font color=Red>[</font><font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line113)"></a>xmlParseWith p <font color=Red>=</font> <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>v<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Red>-&gt;</font><font color=Cyan>(</font>v<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>.</font> runParser p emptySTs
-<a name="(line114)"></a>
-<a name="(line115)"></a>
-<a name="(line116)"></a><font color=Blue>---- Symbol table stuff ----</font>
-<a name="(line117)"></a>
-<a name="(line118)"></a><a name="SymTabs"></a><font color=Green><u>type</u></font> SymTabs <font color=Red>=</font> <font color=Cyan>(</font>SymTab PEDef<font color=Cyan>,</font> SymTab EntityDef<font color=Cyan>)</font>
-<a name="(line119)"></a>
-<a name="(line120)"></a><a name="emptySTs"></a><font color=Blue>-- | Some empty symbol tables for GE and PE references.</font>
-<a name="(line121)"></a>emptySTs <font color=Red>::</font> SymTabs
-<a name="(line122)"></a>emptySTs <font color=Red>=</font> <font color=Cyan>(</font>emptyST<font color=Cyan>,</font> emptyST<font color=Cyan>)</font>
-<a name="(line123)"></a>
-<a name="(line124)"></a><a name="addPE"></a>addPE <font color=Red>::</font> String <font color=Red>-&gt;</font> PEDef <font color=Red>-&gt;</font> SymTabs <font color=Red>-&gt;</font> SymTabs
-<a name="(line125)"></a>addPE n v <font color=Cyan>(</font>pe<font color=Cyan>,</font>ge<font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font>addST n v pe<font color=Cyan>,</font> ge<font color=Cyan>)</font>
-<a name="(line126)"></a>
-<a name="(line127)"></a><a name="addGE"></a>addGE <font color=Red>::</font> String <font color=Red>-&gt;</font> EntityDef <font color=Red>-&gt;</font> SymTabs <font color=Red>-&gt;</font> SymTabs
-<a name="(line128)"></a>addGE n v <font color=Cyan>(</font>pe<font color=Cyan>,</font>ge<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>let</u></font> newge <font color=Red>=</font> addST n v ge <font color=Green><u>in</u></font> newge <font color=Cyan>`seq`</font> <font color=Cyan>(</font>pe<font color=Cyan>,</font> newge<font color=Cyan>)</font>
-<a name="(line129)"></a>
-<a name="(line130)"></a><a name="lookupPE"></a>lookupPE <font color=Red>::</font> String <font color=Red>-&gt;</font> SymTabs <font color=Red>-&gt;</font> Maybe PEDef
-<a name="(line131)"></a>lookupPE s <font color=Cyan>(</font>pe<font color=Cyan>,</font>ge<font color=Cyan>)</font> <font color=Red>=</font> lookupST s pe
-<a name="(line132)"></a>
-<a name="(line133)"></a><a name="flattenEV"></a>flattenEV <font color=Red>::</font> EntityValue <font color=Red>-&gt;</font> String
-<a name="(line134)"></a>flattenEV <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font> <font color=Red>=</font> concatMap flatten evs
-<a name="(line135)"></a>  <font color=Green><u>where</u></font>
-<a name="(line136)"></a>    flatten <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>          <font color=Red>=</font> s
-<a name="(line137)"></a>    flatten <font color=Cyan>(</font>EVRef <font color=Cyan>(</font>RefEntity r<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&amp;"</font> <font color=Cyan>++</font>r<font color=Cyan>++</font><font color=Magenta>";"</font>
-<a name="(line138)"></a>    flatten <font color=Cyan>(</font>EVRef <font color=Cyan>(</font>RefChar r<font color=Cyan>)</font><font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&amp;#"</font><font color=Cyan>++</font>show r<font color=Cyan>++</font><font color=Magenta>";"</font>
-<a name="(line139)"></a> <font color=Blue>-- flatten (EVPERef n)           = "%" ++n++";"</font>
-<a name="(line140)"></a>
-<a name="(line141)"></a>
-<a name="(line142)"></a><a name="fst3"></a><font color=Blue>---- Misc ----</font>
-<a name="(line143)"></a>fst3 <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>-&gt;</font> a
-<a name="(line144)"></a><a name="snd3"></a>snd3 <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>-&gt;</font> b
-<a name="(line145)"></a><a name="thd3"></a>thd3 <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>-&gt;</font> c
-<a name="(line146)"></a>
-<a name="(line147)"></a>fst3 <font color=Cyan>(</font>a<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> a
-<a name="(line148)"></a>snd3 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> a
-<a name="(line149)"></a>thd3 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>)</font> <font color=Red>=</font> a
-<a name="(line150)"></a>
-<a name="(line151)"></a>
-<a name="(line152)"></a><font color=Blue>---- Auxiliary Parsing Functions ----</font>
-<a name="(line153)"></a>
-<a name="(line154)"></a><a name="XParser"></a><font color=Blue>-- | XParser is just a specialisation of the PolyState parser.</font>
-<a name="(line155)"></a><a name="XParser"></a><font color=Green><u>type</u></font> XParser a <font color=Red>=</font> Parser SymTabs <font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font> a
-<a name="(line156)"></a>
-<a name="(line157)"></a><a name="tok"></a><font color=Blue>-- | Return the next token from the input only if it matches the given token.</font>
-<a name="(line158)"></a>tok <font color=Red>::</font> TokenT <font color=Red>-&gt;</font> XParser TokenT
-<a name="(line159)"></a>tok t <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t'<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line160)"></a>           <font color=Green><u>case</u></font> t' <font color=Green><u>of</u></font> TokError <font color=Green><u>_</u></font>    <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
-<a name="(line161)"></a>                      <font color=Green><u>_</u></font> <font color=Red>|</font> t'<font color=Cyan>==</font>t     <font color=Red>-&gt;</font> return t
-<a name="(line162)"></a>                        <font color=Red>|</font> otherwise <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
-<a name="(line163)"></a><a name="nottok"></a>nottok <font color=Red>::</font> <font color=Red>[</font>TokenT<font color=Red>]</font> <font color=Red>-&gt;</font> XParser TokenT
-<a name="(line164)"></a>nottok ts <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line165)"></a>               <font color=Green><u>if</u></font> t<font color=Cyan>`elem`</font>ts <font color=Green><u>then</u></font> report fail <font color=Cyan>(</font><font color=Magenta>"no "</font><font color=Cyan>++</font>show t<font color=Cyan>)</font> p t
-<a name="(line166)"></a>                            <font color=Green><u>else</u></font> return t
-<a name="(line167)"></a>
-<a name="(line168)"></a><a name="name"></a><font color=Blue>-- | Return just a name, e.g. element name, attribute name.</font>
-<a name="(line169)"></a>name <font color=Red>::</font> XParser Name
-<a name="(line170)"></a>name <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>tok<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line171)"></a>          <font color=Green><u>case</u></font> tok <font color=Green><u>of</u></font>
-<a name="(line172)"></a>            TokName s  <font color=Red>-&gt;</font> return s
-<a name="(line173)"></a>            TokError <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> report failBad <font color=Magenta>"a name"</font> p tok
-<a name="(line174)"></a>            <font color=Green><u>_</u></font>          <font color=Red>-&gt;</font> report fail <font color=Magenta>"a name"</font> p tok
-<a name="(line175)"></a>
-<a name="(line176)"></a><a name="string"></a>string<font color=Cyan>,</font> freetext <font color=Red>::</font> XParser String
-<a name="(line177)"></a>string   <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line178)"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokName s <font color=Red>-&gt;</font> return s
-<a name="(line179)"></a>                        <font color=Green><u>_</u></font>         <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
-<a name="(line180)"></a><a name="freetext"></a>freetext <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line181)"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokFreeText s <font color=Red>-&gt;</font> return s
-<a name="(line182)"></a>                        <font color=Green><u>_</u></font>             <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
-<a name="(line183)"></a>
-<a name="(line184)"></a><a name="maybe"></a>maybe <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font>
-<a name="(line185)"></a>maybe p <font color=Red>=</font>
-<a name="(line186)"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Just<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line187)"></a>    <font color=Cyan>(</font> return Nothing<font color=Cyan>)</font>
-<a name="(line188)"></a>
-<a name="(line189)"></a><a name="either"></a>either <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser b <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>Either a b<font color=Cyan>)</font>
-<a name="(line190)"></a>either p q <font color=Red>=</font>
-<a name="(line191)"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Left<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line192)"></a>    <font color=Cyan>(</font> q <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Right<font color=Cyan>)</font>
-<a name="(line193)"></a>
-<a name="(line194)"></a><a name="word"></a>word <font color=Red>::</font> String <font color=Red>-&gt;</font> XParser ()
-<a name="(line195)"></a>word s <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x <font color=Red>&lt;-</font> next
-<a name="(line196)"></a>            <font color=Cyan>;</font> <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>
-<a name="(line197)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokName n<font color=Cyan>)</font>     <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
-<a name="(line198)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokFreeText n<font color=Cyan>)</font> <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
-<a name="(line199)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Red>@</font><font color=Cyan>(</font>TokError <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
-<a name="(line200)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
-<a name="(line201)"></a>            <font color=Cyan>}</font>
-<a name="(line202)"></a>
-<a name="(line203)"></a><a name="posn"></a>posn <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x<font color=Red>@</font><font color=Cyan>(</font>p<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line204)"></a>          <font color=Cyan>;</font> reparse <font color=Red>[</font>x<font color=Red>]</font>
-<a name="(line205)"></a>          <font color=Cyan>;</font> return p
-<a name="(line206)"></a>          <font color=Cyan>}</font>
-<a name="(line207)"></a>
-<a name="(line208)"></a><a name="nmtoken"></a>nmtoken <font color=Red>::</font> XParser NmToken
-<a name="(line209)"></a>nmtoken <font color=Red>=</font> <font color=Cyan>(</font>string <font color=Cyan>`onFail`</font> freetext<font color=Cyan>)</font>
-<a name="(line210)"></a>
-<a name="(line211)"></a><a name="failP"></a>failP<font color=Cyan>,</font> failBadP <font color=Red>::</font> String <font color=Red>-&gt;</font> XParser a
-<a name="(line212)"></a>failP msg <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> fail <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line213)"></a><a name="failBadP"></a>failBadP msg <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> failBad <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line214)"></a>
-<a name="(line215)"></a><a name="report"></a>report <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>XParser a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> TokenT <font color=Red>-&gt;</font> XParser a
-<a name="(line216)"></a>report fail exp p t <font color=Red>=</font> fail <font color=Cyan>(</font><font color=Magenta>"Expected "</font><font color=Cyan>++</font>exp<font color=Cyan>++</font><font color=Magenta>" but found "</font><font color=Cyan>++</font>show t
-<a name="(line217)"></a>                           <font color=Cyan>++</font><font color=Magenta>"\n  in "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
-<a name="(line218)"></a>
-<a name="(line219)"></a><a name="adjustErrP"></a>adjustErrP <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> XParser a
-<a name="(line220)"></a><a name="adjustErrP"></a>p <font color=Cyan>`adjustErrP`</font> f <font color=Red>=</font> p <font color=Cyan>`onFail`</font> <font color=Green><u>do</u></font> pn <font color=Red>&lt;-</font> posn
-<a name="(line221)"></a>                                 <font color=Cyan>(</font>p <font color=Cyan>`adjustErr`</font> f<font color=Cyan>)</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font>show pn<font color=Cyan>)</font>
-<a name="(line222)"></a>
-<a name="(line223)"></a><a name="peRef"></a>peRef <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser a
-<a name="(line224)"></a>peRef p <font color=Red>=</font>
-<a name="(line225)"></a>    p <font color=Cyan>`onFail`</font>
-<a name="(line226)"></a>    <font color=Green><u>do</u></font> pn <font color=Red>&lt;-</font> posn
-<a name="(line227)"></a>       n <font color=Red>&lt;-</font> pereference
-<a name="(line228)"></a>       tr <font color=Red>&lt;-</font> stQuery <font color=Cyan>(</font>lookupPE n<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Looking up %"</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
-<a name="(line229)"></a>       <font color=Green><u>case</u></font> tr <font color=Green><u>of</u></font>
-<a name="(line230)"></a>           Just <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font> <font color=Red>-&gt;</font>
-<a name="(line231)"></a>                      <font color=Green><u>do</u></font> reparse <font color=Cyan>(</font>xmlReLex <font color=Cyan>(</font>posInNewCxt <font color=Cyan>(</font><font color=Magenta>"macro %"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
-<a name="(line232)"></a>                                                        <font color=Cyan>(</font>Just pn<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line233)"></a>                                           <font color=Cyan>(</font>flattenEV ev<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line234)"></a>                               <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"  defn:  "</font><font color=Cyan>++</font>flattenEV ev<font color=Cyan>)</font>
-<a name="(line235)"></a>                         peRef p
-<a name="(line236)"></a>           Just <font color=Cyan>(</font>PEDefExternalID <font color=Cyan>(</font>PUBLIC <font color=Green><u>_</u></font> <font color=Cyan>(</font>SystemLiteral f<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font>
-<a name="(line237)"></a>                      <font color=Green><u>do</u></font> <font color=Green><u>let</u></font> val <font color=Red>=</font> unsafePerformIO <font color=Cyan>(</font>readFile f<font color=Cyan>)</font>
-<a name="(line238)"></a>                         reparse <font color=Cyan>(</font>xmlReLex <font color=Cyan>(</font>posInNewCxt <font color=Cyan>(</font><font color=Magenta>"file "</font><font color=Cyan>++</font>f<font color=Cyan>)</font>
-<a name="(line239)"></a>                                                        <font color=Cyan>(</font>Just pn<font color=Cyan>)</font><font color=Cyan>)</font> val<font color=Cyan>)</font>
-<a name="(line240)"></a>                               <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"  reading from file "</font><font color=Cyan>++</font>f<font color=Cyan>)</font>
-<a name="(line241)"></a>                         peRef p
-<a name="(line242)"></a>           Just <font color=Cyan>(</font>PEDefExternalID <font color=Cyan>(</font>SYSTEM <font color=Cyan>(</font>SystemLiteral f<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font>
-<a name="(line243)"></a>                      <font color=Green><u>do</u></font> <font color=Green><u>let</u></font> val <font color=Red>=</font> unsafePerformIO <font color=Cyan>(</font>readFile f<font color=Cyan>)</font>
-<a name="(line244)"></a>                         reparse <font color=Cyan>(</font>xmlReLex <font color=Cyan>(</font>posInNewCxt <font color=Cyan>(</font><font color=Magenta>"file "</font><font color=Cyan>++</font>f<font color=Cyan>)</font>
-<a name="(line245)"></a>                                                        <font color=Cyan>(</font>Just pn<font color=Cyan>)</font><font color=Cyan>)</font> val<font color=Cyan>)</font>
-<a name="(line246)"></a>                               <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"  reading from file "</font><font color=Cyan>++</font>f<font color=Cyan>)</font>
-<a name="(line247)"></a>                         peRef p
-<a name="(line248)"></a>           Nothing <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"PEReference use before definition: "</font><font color=Cyan>++</font><font color=Magenta>"%"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font>
-<a name="(line249)"></a>                           <font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show pn<font color=Cyan>)</font>
-<a name="(line250)"></a>
-<a name="(line251)"></a><a name="blank"></a>blank <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser a
-<a name="(line252)"></a>blank p <font color=Red>=</font>
-<a name="(line253)"></a>    p <font color=Cyan>`onFail`</font>
-<a name="(line254)"></a>    <font color=Green><u>do</u></font> n <font color=Red>&lt;-</font> pereference
-<a name="(line255)"></a>       tr <font color=Red>&lt;-</font> stQuery <font color=Cyan>(</font>lookupPE n<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Looking up %"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>" (is blank?)"</font><font color=Cyan>)</font>
-<a name="(line256)"></a>       <font color=Green><u>case</u></font> tr <font color=Green><u>of</u></font>
-<a name="(line257)"></a>           Just <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font>
-<a name="(line258)"></a>                    <font color=Red>|</font> all isSpace <font color=Cyan>(</font>flattenEV ev<font color=Cyan>)</font>  <font color=Red>-&gt;</font>
-<a name="(line259)"></a>                            <font color=Green><u>do</u></font> blank p <font color=Cyan>`debug`</font> <font color=Magenta>"Empty macro definition"</font>
-<a name="(line260)"></a>           Just <font color=Green><u>_</u></font>  <font color=Red>-&gt;</font> failP <font color=Cyan>(</font><font color=Magenta>"expected a blank PERef macro: "</font><font color=Cyan>++</font><font color=Magenta>"%"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
-<a name="(line261)"></a>           Nothing <font color=Red>-&gt;</font> failP <font color=Cyan>(</font><font color=Magenta>"PEReference use before definition: "</font><font color=Cyan>++</font><font color=Magenta>"%"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
-<a name="(line262)"></a>
-<a name="(line263)"></a>
-<a name="(line264)"></a>
-<a name="(line265)"></a><font color=Blue>---- XML Parsing Functions ----</font>
-<a name="(line266)"></a>
-<a name="(line267)"></a><a name="justDTD"></a>justDTD <font color=Red>::</font> XParser <font color=Cyan>(</font>Maybe DocTypeDecl<font color=Cyan>)</font>
-<a name="(line268)"></a>justDTD <font color=Red>=</font>
-<a name="(line269)"></a>  <font color=Green><u>do</u></font> <font color=Cyan>(</font>ExtSubset <font color=Green><u>_</u></font> ds<font color=Cyan>)</font> <font color=Red>&lt;-</font> extsubset <font color=Cyan>`debug`</font> <font color=Magenta>"Trying external subset"</font>
-<a name="(line270)"></a>     <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font> fail <font color=Magenta>"empty"</font>
-<a name="(line271)"></a>         <font color=Green><u>else</u></font> return <font color=Cyan>(</font>Just <font color=Cyan>(</font>DTD <font color=Magenta>"extsubset"</font> Nothing <font color=Cyan>(</font>concatMap extract ds<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line272)"></a>  <font color=Cyan>`onFail`</font>
-<a name="(line273)"></a>  <font color=Green><u>do</u></font> <font color=Cyan>(</font>Prolog <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> dtd <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> prolog
-<a name="(line274)"></a>     return dtd
-<a name="(line275)"></a> <font color=Green><u>where</u></font> extract <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>m<font color=Red>]</font>
-<a name="(line276)"></a>       extract <font color=Cyan>(</font>ExtConditionalSect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> concatMap extract i
-<a name="(line277)"></a>       extract <font color=Cyan>(</font>ExtConditionalSect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> []
-<a name="(line278)"></a>
-<a name="(line279)"></a><a name="document"></a><font color=Blue>-- | Return an entire XML document including prolog and trailing junk.</font>
-<a name="(line280)"></a>document <font color=Red>::</font> XParser <font color=Cyan>(</font>Document Posn<font color=Cyan>)</font>
-<a name="(line281)"></a>document <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line282)"></a>    p <font color=Red>&lt;-</font> prolog <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"unrecognisable XML prolog\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line283)"></a>    e <font color=Red>&lt;-</font> element
-<a name="(line284)"></a>    ms <font color=Red>&lt;-</font> many misc
-<a name="(line285)"></a>    <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>ge<font color=Cyan>)</font> <font color=Red>&lt;-</font> stGet
-<a name="(line286)"></a>    return <font color=Cyan>(</font>Document p ge e ms<font color=Cyan>)</font>
-<a name="(line287)"></a>
-<a name="(line288)"></a><a name="comment"></a><font color=Blue>-- | Return an XML comment.</font>
-<a name="(line289)"></a>comment <font color=Red>::</font> XParser Comment
-<a name="(line290)"></a>comment <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line291)"></a>    bracket <font color=Cyan>(</font>tok TokCommentOpen<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokCommentClose<font color=Cyan>)</font> freetext
-<a name="(line292)"></a><font color=Blue>--  tok TokCommentOpen</font>
-<a name="(line293)"></a><font color=Blue>--  commit $ do</font>
-<a name="(line294)"></a><font color=Blue>--    c &lt;- freetext</font>
-<a name="(line295)"></a><font color=Blue>--    tok TokCommentClose</font>
-<a name="(line296)"></a><font color=Blue>--    return c</font>
-<a name="(line297)"></a>
-<a name="(line298)"></a><a name="processinginstruction"></a><font color=Blue>-- | Parse a processing instruction.</font>
-<a name="(line299)"></a>processinginstruction <font color=Red>::</font> XParser ProcessingInstruction
-<a name="(line300)"></a>processinginstruction <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line301)"></a>    tok TokPIOpen
-<a name="(line302)"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
-<a name="(line303)"></a>      n <font color=Red>&lt;-</font> string  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"processing instruction has no target"</font>
-<a name="(line304)"></a>      f <font color=Red>&lt;-</font> freetext
-<a name="(line305)"></a>      tok TokPIClose <font color=Cyan>`onFail`</font> failP <font color=Cyan>(</font><font color=Magenta>"missing ?&gt; in &lt;?"</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
-<a name="(line306)"></a>      return <font color=Cyan>(</font>n<font color=Cyan>,</font> f<font color=Cyan>)</font>
-<a name="(line307)"></a>
-<a name="(line308)"></a><a name="cdsect"></a>cdsect <font color=Red>::</font> XParser CDSect
-<a name="(line309)"></a>cdsect <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line310)"></a>    tok TokSectionOpen
-<a name="(line311)"></a>    bracket <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection CDATAx<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSectionClose<font color=Cyan>)</font> chardata
-<a name="(line312)"></a>
-<a name="(line313)"></a><a name="prolog"></a>prolog <font color=Red>::</font> XParser Prolog
-<a name="(line314)"></a>prolog <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line315)"></a>    x   <font color=Red>&lt;-</font> maybe xmldecl
-<a name="(line316)"></a>    m1  <font color=Red>&lt;-</font> many misc
-<a name="(line317)"></a>    dtd <font color=Red>&lt;-</font> maybe doctypedecl
-<a name="(line318)"></a>    m2  <font color=Red>&lt;-</font> many misc
-<a name="(line319)"></a>    return <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font>
-<a name="(line320)"></a>
-<a name="(line321)"></a><a name="xmldecl"></a>xmldecl <font color=Red>::</font> XParser XMLDecl
-<a name="(line322)"></a>xmldecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line323)"></a>    tok TokPIOpen
-<a name="(line324)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
-<a name="(line325)"></a>    p <font color=Red>&lt;-</font> posn
-<a name="(line326)"></a>    s <font color=Red>&lt;-</font> freetext
-<a name="(line327)"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing ?&gt; in &lt;?xml ...?&gt;"</font>
-<a name="(line328)"></a>    raise <font color=Cyan>(</font><font color=Cyan>(</font>runParser aux emptySTs <font color=Cyan>.</font> xmlReLex p<font color=Cyan>)</font> s<font color=Cyan>)</font>
-<a name="(line329)"></a>  <font color=Green><u>where</u></font>
-<a name="(line330)"></a>    aux <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line331)"></a>        v <font color=Red>&lt;-</font> versioninfo  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing XML version info"</font>
-<a name="(line332)"></a>        e <font color=Red>&lt;-</font> maybe encodingdecl
-<a name="(line333)"></a>        s <font color=Red>&lt;-</font> maybe sddecl
-<a name="(line334)"></a>        return <font color=Cyan>(</font>XMLDecl v e s<font color=Cyan>)</font>
-<a name="(line335)"></a>    raise <font color=Cyan>(</font>Left err<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> failP err
-<a name="(line336)"></a>    raise <font color=Cyan>(</font>Right ok<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> return ok
-<a name="(line337)"></a>
-<a name="(line338)"></a><a name="versioninfo"></a>versioninfo <font color=Red>::</font> XParser VersionInfo
-<a name="(line339)"></a>versioninfo <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line340)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"version"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"VERSION"</font><font color=Cyan>)</font>
-<a name="(line341)"></a>    tok TokEqual
-<a name="(line342)"></a>    bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line343)"></a>
-<a name="(line344)"></a><a name="misc"></a>misc <font color=Red>::</font> XParser Misc
-<a name="(line345)"></a>misc <font color=Red>=</font>
-<a name="(line346)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"&lt;!--comment--&gt;"</font><font color=Cyan>,</font>  comment <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Comment<font color=Cyan>)</font>
-<a name="(line347)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"&lt;?PI?&gt;"</font><font color=Cyan>,</font>          processinginstruction <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PI<font color=Cyan>)</font>
-<a name="(line348)"></a>           <font color=Red>]</font>
-<a name="(line349)"></a>
-<a name="(line350)"></a><a name="doctypedecl"></a><font color=Blue>-- | Return a DOCTYPE decl, indicating a DTD.</font>
-<a name="(line351)"></a>doctypedecl <font color=Red>::</font> XParser DocTypeDecl
-<a name="(line352)"></a>doctypedecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line353)"></a>    tok TokSpecialOpen
-<a name="(line354)"></a>    tok <font color=Cyan>(</font>TokSpecial DOCTYPEx<font color=Cyan>)</font>
-<a name="(line355)"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
-<a name="(line356)"></a>      n   <font color=Red>&lt;-</font> name
-<a name="(line357)"></a>      eid <font color=Red>&lt;-</font> maybe externalid
-<a name="(line358)"></a>      es  <font color=Red>&lt;-</font> maybe <font color=Cyan>(</font>bracket <font color=Cyan>(</font>tok TokSqOpen<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSqClose<font color=Cyan>)</font>
-<a name="(line359)"></a>                            <font color=Cyan>(</font>many <font color=Cyan>(</font>peRef markupdecl<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line360)"></a>      blank <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font>  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing &gt; in DOCTYPE decl"</font>
-<a name="(line361)"></a>      return <font color=Cyan>(</font>DTD n eid <font color=Cyan>(</font><font color=Green><u>case</u></font> es <font color=Green><u>of</u></font> <font color=Cyan>{</font> Nothing <font color=Red>-&gt;</font> []<font color=Cyan>;</font> Just e <font color=Red>-&gt;</font> e <font color=Cyan>}</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line362)"></a>
-<a name="(line363)"></a><a name="markupdecl"></a><font color=Blue>-- | Return a DTD markup decl, e.g. ELEMENT, ATTLIST, etc</font>
-<a name="(line364)"></a>markupdecl <font color=Red>::</font> XParser MarkupDecl
-<a name="(line365)"></a>markupdecl <font color=Red>=</font>
-<a name="(line366)"></a>  oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"ELEMENT"</font><font color=Cyan>,</font>  elementdecl  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Element<font color=Cyan>)</font>
-<a name="(line367)"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ATTLIST"</font><font color=Cyan>,</font>  attlistdecl  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> AttList<font color=Cyan>)</font>
-<a name="(line368)"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ENTITY"</font><font color=Cyan>,</font>   entitydecl   <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Entity<font color=Cyan>)</font>
-<a name="(line369)"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"NOTATION"</font><font color=Cyan>,</font> notationdecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Notation<font color=Cyan>)</font>
-<a name="(line370)"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"misc"</font><font color=Cyan>,</font>     misc         <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> MarkupMisc<font color=Cyan>)</font>
-<a name="(line371)"></a>         <font color=Red>]</font>
-<a name="(line372)"></a>    <font color=Cyan>`adjustErrP`</font>
-<a name="(line373)"></a>          <font color=Cyan>(</font><font color=Magenta>"when looking for a markup decl,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line374)"></a> <font color=Blue>--       (\  (ELEMENT, ATTLIST, ENTITY, NOTATION, &lt;!--comment--&gt;, or &lt;?PI?&gt;")</font>
-<a name="(line375)"></a>
-<a name="(line376)"></a><a name="extsubset"></a>extsubset <font color=Red>::</font> XParser ExtSubset
-<a name="(line377)"></a>extsubset <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line378)"></a>    td <font color=Red>&lt;-</font> maybe textdecl
-<a name="(line379)"></a>    ds <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef extsubsetdecl<font color=Cyan>)</font>
-<a name="(line380)"></a>    return <font color=Cyan>(</font>ExtSubset td ds<font color=Cyan>)</font>
-<a name="(line381)"></a>
-<a name="(line382)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> XParser ExtSubsetDecl
-<a name="(line383)"></a>extsubsetdecl <font color=Red>=</font>
-<a name="(line384)"></a>    <font color=Cyan>(</font> markupdecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> ExtMarkupDecl<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line385)"></a>    <font color=Cyan>(</font> conditionalsect <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> ExtConditionalSect<font color=Cyan>)</font>
-<a name="(line386)"></a>
-<a name="(line387)"></a><a name="sddecl"></a>sddecl <font color=Red>::</font> XParser SDDecl
-<a name="(line388)"></a>sddecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line389)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"standalone"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"STANDALONE"</font><font color=Cyan>)</font>
-<a name="(line390)"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
-<a name="(line391)"></a>      tok TokEqual <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing = in 'standalone' decl"</font>
-<a name="(line392)"></a>      bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
-<a name="(line393)"></a>              <font color=Cyan>(</font> <font color=Cyan>(</font>word <font color=Magenta>"yes"</font> <font color=Cyan>&gt;&gt;</font> return True<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line394)"></a>                <font color=Cyan>(</font>word <font color=Magenta>"no"</font> <font color=Cyan>&gt;&gt;</font> return False<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line395)"></a>                failP <font color=Magenta>"'standalone' decl requires 'yes' or 'no' value"</font> <font color=Cyan>)</font>
-<a name="(line396)"></a>
-<a name="(line397)"></a><font color=Blue>{-
-<a name="(line398)"></a>element :: XParser (Element Posn)
-<a name="(line399)"></a>element = do
-<a name="(line400)"></a>    tok TokAnyOpen
-<a name="(line401)"></a>    (ElemTag n as) &lt;- elemtag
-<a name="(line402)"></a>    oneOf' [ ("self-closing tag &lt;"++n++"/&gt;"
-<a name="(line403)"></a>             ,  do tok TokEndClose
-<a name="(line404)"></a>                   return (Elem n as []))
-<a name="(line405)"></a>           , ("after open tag &lt;"++n++"&gt;"
-<a name="(line406)"></a>             ,  do tok TokAnyClose
-<a name="(line407)"></a>                   cs &lt;- many content
-<a name="(line408)"></a>                   p  &lt;- posn
-<a name="(line409)"></a>                   m  &lt;- bracket (tok TokEndOpen) (tok TokAnyClose) name
-<a name="(line410)"></a>                   checkmatch p n m
-<a name="(line411)"></a>                   return (Elem n as cs))
-<a name="(line412)"></a>           ] `adjustErr` (("in element tag "++n++",\n")++)
-<a name="(line413)"></a>-}</font>
-<a name="(line414)"></a>
-<a name="(line415)"></a><a name="element"></a><font color=Blue>-- | Return a complete element including all its inner content.</font>
-<a name="(line416)"></a>element <font color=Red>::</font> XParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>
-<a name="(line417)"></a>element <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line418)"></a>    tok TokAnyOpen
-<a name="(line419)"></a>    <font color=Cyan>(</font>ElemTag n <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> elemtag
-<a name="(line420)"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokEndClose
-<a name="(line421)"></a>         commit <font color=Cyan>(</font>return <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line422)"></a>        <font color=Cyan>`onFail`</font>
-<a name="(line423)"></a>      <font color=Green><u>do</u></font> tok TokAnyClose
-<a name="(line424)"></a>         commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
-<a name="(line425)"></a>           return <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>`apply`</font>
-<a name="(line426)"></a>                 manyFinally content
-<a name="(line427)"></a>                             <font color=Cyan>(</font><font color=Green><u>do</u></font> p <font color=Red>&lt;-</font> posn
-<a name="(line428)"></a>                                 m <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokEndOpen<font color=Cyan>)</font>
-<a name="(line429)"></a>                                              <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font> name
-<a name="(line430)"></a>                                 checkmatch p n m<font color=Cyan>)</font>
-<a name="(line431)"></a>      <font color=Cyan>)</font> <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in element tag "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line432)"></a>
-<a name="(line433)"></a><a name="checkmatch"></a>checkmatch <font color=Red>::</font> Posn <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> XParser ()
-<a name="(line434)"></a>checkmatch p n m <font color=Red>=</font>
-<a name="(line435)"></a>  <font color=Green><u>if</u></font> n <font color=Cyan>==</font> m <font color=Green><u>then</u></font> return ()
-<a name="(line436)"></a>  <font color=Green><u>else</u></font> failBadP <font color=Cyan>(</font><font color=Magenta>"tag &lt;"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>"&gt; terminated by &lt;/"</font><font color=Cyan>++</font>m<font color=Cyan>++</font><font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
-<a name="(line437)"></a>
-<a name="(line438)"></a><a name="elemtag"></a><font color=Blue>-- | Parse only the parts between angle brackets in an element tag.</font>
-<a name="(line439)"></a>elemtag <font color=Red>::</font> XParser ElemTag
-<a name="(line440)"></a>elemtag <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line441)"></a>    n  <font color=Red>&lt;-</font> name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"malformed element tag\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line442)"></a>    <font color=Green><u>as</u></font> <font color=Red>&lt;-</font> many attribute
-<a name="(line443)"></a>    return <font color=Cyan>(</font>ElemTag n <font color=Green><u>as</u></font><font color=Cyan>)</font>
-<a name="(line444)"></a>
-<a name="(line445)"></a><a name="elemOpenTag"></a><font color=Blue>-- | For use with stream parsers - returns the complete opening element tag.</font>
-<a name="(line446)"></a>elemOpenTag <font color=Red>::</font> XParser ElemTag
-<a name="(line447)"></a>elemOpenTag <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line448)"></a>    tok TokAnyOpen
-<a name="(line449)"></a>    e <font color=Red>&lt;-</font> elemtag
-<a name="(line450)"></a>    tok TokAnyClose
-<a name="(line451)"></a>    return e
-<a name="(line452)"></a>
-<a name="(line453)"></a><a name="elemCloseTag"></a><font color=Blue>-- | For use with stream parsers - accepts a closing tag, provided it</font>
-<a name="(line454)"></a><font color=Blue>--   matches the given element name.</font>
-<a name="(line455)"></a>elemCloseTag <font color=Red>::</font> Name <font color=Red>-&gt;</font> XParser ()
-<a name="(line456)"></a>elemCloseTag n <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line457)"></a>    tok TokEndOpen
-<a name="(line458)"></a>    p <font color=Red>&lt;-</font> posn
-<a name="(line459)"></a>    m <font color=Red>&lt;-</font> name
-<a name="(line460)"></a>    tok TokAnyClose
-<a name="(line461)"></a>    checkmatch p n m
-<a name="(line462)"></a>
-<a name="(line463)"></a><a name="attribute"></a>attribute <font color=Red>::</font> XParser Attribute
-<a name="(line464)"></a>attribute <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line465)"></a>    n <font color=Red>&lt;-</font> name <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"malformed attribute name\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line466)"></a>    tok TokEqual <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing = in attribute"</font>
-<a name="(line467)"></a>    v <font color=Red>&lt;-</font> attvalue <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing attvalue"</font>
-<a name="(line468)"></a>    return <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>
-<a name="(line469)"></a>
-<a name="(line470)"></a><a name="content"></a><font color=Blue>-- | Return a content particle, e.g. text, element, reference, etc</font>
-<a name="(line471)"></a>content <font color=Red>::</font> XParser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font>
-<a name="(line472)"></a>content <font color=Red>=</font>
-<a name="(line473)"></a>  <font color=Green><u>do</u></font> <font color=Cyan>{</font> p  <font color=Red>&lt;-</font> posn
-<a name="(line474)"></a>     <font color=Cyan>;</font> c' <font color=Red>&lt;-</font> content'
-<a name="(line475)"></a>     <font color=Cyan>;</font> return <font color=Cyan>(</font>c' p<font color=Cyan>)</font>
-<a name="(line476)"></a>     <font color=Cyan>}</font>
-<a name="(line477)"></a>  <font color=Green><u>where</u></font>
-<a name="(line478)"></a>     content' <font color=Red>=</font> oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"element"</font><font color=Cyan>,</font>   element   <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CElem<font color=Cyan>)</font>
-<a name="(line479)"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"chardata"</font><font color=Cyan>,</font>  chardata  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CString False<font color=Cyan>)</font>
-<a name="(line480)"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"reference"</font><font color=Cyan>,</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CRef<font color=Cyan>)</font>
-<a name="(line481)"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"CDATA"</font><font color=Cyan>,</font>     cdsect    <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CString True<font color=Cyan>)</font>
-<a name="(line482)"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"misc"</font><font color=Cyan>,</font>      misc      <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CMisc<font color=Cyan>)</font>
-<a name="(line483)"></a>                       <font color=Red>]</font>
-<a name="(line484)"></a>                  <font color=Cyan>`adjustErrP`</font> <font color=Cyan>(</font><font color=Magenta>"when looking for a content item,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line485)"></a><font color=Blue>-- (\    (element, text, reference, CDATA section, &lt;!--comment--&gt;, or &lt;?PI?&gt;")</font>
-<a name="(line486)"></a>
-<a name="(line487)"></a><a name="elementdecl"></a>elementdecl <font color=Red>::</font> XParser ElementDecl
-<a name="(line488)"></a>elementdecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line489)"></a>    tok TokSpecialOpen
-<a name="(line490)"></a>    tok <font color=Cyan>(</font>TokSpecial ELEMENTx<font color=Cyan>)</font>
-<a name="(line491)"></a>    n <font color=Red>&lt;-</font> peRef name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"expecting identifier in ELEMENT decl\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line492)"></a>    c <font color=Red>&lt;-</font> peRef contentspec
-<a name="(line493)"></a>             <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in content spec of ELEMENT decl: "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line494)"></a>    blank <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failBadP
-<a name="(line495)"></a>       <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating ELEMENT decl"</font>
-<a name="(line496)"></a>       <font color=Cyan>++</font><font color=Magenta>"\n    element name was "</font><font color=Cyan>++</font>show n
-<a name="(line497)"></a>       <font color=Cyan>++</font><font color=Magenta>"\n    contentspec was "</font><font color=Cyan>++</font><font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>ContentSpec p<font color=Cyan>)</font><font color=Red>-&gt;</font> show p<font color=Cyan>)</font> c<font color=Cyan>)</font>
-<a name="(line498)"></a>    return <font color=Cyan>(</font>ElementDecl n c<font color=Cyan>)</font>
-<a name="(line499)"></a>
-<a name="(line500)"></a><a name="contentspec"></a>contentspec <font color=Red>::</font> XParser ContentSpec
-<a name="(line501)"></a>contentspec <font color=Red>=</font>
-<a name="(line502)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"EMPTY"</font><font color=Cyan>,</font>  peRef <font color=Cyan>(</font>word <font color=Magenta>"EMPTY"</font><font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return EMPTY<font color=Cyan>)</font>
-<a name="(line503)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ANY"</font><font color=Cyan>,</font>    peRef <font color=Cyan>(</font>word <font color=Magenta>"ANY"</font><font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return ANY<font color=Cyan>)</font>
-<a name="(line504)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"mixed"</font><font color=Cyan>,</font>  peRef mixed <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Mixed<font color=Cyan>)</font>
-<a name="(line505)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"simple"</font><font color=Cyan>,</font> peRef cp <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> ContentSpec<font color=Cyan>)</font>
-<a name="(line506)"></a>           <font color=Red>]</font>
-<a name="(line507)"></a> <font color=Blue>--   `adjustErr` ("when looking for content spec,\n"++)</font>
-<a name="(line508)"></a> <font color=Blue>--   `adjustErr` (++"\nLooking for content spec (EMPTY, ANY, mixed, etc)")</font>
-<a name="(line509)"></a>
-<a name="(line510)"></a><a name="choice"></a>choice <font color=Red>::</font> XParser <font color=Red>[</font>CP<font color=Red>]</font>
-<a name="(line511)"></a>choice <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line512)"></a>    bracket <font color=Cyan>(</font>tok TokBraOpen <font color=Cyan>`debug`</font> <font color=Magenta>"Trying choice"</font><font color=Cyan>)</font>
-<a name="(line513)"></a>            <font color=Cyan>(</font>blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>`debug`</font> <font color=Magenta>"Succeeded with choice"</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line514)"></a>            <font color=Cyan>(</font>peRef cp <font color=Cyan>`sepBy1`</font> blank <font color=Cyan>(</font>tok TokPipe<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line515)"></a>
-<a name="(line516)"></a><a name="sequence"></a>sequence <font color=Red>::</font> XParser <font color=Red>[</font>CP<font color=Red>]</font>
-<a name="(line517)"></a>sequence <font color=Red>=</font> <font color=Green><u>do</u></font>	<font color=Blue>-- bracket is inappropriate because of inner failBad</font>
-<a name="(line518)"></a> <font color=Blue>-- bracket (tok TokBraOpen `debug` "Trying sequence")</font>
-<a name="(line519)"></a> <font color=Blue>--         (blank (tok TokBraClose `debug` "Succeeded with sequence"))</font>
-<a name="(line520)"></a> <font color=Blue>--         (peRef cp `sepBy1` blank (tok TokComma))</font>
-<a name="(line521)"></a>    tok TokBraOpen <font color=Cyan>`debug`</font> <font color=Magenta>"Trying sequence"</font>
-<a name="(line522)"></a>    cps <font color=Red>&lt;-</font> peRef cp <font color=Cyan>`sepBy1`</font> blank <font color=Cyan>(</font>tok TokComma<font color=Cyan>)</font>
-<a name="(line523)"></a>    blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>`debug`</font> <font color=Magenta>"Succeeded with sequence"</font><font color=Cyan>)</font>
-<a name="(line524)"></a>    return cps
-<a name="(line525)"></a>
-<a name="(line526)"></a><a name="cp"></a>cp <font color=Red>::</font> XParser CP
-<a name="(line527)"></a>cp <font color=Red>=</font> oneOf <font color=Red>[</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> n <font color=Red>&lt;-</font> name
-<a name="(line528)"></a>                  m <font color=Red>&lt;-</font> modifier
-<a name="(line529)"></a>                  <font color=Green><u>let</u></font> c <font color=Red>=</font> TagName n m
-<a name="(line530)"></a>                  return c <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ContentSpec: name "</font><font color=Cyan>++</font>show c<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line531)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> ss <font color=Red>&lt;-</font> sequence
-<a name="(line532)"></a>                  m <font color=Red>&lt;-</font> modifier
-<a name="(line533)"></a>                  <font color=Green><u>let</u></font> c <font color=Red>=</font> Seq ss m
-<a name="(line534)"></a>                  return c <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ContentSpec: sequence "</font><font color=Cyan>++</font>show c<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line535)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> cs <font color=Red>&lt;-</font> choice
-<a name="(line536)"></a>                  m <font color=Red>&lt;-</font> modifier
-<a name="(line537)"></a>                  <font color=Green><u>let</u></font> c <font color=Red>=</font> Choice cs m
-<a name="(line538)"></a>                  return c <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ContentSpec: choice "</font><font color=Cyan>++</font>show c<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line539)"></a>           <font color=Red>]</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Magenta>"\nwhen looking for a content particle"</font><font color=Cyan>)</font>
-<a name="(line540)"></a>
-<a name="(line541)"></a><a name="modifier"></a>modifier <font color=Red>::</font> XParser Modifier
-<a name="(line542)"></a>modifier <font color=Red>=</font> oneOf <font color=Red>[</font> <font color=Cyan>(</font> tok TokStar <font color=Cyan>&gt;&gt;</font> return Star <font color=Cyan>)</font>
-<a name="(line543)"></a>                 <font color=Cyan>,</font> <font color=Cyan>(</font> tok TokQuery <font color=Cyan>&gt;&gt;</font> return Query <font color=Cyan>)</font>
-<a name="(line544)"></a>                 <font color=Cyan>,</font> <font color=Cyan>(</font> tok TokPlus <font color=Cyan>&gt;&gt;</font> return Plus <font color=Cyan>)</font>
-<a name="(line545)"></a>                 <font color=Cyan>,</font> <font color=Cyan>(</font> return None <font color=Cyan>)</font>
-<a name="(line546)"></a>                 <font color=Red>]</font>
-<a name="(line547)"></a>
-<a name="(line548)"></a><font color=Blue>-- just for debugging</font>
-<a name="(line549)"></a><font color=Green><u>instance</u></font> Show CP <font color=Green><u>where</u></font>
-<a name="(line550)"></a>    show <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font> <font color=Red>=</font> n<font color=Cyan>++</font>show m
-<a name="(line551)"></a>    show <font color=Cyan>(</font>Choice cps m<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'('</font><font color=Red><b>:</b></font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>"|"</font> <font color=Cyan>(</font>map show cps<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line552)"></a>                          <font color=Cyan>++</font><font color=Magenta>")"</font><font color=Cyan>++</font>show m
-<a name="(line553)"></a>    show <font color=Cyan>(</font>Seq cps m<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'('</font><font color=Red><b>:</b></font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> <font color=Cyan>(</font>map show cps<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line554)"></a>                          <font color=Cyan>++</font><font color=Magenta>")"</font><font color=Cyan>++</font>show m
-<a name="(line555)"></a><font color=Green><u>instance</u></font> Show Modifier <font color=Green><u>where</u></font>
-<a name="(line556)"></a>    show None <font color=Red>=</font> <font color=Magenta>""</font>
-<a name="(line557)"></a>    show Query <font color=Red>=</font> <font color=Magenta>"?"</font>
-<a name="(line558)"></a>    show Star <font color=Red>=</font> <font color=Magenta>"*"</font>
-<a name="(line559)"></a>    show Plus <font color=Red>=</font> <font color=Magenta>"+"</font>
-<a name="(line560)"></a><font color=Blue>----</font>
-<a name="(line561)"></a>
-<a name="(line562)"></a><a name="mixed"></a>mixed <font color=Red>::</font> XParser Mixed
-<a name="(line563)"></a>mixed <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line564)"></a>    tok TokBraOpen
-<a name="(line565)"></a>    peRef <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokHash
-<a name="(line566)"></a>              word <font color=Magenta>"PCDATA"</font><font color=Cyan>)</font>
-<a name="(line567)"></a>    commit <font color=Cyan>$</font>
-<a name="(line568)"></a>      oneOf <font color=Red>[</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> cs <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokPipe
-<a name="(line569)"></a>                                         peRef name<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line570)"></a>                   blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>&gt;&gt;</font> tok TokStar<font color=Cyan>)</font>
-<a name="(line571)"></a>                   return <font color=Cyan>(</font>PCDATAplus cs<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line572)"></a>            <font color=Cyan>,</font> <font color=Cyan>(</font> blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>&gt;&gt;</font> tok TokStar<font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return PCDATA<font color=Cyan>)</font>
-<a name="(line573)"></a>            <font color=Cyan>,</font> <font color=Cyan>(</font> blank <font color=Cyan>(</font>tok TokBraClose<font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return PCDATA<font color=Cyan>)</font>
-<a name="(line574)"></a>            <font color=Red>]</font>
-<a name="(line575)"></a>        <font color=Cyan>`adjustErrP`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Magenta>"\nLooking for mixed content spec (#PCDATA | ...)*\n"</font><font color=Cyan>)</font>
-<a name="(line576)"></a>
-<a name="(line577)"></a><a name="attlistdecl"></a>attlistdecl <font color=Red>::</font> XParser AttListDecl
-<a name="(line578)"></a>attlistdecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line579)"></a>    tok TokSpecialOpen
-<a name="(line580)"></a>    tok <font color=Cyan>(</font>TokSpecial ATTLISTx<font color=Cyan>)</font>
-<a name="(line581)"></a>    n <font color=Red>&lt;-</font> peRef name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"expecting identifier in ATTLIST\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line582)"></a>    ds <font color=Red>&lt;-</font> peRef <font color=Cyan>(</font>many1 <font color=Cyan>(</font>peRef attdef<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line583)"></a>    blank <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing &gt; terminating ATTLIST"</font>
-<a name="(line584)"></a>    return <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font>
-<a name="(line585)"></a>
-<a name="(line586)"></a><a name="attdef"></a>attdef <font color=Red>::</font> XParser AttDef
-<a name="(line587)"></a>attdef <font color=Red>=</font>
-<a name="(line588)"></a>  <font color=Green><u>do</u></font> n <font color=Red>&lt;-</font> peRef name <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"expecting attribute name\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line589)"></a>     t <font color=Red>&lt;-</font> peRef atttype <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"within attlist defn: "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line590)"></a>     d <font color=Red>&lt;-</font> peRef defaultdecl <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in attlist defn: "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line591)"></a>     return <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>
-<a name="(line592)"></a>
-<a name="(line593)"></a><a name="atttype"></a>atttype <font color=Red>::</font> XParser AttType
-<a name="(line594)"></a>atttype <font color=Red>=</font>
-<a name="(line595)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"CDATA"</font><font color=Cyan>,</font>      word <font color=Magenta>"CDATA"</font> <font color=Cyan>&gt;&gt;</font> return StringType<font color=Cyan>)</font>
-<a name="(line596)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tokenized"</font><font color=Cyan>,</font>  tokenizedtype <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> TokenizedType<font color=Cyan>)</font>
-<a name="(line597)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"enumerated"</font><font color=Cyan>,</font> enumeratedtype <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EnumeratedType<font color=Cyan>)</font>
-<a name="(line598)"></a>           <font color=Red>]</font>
-<a name="(line599)"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for ATTTYPE,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line600)"></a> <font color=Blue>--   `adjustErr` (++"\nLooking for ATTTYPE (CDATA, tokenized, or enumerated")</font>
-<a name="(line601)"></a>
-<a name="(line602)"></a><a name="tokenizedtype"></a>tokenizedtype <font color=Red>::</font> XParser TokenizedType
-<a name="(line603)"></a>tokenizedtype <font color=Red>=</font>
-<a name="(line604)"></a>    oneOf <font color=Red>[</font> <font color=Cyan>(</font> word <font color=Magenta>"ID"</font> <font color=Cyan>&gt;&gt;</font> return ID<font color=Cyan>)</font>
-<a name="(line605)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"IDREF"</font> <font color=Cyan>&gt;&gt;</font> return IDREF<font color=Cyan>)</font>
-<a name="(line606)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"IDREFS"</font> <font color=Cyan>&gt;&gt;</font> return IDREFS<font color=Cyan>)</font>
-<a name="(line607)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"ENTITY"</font> <font color=Cyan>&gt;&gt;</font> return ENTITY<font color=Cyan>)</font>
-<a name="(line608)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"ENTITIES"</font> <font color=Cyan>&gt;&gt;</font> return ENTITIES<font color=Cyan>)</font>
-<a name="(line609)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"NMTOKEN"</font> <font color=Cyan>&gt;&gt;</font> return NMTOKEN<font color=Cyan>)</font>
-<a name="(line610)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"NMTOKENS"</font> <font color=Cyan>&gt;&gt;</font> return NMTOKENS<font color=Cyan>)</font>
-<a name="(line611)"></a>          <font color=Red>]</font> <font color=Cyan>`onFail`</font>
-<a name="(line612)"></a>    <font color=Green><u>do</u></font> <font color=Cyan>{</font> t <font color=Red>&lt;-</font> next
-<a name="(line613)"></a>       <font color=Cyan>;</font> failP <font color=Cyan>(</font><font color=Magenta>"Expected one of"</font>
-<a name="(line614)"></a>               <font color=Cyan>++</font><font color=Magenta>" (ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, NMTOKENS)"</font>
-<a name="(line615)"></a>               <font color=Cyan>++</font><font color=Magenta>"\nbut got "</font><font color=Cyan>++</font>show t<font color=Cyan>)</font>
-<a name="(line616)"></a>       <font color=Cyan>}</font>
-<a name="(line617)"></a><font color=Blue>-- `adjustErr` (++"\nLooking for a tokenized type:\n\ </font>
-<a name="(line618)"></a><font color=Blue>-- \    (ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, NMTOKENS)")</font>
-<a name="(line619)"></a>
-<a name="(line620)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Red>::</font> XParser EnumeratedType
-<a name="(line621)"></a>enumeratedtype <font color=Red>=</font>
-<a name="(line622)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"NOTATION"</font><font color=Cyan>,</font>   notationtype <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> NotationType<font color=Cyan>)</font>
-<a name="(line623)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"enumerated"</font><font color=Cyan>,</font> enumeration <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Enumeration<font color=Cyan>)</font>
-<a name="(line624)"></a>           <font color=Red>]</font>
-<a name="(line625)"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for an enumerated or NOTATION type,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line626)"></a>
-<a name="(line627)"></a><a name="notationtype"></a>notationtype <font color=Red>::</font> XParser NotationType
-<a name="(line628)"></a>notationtype <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line629)"></a>    word <font color=Magenta>"NOTATION"</font>
-<a name="(line630)"></a>    bracket <font color=Cyan>(</font>tok TokBraOpen<font color=Cyan>)</font> <font color=Cyan>(</font>blank <font color=Cyan>(</font>tok TokBraClose<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line631)"></a>            <font color=Cyan>(</font>peRef name <font color=Cyan>`sepBy1`</font> peRef <font color=Cyan>(</font>tok TokPipe<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line632)"></a>
-<a name="(line633)"></a><a name="enumeration"></a>enumeration <font color=Red>::</font> XParser Enumeration
-<a name="(line634)"></a>enumeration <font color=Red>=</font>
-<a name="(line635)"></a>    bracket <font color=Cyan>(</font>tok TokBraOpen<font color=Cyan>)</font> <font color=Cyan>(</font>blank <font color=Cyan>(</font>tok TokBraClose<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line636)"></a>            <font color=Cyan>(</font>peRef nmtoken <font color=Cyan>`sepBy1`</font> blank <font color=Cyan>(</font>peRef <font color=Cyan>(</font>tok TokPipe<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line637)"></a>
-<a name="(line638)"></a><a name="defaultdecl"></a>defaultdecl <font color=Red>::</font> XParser DefaultDecl
-<a name="(line639)"></a>defaultdecl <font color=Red>=</font>
-<a name="(line640)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"REQUIRED"</font><font color=Cyan>,</font>  tok TokHash <font color=Cyan>&gt;&gt;</font> word <font color=Magenta>"REQUIRED"</font> <font color=Cyan>&gt;&gt;</font> return REQUIRED<font color=Cyan>)</font>
-<a name="(line641)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"IMPLIED"</font><font color=Cyan>,</font>   tok TokHash <font color=Cyan>&gt;&gt;</font> word <font color=Magenta>"IMPLIED"</font> <font color=Cyan>&gt;&gt;</font> return IMPLIED<font color=Cyan>)</font>
-<a name="(line642)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"FIXED"</font><font color=Cyan>,</font>     <font color=Green><u>do</u></font> f <font color=Red>&lt;-</font> maybe <font color=Cyan>(</font>tok TokHash <font color=Cyan>&gt;&gt;</font> word <font color=Magenta>"FIXED"</font>
-<a name="(line643)"></a>                                                      <font color=Cyan>&gt;&gt;</font> return FIXED<font color=Cyan>)</font>
-<a name="(line644)"></a>                              a <font color=Red>&lt;-</font> peRef attvalue
-<a name="(line645)"></a>                              return <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font> <font color=Cyan>)</font>
-<a name="(line646)"></a>           <font color=Red>]</font>
-<a name="(line647)"></a>        <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for an attribute default decl,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line648)"></a><font color=Blue>--      `adjustErr` (++"\nLooking for an attribute default decl:\n\ </font>
-<a name="(line649)"></a><font color=Blue>-- \    (REQUIRED, IMPLIED, FIXED)")</font>
-<a name="(line650)"></a>
-<a name="(line651)"></a><a name="conditionalsect"></a>conditionalsect <font color=Red>::</font> XParser ConditionalSect
-<a name="(line652)"></a>conditionalsect <font color=Red>=</font> oneOf'
-<a name="(line653)"></a>    <font color=Red>[</font> <font color=Cyan>(</font> <font color=Magenta>"INCLUDE"</font>
-<a name="(line654)"></a>      <font color=Cyan>,</font> <font color=Green><u>do</u></font> tok TokSectionOpen
-<a name="(line655)"></a>           peRef <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection INCLUDEx<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line656)"></a>           p <font color=Red>&lt;-</font> posn
-<a name="(line657)"></a>           tok TokSqOpen <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing [ after INCLUDE"</font>
-<a name="(line658)"></a>           i <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef extsubsetdecl<font color=Cyan>)</font>
-<a name="(line659)"></a>           tok TokSectionClose
-<a name="(line660)"></a>                   <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"missing ]]&gt; for INCLUDE section"</font>
-<a name="(line661)"></a>                                     <font color=Cyan>++</font><font color=Magenta>"\n    begun at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
-<a name="(line662)"></a>           return <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line663)"></a>    <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"IGNORE"</font>
-<a name="(line664)"></a>      <font color=Cyan>,</font> <font color=Green><u>do</u></font> tok TokSectionOpen
-<a name="(line665)"></a>           peRef <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection IGNOREx<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line666)"></a>           p <font color=Red>&lt;-</font> posn
-<a name="(line667)"></a>           tok TokSqOpen <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing [ after IGNORE"</font>
-<a name="(line668)"></a>           i <font color=Red>&lt;-</font> many newIgnore  <font color=Blue>-- many ignoresectcontents</font>
-<a name="(line669)"></a>           tok TokSectionClose
-<a name="(line670)"></a>                   <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"missing ]]&gt; for IGNORE section"</font>
-<a name="(line671)"></a>                                     <font color=Cyan>++</font><font color=Magenta>"\n    begun at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
-<a name="(line672)"></a>           return <font color=Cyan>(</font>IgnoreSect []<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line673)"></a>    <font color=Red>]</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"in a conditional section,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line674)"></a>
-<a name="(line675)"></a><a name="newIgnore"></a>newIgnore <font color=Red>::</font> XParser Ignore
-<a name="(line676)"></a>newIgnore <font color=Red>=</font>
-<a name="(line677)"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokSectionOpen
-<a name="(line678)"></a>         many newIgnore <font color=Cyan>`debug`</font> <font color=Magenta>"IGNORING conditional section"</font>
-<a name="(line679)"></a>         tok TokSectionClose
-<a name="(line680)"></a>         return Ignore <font color=Cyan>`debug`</font> <font color=Magenta>"end of IGNORED conditional section"</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line681)"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> t <font color=Red>&lt;-</font> nottok <font color=Red>[</font>TokSectionOpen<font color=Cyan>,</font>TokSectionClose<font color=Red>]</font>
-<a name="(line682)"></a>         return Ignore  <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ignoring: "</font><font color=Cyan>++</font>show t<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line683)"></a>
-<a name="(line684)"></a><a name="ignoresectcontents"></a><font color=Blue>--- obsolete?</font>
-<a name="(line685)"></a>ignoresectcontents <font color=Red>::</font> XParser IgnoreSectContents
-<a name="(line686)"></a>ignoresectcontents <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line687)"></a>    i <font color=Red>&lt;-</font> ignore
-<a name="(line688)"></a>    is <font color=Red>&lt;-</font> many <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokSectionOpen
-<a name="(line689)"></a>                   ic <font color=Red>&lt;-</font> ignoresectcontents
-<a name="(line690)"></a>                   tok TokSectionClose
-<a name="(line691)"></a>                   ig <font color=Red>&lt;-</font> ignore
-<a name="(line692)"></a>                   return <font color=Cyan>(</font>ic<font color=Cyan>,</font>ig<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line693)"></a>    return <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>
-<a name="(line694)"></a>
-<a name="(line695)"></a><a name="ignore"></a>ignore <font color=Red>::</font> XParser Ignore
-<a name="(line696)"></a>ignore <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line697)"></a>  is <font color=Red>&lt;-</font> many1 <font color=Cyan>(</font>nottok <font color=Red>[</font>TokSectionOpen<font color=Cyan>,</font>TokSectionClose<font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line698)"></a>  return Ignore  <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ignored all of: "</font><font color=Cyan>++</font>show is<font color=Cyan>)</font>
-<a name="(line699)"></a><font color=Blue>----</font>
-<a name="(line700)"></a>
-<a name="(line701)"></a><a name="reference"></a><font color=Blue>-- | Return either a general entity reference, or a character reference.</font>
-<a name="(line702)"></a>reference <font color=Red>::</font> XParser Reference
-<a name="(line703)"></a>reference <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line704)"></a>    bracket <font color=Cyan>(</font>tok TokAmp<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSemi<font color=Cyan>)</font> <font color=Cyan>(</font>freetext <font color=Cyan>&gt;&gt;=</font> val<font color=Cyan>)</font>
-<a name="(line705)"></a>  <font color=Green><u>where</u></font>
-<a name="(line706)"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font><font color=Magenta>'x'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font> <font color=Red>|</font> all isHexDigit i
-<a name="(line707)"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readHex <font color=Cyan>$</font> i
-<a name="(line708)"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font>     <font color=Red>|</font> all isDigit i
-<a name="(line709)"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readDec <font color=Cyan>$</font> i
-<a name="(line710)"></a>    val name        <font color=Red>=</font> return <font color=Cyan>.</font> RefEntity <font color=Cyan>$</font> name
-<a name="(line711)"></a>
-<a name="(line712)"></a><font color=Blue>{- -- following is incorrect
-<a name="(line713)"></a>reference =
-<a name="(line714)"></a>    ( charref &gt;&gt;= return . RefChar) `onFail`
-<a name="(line715)"></a>    ( entityref &gt;&gt;= return . RefEntity)
-<a name="(line716)"></a>
-<a name="(line717)"></a>entityref :: XParser EntityRef
-<a name="(line718)"></a>entityref = do
-<a name="(line719)"></a>    bracket (tok TokAmp) (tok TokSemi) name
-<a name="(line720)"></a>
-<a name="(line721)"></a>charref :: XParser CharRef
-<a name="(line722)"></a>charref = do
-<a name="(line723)"></a>    bracket (tok TokAmp) (tok TokSemi) (freetext &gt;&gt;= readCharVal)
-<a name="(line724)"></a>  where
-<a name="(line725)"></a>    readCharVal ('#':'x':i) = return . fst . head . readHex $ i
-<a name="(line726)"></a>    readCharVal ('#':i)     = return . fst . head . readDec $ i
-<a name="(line727)"></a>    readCharVal _           = mzero
-<a name="(line728)"></a>-}</font>
-<a name="(line729)"></a>
-<a name="(line730)"></a><a name="pereference"></a>pereference <font color=Red>::</font> XParser PEReference
-<a name="(line731)"></a>pereference <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line732)"></a><font color=Blue>--  bracket (tok TokPercent) (tok TokSemi) nmtoken</font>
-<a name="(line733)"></a>    tok TokPercent
-<a name="(line734)"></a>    p <font color=Red>&lt;-</font> nmtoken
-<a name="(line735)"></a>    tok TokSemi
-<a name="(line736)"></a>    return p
-<a name="(line737)"></a>
-<a name="(line738)"></a><a name="entitydecl"></a>entitydecl <font color=Red>::</font> XParser EntityDecl
-<a name="(line739)"></a>entitydecl <font color=Red>=</font>
-<a name="(line740)"></a>    <font color=Cyan>(</font> gedecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EntityGEDecl<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line741)"></a>    <font color=Cyan>(</font> pedecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EntityPEDecl<font color=Cyan>)</font>
-<a name="(line742)"></a>
-<a name="(line743)"></a><a name="gedecl"></a>gedecl <font color=Red>::</font> XParser GEDecl
-<a name="(line744)"></a>gedecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line745)"></a>    tok TokSpecialOpen
-<a name="(line746)"></a>    tok <font color=Cyan>(</font>TokSpecial ENTITYx<font color=Cyan>)</font>
-<a name="(line747)"></a>    n <font color=Red>&lt;-</font> name
-<a name="(line748)"></a>    e <font color=Red>&lt;-</font> entitydef <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in general entity defn "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line749)"></a>    tok TokAnyClose <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating G ENTITY decl "</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
-<a name="(line750)"></a>    stUpdate <font color=Cyan>(</font>addGE n e<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"added GE defn &amp;"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
-<a name="(line751)"></a>    return <font color=Cyan>(</font>GEDecl n e<font color=Cyan>)</font>
-<a name="(line752)"></a>
-<a name="(line753)"></a><a name="pedecl"></a>pedecl <font color=Red>::</font> XParser PEDecl
-<a name="(line754)"></a>pedecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line755)"></a>    tok TokSpecialOpen
-<a name="(line756)"></a>    tok <font color=Cyan>(</font>TokSpecial ENTITYx<font color=Cyan>)</font>
-<a name="(line757)"></a>    tok TokPercent
-<a name="(line758)"></a>    n <font color=Red>&lt;-</font> name
-<a name="(line759)"></a>    e <font color=Red>&lt;-</font> pedef <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in parameter entity defn "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line760)"></a>    tok TokAnyClose <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating P ENTITY decl "</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
-<a name="(line761)"></a>    stUpdate <font color=Cyan>(</font>addPE n e<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"added PE defn %"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";\n"</font><font color=Cyan>++</font>show e<font color=Cyan>)</font>
-<a name="(line762)"></a>    return <font color=Cyan>(</font>PEDecl n e<font color=Cyan>)</font>
-<a name="(line763)"></a>
-<a name="(line764)"></a><a name="entitydef"></a>entitydef <font color=Red>::</font> XParser EntityDef
-<a name="(line765)"></a>entitydef <font color=Red>=</font>
-<a name="(line766)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"entityvalue"</font><font color=Cyan>,</font> entityvalue <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> DefEntityValue<font color=Cyan>)</font>
-<a name="(line767)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"external"</font><font color=Cyan>,</font>    <font color=Green><u>do</u></font> eid <font color=Red>&lt;-</font> externalid
-<a name="(line768)"></a>                                ndd <font color=Red>&lt;-</font> maybe ndatadecl
-<a name="(line769)"></a>                                return <font color=Cyan>(</font>DefExternalID eid ndd<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line770)"></a>           <font color=Red>]</font>
-<a name="(line771)"></a>
-<a name="(line772)"></a><a name="pedef"></a>pedef <font color=Red>::</font> XParser PEDef
-<a name="(line773)"></a>pedef <font color=Red>=</font>
-<a name="(line774)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"entityvalue"</font><font color=Cyan>,</font> entityvalue <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PEDefEntityValue<font color=Cyan>)</font>
-<a name="(line775)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"externalid"</font><font color=Cyan>,</font>  externalid  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PEDefExternalID<font color=Cyan>)</font>
-<a name="(line776)"></a>           <font color=Red>]</font>
-<a name="(line777)"></a>
-<a name="(line778)"></a><a name="externalid"></a>externalid <font color=Red>::</font> XParser ExternalID
-<a name="(line779)"></a>externalid <font color=Red>=</font>
-<a name="(line780)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"SYSTEM"</font><font color=Cyan>,</font> <font color=Green><u>do</u></font> word <font color=Magenta>"SYSTEM"</font>
-<a name="(line781)"></a>                           s <font color=Red>&lt;-</font> systemliteral
-<a name="(line782)"></a>                           return <font color=Cyan>(</font>SYSTEM s<font color=Cyan>)</font> <font color=Cyan>)</font>
-<a name="(line783)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"PUBLIC"</font><font color=Cyan>,</font> <font color=Green><u>do</u></font> word <font color=Magenta>"PUBLIC"</font>
-<a name="(line784)"></a>                           p <font color=Red>&lt;-</font> pubidliteral
-<a name="(line785)"></a>                           s <font color=Red>&lt;-</font> systemliteral
-<a name="(line786)"></a>                           return <font color=Cyan>(</font>PUBLIC p s<font color=Cyan>)</font> <font color=Cyan>)</font>
-<a name="(line787)"></a>           <font color=Red>]</font>
-<a name="(line788)"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for an external id,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line789)"></a>
-<a name="(line790)"></a><a name="ndatadecl"></a>ndatadecl <font color=Red>::</font> XParser NDataDecl
-<a name="(line791)"></a>ndatadecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line792)"></a>    word <font color=Magenta>"NDATA"</font>
-<a name="(line793)"></a>    n <font color=Red>&lt;-</font> name
-<a name="(line794)"></a>    return <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>
-<a name="(line795)"></a>
-<a name="(line796)"></a><a name="textdecl"></a>textdecl <font color=Red>::</font> XParser TextDecl
-<a name="(line797)"></a>textdecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line798)"></a>    tok TokPIOpen
-<a name="(line799)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
-<a name="(line800)"></a>    v <font color=Red>&lt;-</font> maybe versioninfo
-<a name="(line801)"></a>    e <font color=Red>&lt;-</font> encodingdecl
-<a name="(line802)"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failP <font color=Magenta>"expected ?&gt; terminating text decl"</font>
-<a name="(line803)"></a>    return <font color=Cyan>(</font>TextDecl v e<font color=Cyan>)</font>
-<a name="(line804)"></a>
-<a name="(line805)"></a><a name="extparsedent"></a>extparsedent <font color=Red>::</font> XParser <font color=Cyan>(</font>ExtParsedEnt Posn<font color=Cyan>)</font>
-<a name="(line806)"></a>extparsedent <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line807)"></a>    t <font color=Red>&lt;-</font> maybe textdecl
-<a name="(line808)"></a>    c <font color=Red>&lt;-</font> content
-<a name="(line809)"></a>    return <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font>
-<a name="(line810)"></a>
-<a name="(line811)"></a><a name="extpe"></a>extpe <font color=Red>::</font> XParser ExtPE
-<a name="(line812)"></a>extpe <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line813)"></a>    t <font color=Red>&lt;-</font> maybe textdecl
-<a name="(line814)"></a>    e <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef extsubsetdecl<font color=Cyan>)</font>
-<a name="(line815)"></a>    return <font color=Cyan>(</font>ExtPE t e<font color=Cyan>)</font>
-<a name="(line816)"></a>
-<a name="(line817)"></a><a name="encodingdecl"></a>encodingdecl <font color=Red>::</font> XParser EncodingDecl
-<a name="(line818)"></a>encodingdecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line819)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"encoding"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"ENCODING"</font><font color=Cyan>)</font>
-<a name="(line820)"></a>    tok TokEqual <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"expected = in 'encoding' decl"</font>
-<a name="(line821)"></a>    f <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line822)"></a>    return <font color=Cyan>(</font>EncodingDecl f<font color=Cyan>)</font>
-<a name="(line823)"></a>
-<a name="(line824)"></a><a name="notationdecl"></a>notationdecl <font color=Red>::</font> XParser NotationDecl
-<a name="(line825)"></a>notationdecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line826)"></a>    tok TokSpecialOpen
-<a name="(line827)"></a>    tok <font color=Cyan>(</font>TokSpecial NOTATIONx<font color=Cyan>)</font>
-<a name="(line828)"></a>    n <font color=Red>&lt;-</font> name
-<a name="(line829)"></a>    e <font color=Red>&lt;-</font> either externalid publicid
-<a name="(line830)"></a>    tok TokAnyClose <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating NOTATION decl "</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
-<a name="(line831)"></a>    return <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>
-<a name="(line832)"></a>
-<a name="(line833)"></a><a name="publicid"></a>publicid <font color=Red>::</font> XParser PublicID
-<a name="(line834)"></a>publicid <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line835)"></a>    word <font color=Magenta>"PUBLIC"</font>
-<a name="(line836)"></a>    p <font color=Red>&lt;-</font> pubidliteral
-<a name="(line837)"></a>    return <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>
-<a name="(line838)"></a>
-<a name="(line839)"></a><a name="entityvalue"></a>entityvalue <font color=Red>::</font> XParser EntityValue
-<a name="(line840)"></a>entityvalue <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line841)"></a> <font color=Blue>-- evs &lt;- bracket (tok TokQuote) (tok TokQuote) (many (peRef ev))</font>
-<a name="(line842)"></a>    tok TokQuote
-<a name="(line843)"></a>    pn <font color=Red>&lt;-</font> posn
-<a name="(line844)"></a>    evs <font color=Red>&lt;-</font> many ev
-<a name="(line845)"></a>    tok TokQuote <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"expected quote to terminate entityvalue"</font>
-<a name="(line846)"></a>    <font color=Blue>-- quoted text must be rescanned for possible PERefs</font>
-<a name="(line847)"></a>    st <font color=Red>&lt;-</font> stGet
-<a name="(line848)"></a>    Prelude<font color=Cyan>.</font>either failBad <font color=Cyan>(</font>return <font color=Cyan>.</font> EntityValue<font color=Cyan>)</font> <font color=Cyan>.</font> fst3 <font color=Cyan>$</font>
-<a name="(line849)"></a>                <font color=Cyan>(</font>runParser <font color=Cyan>(</font>many ev<font color=Cyan>)</font> st
-<a name="(line850)"></a>                         <font color=Cyan>(</font>reLexEntityValue <font color=Cyan>(</font><font color=Red>\</font>s<font color=Red>-&gt;</font> stringify <font color=Cyan>(</font>lookupPE s st<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line851)"></a>                                           pn
-<a name="(line852)"></a>                                           <font color=Cyan>(</font>flattenEV <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line853)"></a>  <font color=Green><u>where</u></font>
-<a name="(line854)"></a>    stringify <font color=Cyan>(</font>Just <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> Just <font color=Cyan>(</font>flattenEV ev<font color=Cyan>)</font>
-<a name="(line855)"></a>    stringify <font color=Green><u>_</u></font> <font color=Red>=</font> Nothing
-<a name="(line856)"></a>
-<a name="(line857)"></a><a name="ev"></a>ev <font color=Red>::</font> XParser EV
-<a name="(line858)"></a>ev <font color=Red>=</font>
-<a name="(line859)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"string"</font><font color=Cyan>,</font>    <font color=Cyan>(</font>string<font color=Cyan>`onFail`</font>freetext<font color=Cyan>)</font> <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVString<font color=Cyan>)</font>
-<a name="(line860)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"reference"</font><font color=Cyan>,</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVRef<font color=Cyan>)</font>
-<a name="(line861)"></a>           <font color=Red>]</font>
-<a name="(line862)"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for entity value,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line863)"></a>
-<a name="(line864)"></a><a name="attvalue"></a>attvalue <font color=Red>::</font> XParser AttValue
-<a name="(line865)"></a>attvalue <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line866)"></a>    avs <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
-<a name="(line867)"></a>                   <font color=Cyan>(</font>many <font color=Cyan>(</font>either freetext reference<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line868)"></a>    return <font color=Cyan>(</font>AttValue avs<font color=Cyan>)</font>
-<a name="(line869)"></a>
-<a name="(line870)"></a><a name="systemliteral"></a>systemliteral <font color=Red>::</font> XParser SystemLiteral
-<a name="(line871)"></a>systemliteral <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line872)"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line873)"></a>    return <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>            <font color=Blue>-- note: refs &amp;...; not permitted</font>
-<a name="(line874)"></a>
-<a name="(line875)"></a><a name="pubidliteral"></a>pubidliteral <font color=Red>::</font> XParser PubidLiteral
-<a name="(line876)"></a>pubidliteral <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line877)"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line878)"></a>    return <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>             <font color=Blue>-- note: freetext is too liberal here</font>
-<a name="(line879)"></a>
-<a name="(line880)"></a><a name="chardata"></a><font color=Blue>-- | Return parsed freetext (i.e. until the next markup)</font>
-<a name="(line881)"></a>chardata <font color=Red>::</font> XParser CharData
-<a name="(line882)"></a>chardata <font color=Red>=</font> freetext
-<a name="(line883)"></a>
-</pre>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Parse.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>{-# OPTIONS -cpp #-}</font>
+<a name="line-2"></a><font color=Blue>-- | A non-validating XML parser.  For the input grammar, see</font>
+<a name="line-3"></a><font color=Blue>--   &lt;<a href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</a>&gt;.</font>
+<a name="line-4"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse
+<a name="line-5"></a>  <font color=Cyan>(</font>
+<a name="line-6"></a>  <font color=Blue>-- * Parse a whole document</font>
+<a name="line-7"></a>    xmlParse<font color=Cyan>,</font> xmlParse'
+<a name="line-8"></a>  <font color=Blue>-- * Parse just a DTD</font>
+<a name="line-9"></a>  <font color=Cyan>,</font> dtdParse<font color=Cyan>,</font> dtdParse'
+<a name="line-10"></a>  <font color=Blue>-- * Parse a partial document</font>
+<a name="line-11"></a>  <font color=Cyan>,</font> xmlParseWith
+<a name="line-12"></a>  <font color=Blue>-- * Individual parsers for use with /xmlParseWith/ and module SAX</font>
+<a name="line-13"></a>  <font color=Cyan>,</font> document<font color=Cyan>,</font> element<font color=Cyan>,</font> content
+<a name="line-14"></a>  <font color=Cyan>,</font> comment<font color=Cyan>,</font> cdsect<font color=Cyan>,</font> chardata
+<a name="line-15"></a>  <font color=Cyan>,</font> reference<font color=Cyan>,</font> doctypedecl
+<a name="line-16"></a>  <font color=Cyan>,</font> processinginstruction
+<a name="line-17"></a>  <font color=Cyan>,</font> elemtag<font color=Cyan>,</font> name<font color=Cyan>,</font> tok
+<a name="line-18"></a>  <font color=Cyan>,</font> elemOpenTag<font color=Cyan>,</font> elemCloseTag
+<a name="line-19"></a>  <font color=Cyan>,</font> emptySTs<font color=Cyan>,</font> XParser
+<a name="line-20"></a>  <font color=Blue>-- * These general utility functions don't belong here</font>
+<a name="line-21"></a>  <font color=Cyan>,</font> fst3<font color=Cyan>,</font> snd3<font color=Cyan>,</font> thd3
+<a name="line-22"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-23"></a>
+<a name="line-24"></a><font color=Blue>-- An XML parser, written using a slightly extended version of the</font>
+<a name="line-25"></a><font color=Blue>-- Hutton/Meijer parser combinators.  The input is tokenised internally</font>
+<a name="line-26"></a><font color=Blue>-- by the lexer xmlLex.  Whilst parsing, we gather a symbol</font>
+<a name="line-27"></a><font color=Blue>-- table of entity references.  PERefs must be defined before use, so we</font>
+<a name="line-28"></a><font color=Blue>-- expand their uses as we encounter them, forcing the remainder of the</font>
+<a name="line-29"></a><font color=Blue>-- input to be re-lexed and re-parsed.  GERefs are simply stored for</font>
+<a name="line-30"></a><font color=Blue>-- later retrieval.</font>
+<a name="line-31"></a>
+<a name="line-32"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>either<font color=Cyan>,</font>maybe<font color=Cyan>,</font>sequence<font color=Cyan>)</font>
+<a name="line-33"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Prelude <font color=Cyan>(</font>either<font color=Cyan>)</font>
+<a name="line-34"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
+<a name="line-35"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font>       <font color=Blue>-- debugging only</font>
+<a name="line-36"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>isSpace<font color=Cyan>,</font>isDigit<font color=Cyan>,</font>isHexDigit<font color=Cyan>)</font>
+<a name="line-37"></a><font color=Green><u>import</u></font> Monad hiding <font color=Cyan>(</font>sequence<font color=Cyan>)</font>
+<a name="line-38"></a><font color=Green><u>import</u></font> Numeric <font color=Cyan>(</font>readDec<font color=Cyan>,</font>readHex<font color=Cyan>)</font>
+<a name="line-39"></a>
+<a name="line-40"></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="line-41"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn
+<a name="line-42"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Lex
+<a name="line-43"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly<font color=Cyan>.</font>NoLeak<font color=Cyan>.</font>State
+<a name="line-44"></a>
+<a name="line-45"></a><font color=Green><u>import</u></font> System<font color=Cyan>.</font>FilePath <font color=Cyan>(</font>combine<font color=Cyan>,</font> dropFileName<font color=Cyan>)</font>
+<a name="line-46"></a>
+<a name="line-47"></a>
+<a name="line-48"></a><font color=Magenta><em>#if ( defined(__GLASGOW_HASKELL__) &amp;&amp; __GLASGOW_HASKELL__ &gt; 502 ) || \</em></font>
+<a name="line-49"></a>    <font color=Cyan>(</font> defined<font color=Cyan>(</font><b><font color=Magenta>__NHC__</font></b><font color=Cyan>)</font> <font color=Cyan>&amp;&amp;</font> <b><font color=Magenta>__NHC__</font></b> <font color=Cyan>&gt;</font> <font color=Magenta>114</font> <font color=Cyan>)</font> <font color=Cyan>||</font> defined<font color=Cyan>(</font><b><font color=Magenta>__HUGS__</font></b><font color=Cyan>)</font>
+<a name="line-50"></a><font color=Green><u>import</u></font> System<font color=Cyan>.</font>IO<font color=Cyan>.</font>Unsafe <font color=Cyan>(</font>unsafePerformIO<font color=Cyan>)</font>
+<a name="line-51"></a><font color=Magenta><em>#elif defined(__GLASGOW_HASKELL__)</em></font>
+<a name="line-52"></a><font color=Green><u>import</u></font> IOExts <font color=Cyan>(</font>unsafePerformIO<font color=Cyan>)</font>
+<a name="line-53"></a><font color=Magenta><em>#elif defined(__NHC__)</em></font>
+<a name="line-54"></a><font color=Green><u>import</u></font> IOExtras <font color=Cyan>(</font>unsafePerformIO<font color=Cyan>)</font>
+<a name="line-55"></a><font color=Magenta><em>#elif defined(__HBC__)</em></font>
+<a name="line-56"></a><font color=Green><u>import</u></font> UnsafePerformIO
+<a name="line-57"></a><font color=Magenta><em>#endif</em></font>
+<a name="line-58"></a>
+<a name="line-59"></a><font color=Blue>--  #define DEBUG</font>
+<a name="line-60"></a>
+<a name="line-61"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>
+<a name="line-62"></a><font color=Magenta><em>#  if ( defined(__GLASGOW_HASKELL__) &amp;&amp; __GLASGOW_HASKELL__ &gt; 502 ) || \</em></font>
+<a name="line-63"></a>      <font color=Cyan>(</font> defined<font color=Cyan>(</font><b><font color=Magenta>__NHC__</font></b><font color=Cyan>)</font> <font color=Cyan>&amp;&amp;</font> <b><font color=Magenta>__NHC__</font></b> <font color=Cyan>&gt;</font> <font color=Magenta>114</font> <font color=Cyan>)</font> <font color=Cyan>||</font> defined<font color=Cyan>(</font><b><font color=Magenta>__HUGS__</font></b><font color=Cyan>)</font>
+<a name="line-64"></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="line-65"></a><font color=Magenta><em>#  elif defined(__GLASGOW_HASKELL__)</em></font>
+<a name="line-66"></a><font color=Green><u>import</u></font> IOExts<font color=Cyan>(</font>trace<font color=Cyan>)</font>
+<a name="line-67"></a><font color=Magenta><em>#  elif defined(__NHC__) || defined(__HBC__)</em></font>
+<a name="line-68"></a><font color=Green><u>import</u></font> NonStdTrace
+<a name="line-69"></a><font color=Magenta><em>#  endif</em></font>
+<a name="line-70"></a><a name="debug"></a><font color=Blue>debug</font> <font color=Red>::</font> a <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> a
+<a name="line-71"></a><a name="debug"></a><font color=Blue>v</font> <font color=Cyan>`debug`</font> s <font color=Red>=</font> trace s v
+<a name="line-72"></a><font color=Magenta><em>#else</em></font>
+<a name="line-73"></a><a name="debug"></a><font color=Blue>v</font> <font color=Cyan>`debug`</font> s <font color=Red>=</font> v
+<a name="line-74"></a><font color=Magenta><em>#endif</em></font>
+<a name="line-75"></a>
+<a name="line-76"></a>
+<a name="line-77"></a><a name="xmlParse"></a><font color=Blue>-- | To parse a whole document, @xmlParse file content@ takes a filename</font>
+<a name="line-78"></a><font color=Blue>--   (for generating error reports) and the string content of that file.</font>
+<a name="line-79"></a><font color=Blue>--   A parse error causes program failure, with message to stderr.</font>
+<a name="line-80"></a><font color=Blue>xmlParse</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Document Posn
+<a name="line-81"></a>
+<a name="line-82"></a><a name="xmlParse'"></a><font color=Blue>-- | To parse a whole document, @xmlParse' file content@ takes a filename</font>
+<a name="line-83"></a><font color=Blue>--   (for generating error reports) and the string content of that file.</font>
+<a name="line-84"></a><font color=Blue>--   Any parse error message is passed back to the caller through the</font>
+<a name="line-85"></a><font color=Blue>--   @Either@ type.</font>
+<a name="line-86"></a><font color=Blue>xmlParse'</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Either String <font color=Cyan>(</font>Document Posn<font color=Cyan>)</font>
+<a name="line-87"></a>
+<a name="line-88"></a><a name="dtdParse"></a><font color=Blue>-- | To parse just a DTD, @dtdParse file content@ takes a filename</font>
+<a name="line-89"></a><font color=Blue>--   (for generating error reports) and the string content of that</font>
+<a name="line-90"></a><font color=Blue>--   file.  If no DTD was found, you get @Nothing@ rather than an error.</font>
+<a name="line-91"></a><font color=Blue>--   However, if a DTD is found but contains errors, the program crashes.</font>
+<a name="line-92"></a><font color=Blue>dtdParse</font>  <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Maybe DocTypeDecl
+<a name="line-93"></a>
+<a name="line-94"></a><a name="dtdParse'"></a><font color=Blue>-- | To parse just a DTD, @dtdParse' file content@ takes a filename</font>
+<a name="line-95"></a><font color=Blue>--   (for generating error reports) and the string content of that</font>
+<a name="line-96"></a><font color=Blue>--   file.  If no DTD was found, you get @Right Nothing@.</font>
+<a name="line-97"></a><font color=Blue>--   If a DTD was found but contains errors, you get a @Left message@.</font>
+<a name="line-98"></a><font color=Blue>dtdParse'</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Either String <font color=Cyan>(</font>Maybe DocTypeDecl<font color=Cyan>)</font>
+<a name="line-99"></a>
+<a name="line-100"></a><font color=Blue>xmlParse</font>  name  <font color=Red>=</font> Prelude<font color=Cyan>.</font>either error id <font color=Cyan>.</font> xmlParse' name
+<a name="line-101"></a><font color=Blue>dtdParse</font>  name  <font color=Red>=</font> Prelude<font color=Cyan>.</font>either error id <font color=Cyan>.</font> dtdParse' name
+<a name="line-102"></a>
+<a name="line-103"></a><font color=Blue>xmlParse'</font> name  <font color=Red>=</font> fst3 <font color=Cyan>.</font> runParser <font color=Cyan>(</font>toEOF document<font color=Cyan>)</font> emptySTs <font color=Cyan>.</font> xmlLex name
+<a name="line-104"></a><font color=Blue>dtdParse'</font> name  <font color=Red>=</font> fst3 <font color=Cyan>.</font> runParser justDTD  emptySTs <font color=Cyan>.</font> xmlLex name
+<a name="line-105"></a>
+<a name="line-106"></a><a name="toEOF"></a><font color=Blue>toEOF</font> <font color=Red>=</font> id	<font color=Blue>-- there are other possible implementations...</font>
+<a name="line-107"></a>
+<a name="line-108"></a><a name="xmlParseWith"></a><font color=Blue>-- | To parse a partial document, e.g. from an XML-based stream protocol,</font>
+<a name="line-109"></a><font color=Blue>--   where you may later want to get more document elements from the same</font>
+<a name="line-110"></a><font color=Blue>--   stream.  Arguments are: a parser for the item you want, and the</font>
+<a name="line-111"></a><font color=Blue>--   already-lexed input to parse from.  Returns the item you wanted</font>
+<a name="line-112"></a><font color=Blue>--   (or an error message), plus the remainder of the input.</font>
+<a name="line-113"></a><font color=Blue>xmlParseWith</font> <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-114"></a>                <font color=Red>-&gt;</font> <font color=Cyan>(</font>Either String a<font color=Cyan>,</font> <font color=Red>[</font><font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-115"></a><font color=Blue>xmlParseWith</font> p <font color=Red>=</font> <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>v<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Red>-&gt;</font><font color=Cyan>(</font>v<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>.</font> runParser p emptySTs
+<a name="line-116"></a>
+<a name="line-117"></a>
+<a name="line-118"></a><font color=Blue>---- Symbol table stuff ----</font>
+<a name="line-119"></a>
+<a name="line-120"></a><a name="SymTabs"></a><font color=Green><u>type</u></font> SymTabs <font color=Red>=</font> <font color=Cyan>(</font>SymTab PEDef<font color=Cyan>,</font> SymTab EntityDef<font color=Cyan>)</font>
+<a name="line-121"></a>
+<a name="line-122"></a><a name="emptySTs"></a><font color=Blue>-- | Some empty symbol tables for GE and PE references.</font>
+<a name="line-123"></a><font color=Blue>emptySTs</font> <font color=Red>::</font> SymTabs
+<a name="line-124"></a><font color=Blue>emptySTs</font> <font color=Red>=</font> <font color=Cyan>(</font>emptyST<font color=Cyan>,</font> emptyST<font color=Cyan>)</font>
+<a name="line-125"></a>
+<a name="line-126"></a><a name="addPE"></a><font color=Blue>addPE</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> PEDef <font color=Red>-&gt;</font> SymTabs <font color=Red>-&gt;</font> SymTabs
+<a name="line-127"></a><font color=Blue>addPE</font> n v <font color=Cyan>(</font>pe<font color=Cyan>,</font>ge<font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font>addST n v pe<font color=Cyan>,</font> ge<font color=Cyan>)</font>
+<a name="line-128"></a>
+<a name="line-129"></a><a name="addGE"></a><font color=Blue>addGE</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> EntityDef <font color=Red>-&gt;</font> SymTabs <font color=Red>-&gt;</font> SymTabs
+<a name="line-130"></a><font color=Blue>addGE</font> n v <font color=Cyan>(</font>pe<font color=Cyan>,</font>ge<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>let</u></font> newge <font color=Red>=</font> addST n v ge <font color=Green><u>in</u></font> newge <font color=Cyan>`seq`</font> <font color=Cyan>(</font>pe<font color=Cyan>,</font> newge<font color=Cyan>)</font>
+<a name="line-131"></a>
+<a name="line-132"></a><a name="lookupPE"></a><font color=Blue>lookupPE</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> SymTabs <font color=Red>-&gt;</font> Maybe PEDef
+<a name="line-133"></a><font color=Blue>lookupPE</font> s <font color=Cyan>(</font>pe<font color=Cyan>,</font>ge<font color=Cyan>)</font> <font color=Red>=</font> lookupST s pe
+<a name="line-134"></a>
+<a name="line-135"></a><a name="flattenEV"></a><font color=Blue>flattenEV</font> <font color=Red>::</font> EntityValue <font color=Red>-&gt;</font> String
+<a name="line-136"></a><font color=Blue>flattenEV</font> <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font> <font color=Red>=</font> concatMap flatten evs
+<a name="line-137"></a>  <font color=Green><u>where</u></font>
+<a name="line-138"></a>    flatten <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>          <font color=Red>=</font> s
+<a name="line-139"></a>    flatten <font color=Cyan>(</font>EVRef <font color=Cyan>(</font>RefEntity r<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&amp;"</font> <font color=Cyan>++</font>r<font color=Cyan>++</font><font color=Magenta>";"</font>
+<a name="line-140"></a>    flatten <font color=Cyan>(</font>EVRef <font color=Cyan>(</font>RefChar r<font color=Cyan>)</font><font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&amp;#"</font><font color=Cyan>++</font>show r<font color=Cyan>++</font><font color=Magenta>";"</font>
+<a name="line-141"></a> <font color=Blue>-- flatten (EVPERef n)           = "%" ++n++";"</font>
+<a name="line-142"></a>
+<a name="line-143"></a>
+<a name="line-144"></a><a name="fst3"></a><font color=Blue>---- Misc ----</font>
+<a name="line-145"></a><font color=Blue>fst3</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>-&gt;</font> a
+<a name="line-146"></a><a name="snd3"></a><font color=Blue>snd3</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>-&gt;</font> b
+<a name="line-147"></a><a name="thd3"></a><font color=Blue>thd3</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>-&gt;</font> c
+<a name="line-148"></a>
+<a name="line-149"></a><font color=Blue>fst3</font> <font color=Cyan>(</font>a<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> a
+<a name="line-150"></a><font color=Blue>snd3</font> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> a
+<a name="line-151"></a><font color=Blue>thd3</font> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>)</font> <font color=Red>=</font> a
+<a name="line-152"></a>
+<a name="line-153"></a>
+<a name="line-154"></a><font color=Blue>---- Auxiliary Parsing Functions ----</font>
+<a name="line-155"></a>
+<a name="line-156"></a><a name="myBracket"></a><font color=Blue>-- | Parse a bracketed item, discarding the brackets AND NOT using adjustErrBad</font>
+<a name="line-157"></a><font color=Blue>myBracket</font> <font color=Red>::</font> PolyParse p <font color=Red>=&gt;</font> p bra <font color=Red>-&gt;</font> p ket <font color=Red>-&gt;</font> p a <font color=Red>-&gt;</font> p a
+<a name="line-158"></a><font color=Blue>myBracket</font> open close p <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-159"></a>    <font color=Green><u>do</u></font> <font color=Cyan>{</font> open    <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"Missing opening bracket:\n\t"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-160"></a>       <font color=Cyan>;</font> p <font color=Cyan>`discard`</font> <font color=Cyan>(</font>close <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"Missing closing bracket:\n\t"</font><font color=Cyan>++</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-161"></a>       <font color=Cyan>}</font>
+<a name="line-162"></a>
+<a name="line-163"></a><a name="XParser"></a><font color=Blue>-- | XParser is just a specialisation of the PolyState parser.</font>
+<a name="line-164"></a><a name="XParser"></a><font color=Green><u>type</u></font> XParser a <font color=Red>=</font> Parser SymTabs <font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font> a
+<a name="line-165"></a>
+<a name="line-166"></a><a name="tok"></a><font color=Blue>-- | Return the next token from the input only if it matches the given token.</font>
+<a name="line-167"></a><font color=Blue>tok</font> <font color=Red>::</font> TokenT <font color=Red>-&gt;</font> XParser TokenT
+<a name="line-168"></a><font color=Blue>tok</font> t <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t'<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-169"></a>           <font color=Green><u>case</u></font> t' <font color=Green><u>of</u></font> TokError <font color=Green><u>_</u></font>    <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
+<a name="line-170"></a>                      <font color=Green><u>_</u></font> <font color=Red>|</font> t'<font color=Cyan>==</font>t     <font color=Red>-&gt;</font> return t
+<a name="line-171"></a>                        <font color=Red>|</font> otherwise <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
+<a name="line-172"></a><a name="nottok"></a><font color=Blue>nottok</font> <font color=Red>::</font> <font color=Red>[</font>TokenT<font color=Red>]</font> <font color=Red>-&gt;</font> XParser TokenT
+<a name="line-173"></a><font color=Blue>nottok</font> ts <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-174"></a>               <font color=Green><u>if</u></font> t<font color=Cyan>`elem`</font>ts <font color=Green><u>then</u></font> report fail <font color=Cyan>(</font><font color=Magenta>"no "</font><font color=Cyan>++</font>show t<font color=Cyan>)</font> p t
+<a name="line-175"></a>                            <font color=Green><u>else</u></font> return t
+<a name="line-176"></a>
+<a name="line-177"></a><a name="name"></a><font color=Blue>-- | Return just a name, e.g. element name, attribute name.</font>
+<a name="line-178"></a><font color=Blue>name</font> <font color=Red>::</font> XParser Name
+<a name="line-179"></a><font color=Blue>name</font> <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>tok<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-180"></a>          <font color=Green><u>case</u></font> tok <font color=Green><u>of</u></font>
+<a name="line-181"></a>            TokName s  <font color=Red>-&gt;</font> return s
+<a name="line-182"></a>            TokError <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> report failBad <font color=Magenta>"a name"</font> p tok
+<a name="line-183"></a>            <font color=Green><u>_</u></font>          <font color=Red>-&gt;</font> report fail <font color=Magenta>"a name"</font> p tok
+<a name="line-184"></a>
+<a name="line-185"></a><a name="string"></a><font color=Blue>string</font><font color=Cyan>,</font> freetext <font color=Red>::</font> XParser String
+<a name="line-186"></a><font color=Blue>string</font>   <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-187"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokName s <font color=Red>-&gt;</font> return s
+<a name="line-188"></a>                        <font color=Green><u>_</u></font>         <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
+<a name="line-189"></a><a name="freetext"></a><font color=Blue>freetext</font> <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-190"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokFreeText s <font color=Red>-&gt;</font> return s
+<a name="line-191"></a>                        <font color=Green><u>_</u></font>             <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
+<a name="line-192"></a>
+<a name="line-193"></a><a name="maybe"></a><font color=Blue>maybe</font> <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font>
+<a name="line-194"></a><font color=Blue>maybe</font> p <font color=Red>=</font>
+<a name="line-195"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Just<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-196"></a>    <font color=Cyan>(</font> return Nothing<font color=Cyan>)</font>
+<a name="line-197"></a>
+<a name="line-198"></a><a name="either"></a><font color=Blue>either</font> <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser b <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>Either a b<font color=Cyan>)</font>
+<a name="line-199"></a><font color=Blue>either</font> p q <font color=Red>=</font>
+<a name="line-200"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Left<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-201"></a>    <font color=Cyan>(</font> q <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Right<font color=Cyan>)</font>
+<a name="line-202"></a>
+<a name="line-203"></a><a name="word"></a><font color=Blue>word</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> XParser ()
+<a name="line-204"></a><font color=Blue>word</font> s <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x <font color=Red>&lt;-</font> next
+<a name="line-205"></a>            <font color=Cyan>;</font> <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>
+<a name="line-206"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokName n<font color=Cyan>)</font>     <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
+<a name="line-207"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokFreeText n<font color=Cyan>)</font> <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
+<a name="line-208"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Red>@</font><font color=Cyan>(</font>TokError <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
+<a name="line-209"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
+<a name="line-210"></a>            <font color=Cyan>}</font>
+<a name="line-211"></a>
+<a name="line-212"></a><a name="posn"></a><font color=Blue>posn</font> <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x<font color=Red>@</font><font color=Cyan>(</font>p<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-213"></a>          <font color=Cyan>;</font> reparse <font color=Red>[</font>x<font color=Red>]</font>
+<a name="line-214"></a>          <font color=Cyan>;</font> return p
+<a name="line-215"></a>          <font color=Cyan>}</font>
+<a name="line-216"></a>
+<a name="line-217"></a><a name="nmtoken"></a><font color=Blue>nmtoken</font> <font color=Red>::</font> XParser NmToken
+<a name="line-218"></a><font color=Blue>nmtoken</font> <font color=Red>=</font> <font color=Cyan>(</font>string <font color=Cyan>`onFail`</font> freetext<font color=Cyan>)</font>
+<a name="line-219"></a>
+<a name="line-220"></a><a name="failP"></a><font color=Blue>failP</font><font color=Cyan>,</font> failBadP <font color=Red>::</font> String <font color=Red>-&gt;</font> XParser a
+<a name="line-221"></a><font color=Blue>failP</font> msg <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> fail <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="line-222"></a><a name="failBadP"></a><font color=Blue>failBadP</font> msg <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> failBad <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="line-223"></a>
+<a name="line-224"></a><a name="report"></a><font color=Blue>report</font> <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>XParser a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> TokenT <font color=Red>-&gt;</font> XParser a
+<a name="line-225"></a><font color=Blue>report</font> fail exp p t <font color=Red>=</font> fail <font color=Cyan>(</font><font color=Magenta>"Expected "</font><font color=Cyan>++</font>exp<font color=Cyan>++</font><font color=Magenta>" but found "</font><font color=Cyan>++</font>show t
+<a name="line-226"></a>                           <font color=Cyan>++</font><font color=Magenta>"\n  in "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
+<a name="line-227"></a>
+<a name="line-228"></a><a name="adjustErrP"></a><font color=Blue>adjustErrP</font> <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> XParser a
+<a name="line-229"></a><a name="adjustErrP"></a><font color=Blue>p</font> <font color=Cyan>`adjustErrP`</font> f <font color=Red>=</font> p <font color=Cyan>`onFail`</font> <font color=Green><u>do</u></font> pn <font color=Red>&lt;-</font> posn
+<a name="line-230"></a>                                 <font color=Cyan>(</font>p <font color=Cyan>`adjustErr`</font> f<font color=Cyan>)</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font>show pn<font color=Cyan>)</font>
+<a name="line-231"></a>
+<a name="line-232"></a><a name="peRef"></a><font color=Blue>peRef</font> <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser a
+<a name="line-233"></a><font color=Blue>peRef</font> p <font color=Red>=</font>
+<a name="line-234"></a>    p <font color=Cyan>`onFail`</font>
+<a name="line-235"></a>    <font color=Green><u>do</u></font> pn <font color=Red>&lt;-</font> posn
+<a name="line-236"></a>       n <font color=Red>&lt;-</font> pereference
+<a name="line-237"></a>       tr <font color=Red>&lt;-</font> stQuery <font color=Cyan>(</font>lookupPE n<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Looking up %"</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
+<a name="line-238"></a>       <font color=Green><u>case</u></font> tr <font color=Green><u>of</u></font>
+<a name="line-239"></a>           Just <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font> <font color=Red>-&gt;</font>
+<a name="line-240"></a>                      <font color=Green><u>do</u></font> reparse <font color=Cyan>(</font>xmlReLex <font color=Cyan>(</font>posInNewCxt <font color=Cyan>(</font><font color=Magenta>"macro %"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
+<a name="line-241"></a>                                                        <font color=Cyan>(</font>Just pn<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-242"></a>                                           <font color=Cyan>(</font>flattenEV ev<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-243"></a>                               <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"  defn:  "</font><font color=Cyan>++</font>flattenEV ev<font color=Cyan>)</font>
+<a name="line-244"></a>                         peRef p
+<a name="line-245"></a>           Just <font color=Cyan>(</font>PEDefExternalID <font color=Cyan>(</font>PUBLIC <font color=Green><u>_</u></font> <font color=Cyan>(</font>SystemLiteral f<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font>
+<a name="line-246"></a>                      <font color=Green><u>do</u></font> <font color=Green><u>let</u></font> f' <font color=Red>=</font> combine <font color=Cyan>(</font>dropFileName <font color=Cyan>$</font> posnFilename pn<font color=Cyan>)</font> f
+<a name="line-247"></a>                             val <font color=Red>=</font> unsafePerformIO <font color=Cyan>(</font>readFile f'<font color=Cyan>)</font>
+<a name="line-248"></a>                         reparse <font color=Cyan>(</font>xmlReLex <font color=Cyan>(</font>posInNewCxt f'
+<a name="line-249"></a>                                                        <font color=Cyan>(</font>Just pn<font color=Cyan>)</font><font color=Cyan>)</font> val<font color=Cyan>)</font>
+<a name="line-250"></a>                               <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"  reading from file "</font><font color=Cyan>++</font>f'<font color=Cyan>)</font>
+<a name="line-251"></a>                         peRef p
+<a name="line-252"></a>           Just <font color=Cyan>(</font>PEDefExternalID <font color=Cyan>(</font>SYSTEM <font color=Cyan>(</font>SystemLiteral f<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font>
+<a name="line-253"></a>                      <font color=Green><u>do</u></font> <font color=Green><u>let</u></font> f' <font color=Red>=</font> combine <font color=Cyan>(</font>dropFileName <font color=Cyan>$</font> posnFilename pn<font color=Cyan>)</font> f
+<a name="line-254"></a>                             val <font color=Red>=</font> unsafePerformIO <font color=Cyan>(</font>readFile f'<font color=Cyan>)</font>
+<a name="line-255"></a>                         reparse <font color=Cyan>(</font>xmlReLex <font color=Cyan>(</font>posInNewCxt f'
+<a name="line-256"></a>                                                        <font color=Cyan>(</font>Just pn<font color=Cyan>)</font><font color=Cyan>)</font> val<font color=Cyan>)</font>
+<a name="line-257"></a>                               <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"  reading from file "</font><font color=Cyan>++</font>f'<font color=Cyan>)</font>
+<a name="line-258"></a>                         peRef p
+<a name="line-259"></a>           Nothing <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"PEReference use before definition: "</font><font color=Cyan>++</font><font color=Magenta>"%"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font>
+<a name="line-260"></a>                           <font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show pn<font color=Cyan>)</font>
+<a name="line-261"></a>
+<a name="line-262"></a><a name="blank"></a><font color=Blue>blank</font> <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser a
+<a name="line-263"></a><font color=Blue>blank</font> p <font color=Red>=</font>
+<a name="line-264"></a>    p <font color=Cyan>`onFail`</font>
+<a name="line-265"></a>    <font color=Green><u>do</u></font> n <font color=Red>&lt;-</font> pereference
+<a name="line-266"></a>       tr <font color=Red>&lt;-</font> stQuery <font color=Cyan>(</font>lookupPE n<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Looking up %"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>" (is blank?)"</font><font color=Cyan>)</font>
+<a name="line-267"></a>       <font color=Green><u>case</u></font> tr <font color=Green><u>of</u></font>
+<a name="line-268"></a>           Just <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font>
+<a name="line-269"></a>                    <font color=Red>|</font> all isSpace <font color=Cyan>(</font>flattenEV ev<font color=Cyan>)</font>  <font color=Red>-&gt;</font>
+<a name="line-270"></a>                            <font color=Green><u>do</u></font> blank p <font color=Cyan>`debug`</font> <font color=Magenta>"Empty macro definition"</font>
+<a name="line-271"></a>           Just <font color=Green><u>_</u></font>  <font color=Red>-&gt;</font> failP <font color=Cyan>(</font><font color=Magenta>"expected a blank PERef macro: "</font><font color=Cyan>++</font><font color=Magenta>"%"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
+<a name="line-272"></a>           Nothing <font color=Red>-&gt;</font> failP <font color=Cyan>(</font><font color=Magenta>"PEReference use before definition: "</font><font color=Cyan>++</font><font color=Magenta>"%"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
+<a name="line-273"></a>
+<a name="line-274"></a>
+<a name="line-275"></a>
+<a name="line-276"></a><font color=Blue>---- XML Parsing Functions ----</font>
+<a name="line-277"></a>
+<a name="line-278"></a><a name="justDTD"></a><font color=Blue>justDTD</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>Maybe DocTypeDecl<font color=Cyan>)</font>
+<a name="line-279"></a><font color=Blue>justDTD</font> <font color=Red>=</font>
+<a name="line-280"></a>  <font color=Green><u>do</u></font> <font color=Cyan>(</font>ExtSubset <font color=Green><u>_</u></font> ds<font color=Cyan>)</font> <font color=Red>&lt;-</font> extsubset <font color=Cyan>`debug`</font> <font color=Magenta>"Trying external subset"</font>
+<a name="line-281"></a>     <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font> fail <font color=Magenta>"empty"</font>
+<a name="line-282"></a>         <font color=Green><u>else</u></font> return <font color=Cyan>(</font>Just <font color=Cyan>(</font>DTD <font color=Magenta>"extsubset"</font> Nothing <font color=Cyan>(</font>concatMap extract ds<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-283"></a>  <font color=Cyan>`onFail`</font>
+<a name="line-284"></a>  <font color=Green><u>do</u></font> <font color=Cyan>(</font>Prolog <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> dtd <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> prolog
+<a name="line-285"></a>     return dtd
+<a name="line-286"></a> <font color=Green><u>where</u></font> extract <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>m<font color=Red>]</font>
+<a name="line-287"></a>       extract <font color=Cyan>(</font>ExtConditionalSect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> concatMap extract i
+<a name="line-288"></a>       extract <font color=Cyan>(</font>ExtConditionalSect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> []
+<a name="line-289"></a>
+<a name="line-290"></a><a name="document"></a><font color=Blue>-- | Return an entire XML document including prolog and trailing junk.</font>
+<a name="line-291"></a><font color=Blue>document</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>Document Posn<font color=Cyan>)</font>
+<a name="line-292"></a><font color=Blue>document</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-293"></a>    p <font color=Red>&lt;-</font> prolog <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"unrecognisable XML prolog\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-294"></a>    e <font color=Red>&lt;-</font> element
+<a name="line-295"></a>    ms <font color=Red>&lt;-</font> many misc
+<a name="line-296"></a>    <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>ge<font color=Cyan>)</font> <font color=Red>&lt;-</font> stGet
+<a name="line-297"></a>    return <font color=Cyan>(</font>Document p ge e ms<font color=Cyan>)</font>
+<a name="line-298"></a>
+<a name="line-299"></a><a name="comment"></a><font color=Blue>-- | Return an XML comment.</font>
+<a name="line-300"></a><font color=Blue>comment</font> <font color=Red>::</font> XParser Comment
+<a name="line-301"></a><font color=Blue>comment</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-302"></a>    myBracket <font color=Cyan>(</font>tok TokCommentOpen<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokCommentClose<font color=Cyan>)</font> freetext
+<a name="line-303"></a><font color=Blue>--  tok TokCommentOpen</font>
+<a name="line-304"></a><font color=Blue>--  commit $ do</font>
+<a name="line-305"></a><font color=Blue>--    c &lt;- freetext</font>
+<a name="line-306"></a><font color=Blue>--    tok TokCommentClose</font>
+<a name="line-307"></a><font color=Blue>--    return c</font>
+<a name="line-308"></a>
+<a name="line-309"></a><a name="processinginstruction"></a><font color=Blue>-- | Parse a processing instruction.</font>
+<a name="line-310"></a><font color=Blue>processinginstruction</font> <font color=Red>::</font> XParser ProcessingInstruction
+<a name="line-311"></a><font color=Blue>processinginstruction</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-312"></a>    tok TokPIOpen
+<a name="line-313"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-314"></a>      n <font color=Red>&lt;-</font> string  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"processing instruction has no target"</font>
+<a name="line-315"></a>      f <font color=Red>&lt;-</font> freetext
+<a name="line-316"></a>      tok TokPIClose <font color=Cyan>`onFail`</font> failP <font color=Cyan>(</font><font color=Magenta>"missing ?&gt; in &lt;?"</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
+<a name="line-317"></a>      return <font color=Cyan>(</font>n<font color=Cyan>,</font> f<font color=Cyan>)</font>
+<a name="line-318"></a>
+<a name="line-319"></a><a name="cdsect"></a><font color=Blue>cdsect</font> <font color=Red>::</font> XParser CDSect
+<a name="line-320"></a><font color=Blue>cdsect</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-321"></a>    tok TokSectionOpen
+<a name="line-322"></a>    bracket <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection CDATAx<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSectionClose<font color=Cyan>)</font> chardata
+<a name="line-323"></a>
+<a name="line-324"></a><a name="prolog"></a><font color=Blue>prolog</font> <font color=Red>::</font> XParser Prolog
+<a name="line-325"></a><font color=Blue>prolog</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-326"></a>    x   <font color=Red>&lt;-</font> maybe xmldecl
+<a name="line-327"></a>    m1  <font color=Red>&lt;-</font> many misc
+<a name="line-328"></a>    dtd <font color=Red>&lt;-</font> maybe doctypedecl
+<a name="line-329"></a>    m2  <font color=Red>&lt;-</font> many misc
+<a name="line-330"></a>    return <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font>
+<a name="line-331"></a>
+<a name="line-332"></a><a name="xmldecl"></a><font color=Blue>xmldecl</font> <font color=Red>::</font> XParser XMLDecl
+<a name="line-333"></a><font color=Blue>xmldecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-334"></a>    tok TokPIOpen
+<a name="line-335"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
+<a name="line-336"></a>    p <font color=Red>&lt;-</font> posn
+<a name="line-337"></a>    s <font color=Red>&lt;-</font> freetext
+<a name="line-338"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing ?&gt; in &lt;?xml ...?&gt;"</font>
+<a name="line-339"></a>    raise <font color=Cyan>(</font><font color=Cyan>(</font>runParser aux emptySTs <font color=Cyan>.</font> xmlReLex p<font color=Cyan>)</font> s<font color=Cyan>)</font>
+<a name="line-340"></a>  <font color=Green><u>where</u></font>
+<a name="line-341"></a>    aux <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-342"></a>        v <font color=Red>&lt;-</font> versioninfo  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing XML version info"</font>
+<a name="line-343"></a>        e <font color=Red>&lt;-</font> maybe encodingdecl
+<a name="line-344"></a>        s <font color=Red>&lt;-</font> maybe sddecl
+<a name="line-345"></a>        return <font color=Cyan>(</font>XMLDecl v e s<font color=Cyan>)</font>
+<a name="line-346"></a>    raise <font color=Cyan>(</font>Left err<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> failP err
+<a name="line-347"></a>    raise <font color=Cyan>(</font>Right ok<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> return ok
+<a name="line-348"></a>
+<a name="line-349"></a><a name="versioninfo"></a><font color=Blue>versioninfo</font> <font color=Red>::</font> XParser VersionInfo
+<a name="line-350"></a><font color=Blue>versioninfo</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-351"></a>    <font color=Cyan>(</font>word <font color=Magenta>"version"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"VERSION"</font><font color=Cyan>)</font>
+<a name="line-352"></a>    tok TokEqual
+<a name="line-353"></a>    bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-354"></a>
+<a name="line-355"></a><a name="misc"></a><font color=Blue>misc</font> <font color=Red>::</font> XParser Misc
+<a name="line-356"></a><font color=Blue>misc</font> <font color=Red>=</font>
+<a name="line-357"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"&lt;!--comment--&gt;"</font><font color=Cyan>,</font>  comment <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Comment<font color=Cyan>)</font>
+<a name="line-358"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"&lt;?PI?&gt;"</font><font color=Cyan>,</font>          processinginstruction <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PI<font color=Cyan>)</font>
+<a name="line-359"></a>           <font color=Red>]</font>
+<a name="line-360"></a>
+<a name="line-361"></a><a name="doctypedecl"></a><font color=Blue>-- | Return a DOCTYPE decl, indicating a DTD.</font>
+<a name="line-362"></a><font color=Blue>doctypedecl</font> <font color=Red>::</font> XParser DocTypeDecl
+<a name="line-363"></a><font color=Blue>doctypedecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-364"></a>    tok TokSpecialOpen
+<a name="line-365"></a>    tok <font color=Cyan>(</font>TokSpecial DOCTYPEx<font color=Cyan>)</font>
+<a name="line-366"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-367"></a>      n   <font color=Red>&lt;-</font> name
+<a name="line-368"></a>      eid <font color=Red>&lt;-</font> maybe externalid
+<a name="line-369"></a>      es  <font color=Red>&lt;-</font> maybe <font color=Cyan>(</font>bracket <font color=Cyan>(</font>tok TokSqOpen<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSqClose<font color=Cyan>)</font>
+<a name="line-370"></a>                            <font color=Cyan>(</font>many <font color=Cyan>(</font>peRef markupdecl<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-371"></a>      blank <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font>  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing &gt; in DOCTYPE decl"</font>
+<a name="line-372"></a>      return <font color=Cyan>(</font>DTD n eid <font color=Cyan>(</font><font color=Green><u>case</u></font> es <font color=Green><u>of</u></font> <font color=Cyan>{</font> Nothing <font color=Red>-&gt;</font> []<font color=Cyan>;</font> Just e <font color=Red>-&gt;</font> e <font color=Cyan>}</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-373"></a>
+<a name="line-374"></a><a name="markupdecl"></a><font color=Blue>-- | Return a DTD markup decl, e.g. ELEMENT, ATTLIST, etc</font>
+<a name="line-375"></a><font color=Blue>markupdecl</font> <font color=Red>::</font> XParser MarkupDecl
+<a name="line-376"></a><font color=Blue>markupdecl</font> <font color=Red>=</font>
+<a name="line-377"></a>  oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"ELEMENT"</font><font color=Cyan>,</font>  elementdecl  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Element<font color=Cyan>)</font>
+<a name="line-378"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ATTLIST"</font><font color=Cyan>,</font>  attlistdecl  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> AttList<font color=Cyan>)</font>
+<a name="line-379"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ENTITY"</font><font color=Cyan>,</font>   entitydecl   <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Entity<font color=Cyan>)</font>
+<a name="line-380"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"NOTATION"</font><font color=Cyan>,</font> notationdecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Notation<font color=Cyan>)</font>
+<a name="line-381"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"misc"</font><font color=Cyan>,</font>     misc         <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> MarkupMisc<font color=Cyan>)</font>
+<a name="line-382"></a>         <font color=Red>]</font>
+<a name="line-383"></a>    <font color=Cyan>`adjustErrP`</font>
+<a name="line-384"></a>          <font color=Cyan>(</font><font color=Magenta>"when looking for a markup decl,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-385"></a> <font color=Blue>--       (\  (ELEMENT, ATTLIST, ENTITY, NOTATION, &lt;!--comment--&gt;, or &lt;?PI?&gt;")</font>
+<a name="line-386"></a>
+<a name="line-387"></a><a name="extsubset"></a><font color=Blue>extsubset</font> <font color=Red>::</font> XParser ExtSubset
+<a name="line-388"></a><font color=Blue>extsubset</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-389"></a>    td <font color=Red>&lt;-</font> maybe textdecl
+<a name="line-390"></a>    ds <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef extsubsetdecl<font color=Cyan>)</font>
+<a name="line-391"></a>    return <font color=Cyan>(</font>ExtSubset td ds<font color=Cyan>)</font>
+<a name="line-392"></a>
+<a name="line-393"></a><a name="extsubsetdecl"></a><font color=Blue>extsubsetdecl</font> <font color=Red>::</font> XParser ExtSubsetDecl
+<a name="line-394"></a><font color=Blue>extsubsetdecl</font> <font color=Red>=</font>
+<a name="line-395"></a>    <font color=Cyan>(</font> markupdecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> ExtMarkupDecl<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-396"></a>    <font color=Cyan>(</font> conditionalsect <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> ExtConditionalSect<font color=Cyan>)</font>
+<a name="line-397"></a>
+<a name="line-398"></a><a name="sddecl"></a><font color=Blue>sddecl</font> <font color=Red>::</font> XParser SDDecl
+<a name="line-399"></a><font color=Blue>sddecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-400"></a>    <font color=Cyan>(</font>word <font color=Magenta>"standalone"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"STANDALONE"</font><font color=Cyan>)</font>
+<a name="line-401"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-402"></a>      tok TokEqual <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing = in 'standalone' decl"</font>
+<a name="line-403"></a>      bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
+<a name="line-404"></a>              <font color=Cyan>(</font> <font color=Cyan>(</font>word <font color=Magenta>"yes"</font> <font color=Cyan>&gt;&gt;</font> return True<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-405"></a>                <font color=Cyan>(</font>word <font color=Magenta>"no"</font> <font color=Cyan>&gt;&gt;</font> return False<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-406"></a>                failP <font color=Magenta>"'standalone' decl requires 'yes' or 'no' value"</font> <font color=Cyan>)</font>
+<a name="line-407"></a>
+<a name="line-408"></a><font color=Blue>{-
+<a name="line-409"></a>element :: XParser (Element Posn)
+<a name="line-410"></a>element = do
+<a name="line-411"></a>    tok TokAnyOpen
+<a name="line-412"></a>    (ElemTag n as) &lt;- elemtag
+<a name="line-413"></a>    oneOf' [ ("self-closing tag &lt;"++n++"/&gt;"
+<a name="line-414"></a>             ,  do tok TokEndClose
+<a name="line-415"></a>                   return (Elem n as []))
+<a name="line-416"></a>           , ("after open tag &lt;"++n++"&gt;"
+<a name="line-417"></a>             ,  do tok TokAnyClose
+<a name="line-418"></a>                   cs &lt;- many content
+<a name="line-419"></a>                   p  &lt;- posn
+<a name="line-420"></a>                   m  &lt;- bracket (tok TokEndOpen) (tok TokAnyClose) name
+<a name="line-421"></a>                   checkmatch p n m
+<a name="line-422"></a>                   return (Elem n as cs))
+<a name="line-423"></a>           ] `adjustErr` (("in element tag "++n++",\n")++)
+<a name="line-424"></a>-}</font>
+<a name="line-425"></a>
+<a name="line-426"></a><a name="element"></a><font color=Blue>-- | Return a complete element including all its inner content.</font>
+<a name="line-427"></a><font color=Blue>element</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>
+<a name="line-428"></a><font color=Blue>element</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-429"></a>    tok TokAnyOpen
+<a name="line-430"></a>    <font color=Cyan>(</font>ElemTag n <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> elemtag
+<a name="line-431"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokEndClose
+<a name="line-432"></a>         commit <font color=Cyan>(</font>return <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-433"></a>        <font color=Cyan>`onFail`</font>
+<a name="line-434"></a>      <font color=Green><u>do</u></font> tok TokAnyClose
+<a name="line-435"></a>         commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-436"></a>           return <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>`apply`</font>
+<a name="line-437"></a>                 manyFinally content
+<a name="line-438"></a>                             <font color=Cyan>(</font><font color=Green><u>do</u></font> p <font color=Red>&lt;-</font> posn
+<a name="line-439"></a>                                 m <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokEndOpen<font color=Cyan>)</font>
+<a name="line-440"></a>                                              <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font> name
+<a name="line-441"></a>                                 checkmatch p n m<font color=Cyan>)</font>
+<a name="line-442"></a>      <font color=Cyan>)</font> <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in element tag "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-443"></a>
+<a name="line-444"></a><a name="checkmatch"></a><font color=Blue>checkmatch</font> <font color=Red>::</font> Posn <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> XParser ()
+<a name="line-445"></a><font color=Blue>checkmatch</font> p n m <font color=Red>=</font>
+<a name="line-446"></a>  <font color=Green><u>if</u></font> n <font color=Cyan>==</font> m <font color=Green><u>then</u></font> return ()
+<a name="line-447"></a>  <font color=Green><u>else</u></font> failBadP <font color=Cyan>(</font><font color=Magenta>"tag &lt;"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>"&gt; terminated by &lt;/"</font><font color=Cyan>++</font>m<font color=Cyan>++</font><font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="line-448"></a>
+<a name="line-449"></a><a name="elemtag"></a><font color=Blue>-- | Parse only the parts between angle brackets in an element tag.</font>
+<a name="line-450"></a><font color=Blue>elemtag</font> <font color=Red>::</font> XParser ElemTag
+<a name="line-451"></a><font color=Blue>elemtag</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-452"></a>    n  <font color=Red>&lt;-</font> name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"malformed element tag\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-453"></a>    <font color=Green><u>as</u></font> <font color=Red>&lt;-</font> many attribute
+<a name="line-454"></a>    return <font color=Cyan>(</font>ElemTag n <font color=Green><u>as</u></font><font color=Cyan>)</font>
+<a name="line-455"></a>
+<a name="line-456"></a><a name="elemOpenTag"></a><font color=Blue>-- | For use with stream parsers - returns the complete opening element tag.</font>
+<a name="line-457"></a><font color=Blue>elemOpenTag</font> <font color=Red>::</font> XParser ElemTag
+<a name="line-458"></a><font color=Blue>elemOpenTag</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-459"></a>    tok TokAnyOpen
+<a name="line-460"></a>    e <font color=Red>&lt;-</font> elemtag
+<a name="line-461"></a>    tok TokAnyClose
+<a name="line-462"></a>    return e
+<a name="line-463"></a>
+<a name="line-464"></a><a name="elemCloseTag"></a><font color=Blue>-- | For use with stream parsers - accepts a closing tag, provided it</font>
+<a name="line-465"></a><font color=Blue>--   matches the given element name.</font>
+<a name="line-466"></a><font color=Blue>elemCloseTag</font> <font color=Red>::</font> Name <font color=Red>-&gt;</font> XParser ()
+<a name="line-467"></a><font color=Blue>elemCloseTag</font> n <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-468"></a>    tok TokEndOpen
+<a name="line-469"></a>    p <font color=Red>&lt;-</font> posn
+<a name="line-470"></a>    m <font color=Red>&lt;-</font> name
+<a name="line-471"></a>    tok TokAnyClose
+<a name="line-472"></a>    checkmatch p n m
+<a name="line-473"></a>
+<a name="line-474"></a><a name="attribute"></a><font color=Blue>attribute</font> <font color=Red>::</font> XParser Attribute
+<a name="line-475"></a><font color=Blue>attribute</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-476"></a>    n <font color=Red>&lt;-</font> name <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"malformed attribute name\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-477"></a>    tok TokEqual <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing = in attribute"</font>
+<a name="line-478"></a>    v <font color=Red>&lt;-</font> attvalue <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing attvalue"</font>
+<a name="line-479"></a>    return <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>
+<a name="line-480"></a>
+<a name="line-481"></a><a name="content"></a><font color=Blue>-- | Return a content particle, e.g. text, element, reference, etc</font>
+<a name="line-482"></a><font color=Blue>content</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font>
+<a name="line-483"></a><font color=Blue>content</font> <font color=Red>=</font>
+<a name="line-484"></a>  <font color=Green><u>do</u></font> <font color=Cyan>{</font> p  <font color=Red>&lt;-</font> posn
+<a name="line-485"></a>     <font color=Cyan>;</font> c' <font color=Red>&lt;-</font> content'
+<a name="line-486"></a>     <font color=Cyan>;</font> return <font color=Cyan>(</font>c' p<font color=Cyan>)</font>
+<a name="line-487"></a>     <font color=Cyan>}</font>
+<a name="line-488"></a>  <font color=Green><u>where</u></font>
+<a name="line-489"></a>     content' <font color=Red>=</font> oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"element"</font><font color=Cyan>,</font>   element   <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CElem<font color=Cyan>)</font>
+<a name="line-490"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"chardata"</font><font color=Cyan>,</font>  chardata  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CString False<font color=Cyan>)</font>
+<a name="line-491"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"reference"</font><font color=Cyan>,</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CRef<font color=Cyan>)</font>
+<a name="line-492"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"CDATA"</font><font color=Cyan>,</font>     cdsect    <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CString True<font color=Cyan>)</font>
+<a name="line-493"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"misc"</font><font color=Cyan>,</font>      misc      <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CMisc<font color=Cyan>)</font>
+<a name="line-494"></a>                       <font color=Red>]</font>
+<a name="line-495"></a>                  <font color=Cyan>`adjustErrP`</font> <font color=Cyan>(</font><font color=Magenta>"when looking for a content item,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-496"></a><font color=Blue>-- (\    (element, text, reference, CDATA section, &lt;!--comment--&gt;, or &lt;?PI?&gt;")</font>
+<a name="line-497"></a>
+<a name="line-498"></a><a name="elementdecl"></a><font color=Blue>elementdecl</font> <font color=Red>::</font> XParser ElementDecl
+<a name="line-499"></a><font color=Blue>elementdecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-500"></a>    tok TokSpecialOpen
+<a name="line-501"></a>    tok <font color=Cyan>(</font>TokSpecial ELEMENTx<font color=Cyan>)</font>
+<a name="line-502"></a>    n <font color=Red>&lt;-</font> peRef name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"expecting identifier in ELEMENT decl\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-503"></a>    c <font color=Red>&lt;-</font> peRef contentspec
+<a name="line-504"></a>             <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in content spec of ELEMENT decl: "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-505"></a>    blank <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failBadP
+<a name="line-506"></a>       <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating ELEMENT decl"</font>
+<a name="line-507"></a>       <font color=Cyan>++</font><font color=Magenta>"\n    element name was "</font><font color=Cyan>++</font>show n
+<a name="line-508"></a>       <font color=Cyan>++</font><font color=Magenta>"\n    contentspec was "</font><font color=Cyan>++</font><font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>ContentSpec p<font color=Cyan>)</font><font color=Red>-&gt;</font> show p<font color=Cyan>)</font> c<font color=Cyan>)</font>
+<a name="line-509"></a>    return <font color=Cyan>(</font>ElementDecl n c<font color=Cyan>)</font>
+<a name="line-510"></a>
+<a name="line-511"></a><a name="contentspec"></a><font color=Blue>contentspec</font> <font color=Red>::</font> XParser ContentSpec
+<a name="line-512"></a><font color=Blue>contentspec</font> <font color=Red>=</font>
+<a name="line-513"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"EMPTY"</font><font color=Cyan>,</font>  peRef <font color=Cyan>(</font>word <font color=Magenta>"EMPTY"</font><font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return EMPTY<font color=Cyan>)</font>
+<a name="line-514"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ANY"</font><font color=Cyan>,</font>    peRef <font color=Cyan>(</font>word <font color=Magenta>"ANY"</font><font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return ANY<font color=Cyan>)</font>
+<a name="line-515"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"mixed"</font><font color=Cyan>,</font>  peRef mixed <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Mixed<font color=Cyan>)</font>
+<a name="line-516"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"simple"</font><font color=Cyan>,</font> peRef cp <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> ContentSpec<font color=Cyan>)</font>
+<a name="line-517"></a>           <font color=Red>]</font>
+<a name="line-518"></a> <font color=Blue>--   `adjustErr` ("when looking for content spec,\n"++)</font>
+<a name="line-519"></a> <font color=Blue>--   `adjustErr` (++"\nLooking for content spec (EMPTY, ANY, mixed, etc)")</font>
+<a name="line-520"></a>
+<a name="line-521"></a><a name="choice"></a><font color=Blue>choice</font> <font color=Red>::</font> XParser <font color=Red>[</font>CP<font color=Red>]</font>
+<a name="line-522"></a><font color=Blue>choice</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-523"></a>    myBracket <font color=Cyan>(</font>tok TokBraOpen <font color=Cyan>`debug`</font> <font color=Magenta>"Trying choice"</font><font color=Cyan>)</font>
+<a name="line-524"></a>              <font color=Cyan>(</font>blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>`debug`</font> <font color=Magenta>"Succeeded with choice"</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-525"></a>              <font color=Cyan>(</font>peRef cp <font color=Cyan>`sepBy1`</font> blank <font color=Cyan>(</font>tok TokPipe<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-526"></a>
+<a name="line-527"></a><a name="sequence"></a><font color=Blue>sequence</font> <font color=Red>::</font> XParser <font color=Red>[</font>CP<font color=Red>]</font>
+<a name="line-528"></a><font color=Blue>sequence</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-529"></a> myBracket <font color=Cyan>(</font>tok TokBraOpen <font color=Cyan>`debug`</font> <font color=Magenta>"Trying sequence"</font><font color=Cyan>)</font>
+<a name="line-530"></a>           <font color=Cyan>(</font>blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>`debug`</font> <font color=Magenta>"Succeeded with sequence"</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-531"></a>           <font color=Cyan>(</font>peRef cp <font color=Cyan>`sepBy1`</font> blank <font color=Cyan>(</font>tok TokComma<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-532"></a>
+<a name="line-533"></a><a name="cp"></a><font color=Blue>cp</font> <font color=Red>::</font> XParser CP
+<a name="line-534"></a><font color=Blue>cp</font> <font color=Red>=</font> oneOf <font color=Red>[</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> n <font color=Red>&lt;-</font> name
+<a name="line-535"></a>                  m <font color=Red>&lt;-</font> modifier
+<a name="line-536"></a>                  <font color=Green><u>let</u></font> c <font color=Red>=</font> TagName n m
+<a name="line-537"></a>                  return c <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ContentSpec: name "</font><font color=Cyan>++</font>show c<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-538"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> ss <font color=Red>&lt;-</font> sequence
+<a name="line-539"></a>                  m <font color=Red>&lt;-</font> modifier
+<a name="line-540"></a>                  <font color=Green><u>let</u></font> c <font color=Red>=</font> Seq ss m
+<a name="line-541"></a>                  return c <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ContentSpec: sequence "</font><font color=Cyan>++</font>show c<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-542"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> cs <font color=Red>&lt;-</font> choice
+<a name="line-543"></a>                  m <font color=Red>&lt;-</font> modifier
+<a name="line-544"></a>                  <font color=Green><u>let</u></font> c <font color=Red>=</font> Choice cs m
+<a name="line-545"></a>                  return c <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ContentSpec: choice "</font><font color=Cyan>++</font>show c<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-546"></a>           <font color=Red>]</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Magenta>"\nwhen looking for a content particle"</font><font color=Cyan>)</font>
+<a name="line-547"></a>
+<a name="line-548"></a><a name="modifier"></a><font color=Blue>modifier</font> <font color=Red>::</font> XParser Modifier
+<a name="line-549"></a><font color=Blue>modifier</font> <font color=Red>=</font> oneOf <font color=Red>[</font> <font color=Cyan>(</font> tok TokStar <font color=Cyan>&gt;&gt;</font> return Star <font color=Cyan>)</font>
+<a name="line-550"></a>                 <font color=Cyan>,</font> <font color=Cyan>(</font> tok TokQuery <font color=Cyan>&gt;&gt;</font> return Query <font color=Cyan>)</font>
+<a name="line-551"></a>                 <font color=Cyan>,</font> <font color=Cyan>(</font> tok TokPlus <font color=Cyan>&gt;&gt;</font> return Plus <font color=Cyan>)</font>
+<a name="line-552"></a>                 <font color=Cyan>,</font> <font color=Cyan>(</font> return None <font color=Cyan>)</font>
+<a name="line-553"></a>                 <font color=Red>]</font>
+<a name="line-554"></a>
+<a name="line-555"></a><font color=Blue>-- just for debugging</font>
+<a name="line-556"></a><font color=Green><u>instance</u></font> Show CP <font color=Green><u>where</u></font>
+<a name="line-557"></a>    show <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font> <font color=Red>=</font> n<font color=Cyan>++</font>show m
+<a name="line-558"></a>    show <font color=Cyan>(</font>Choice cps m<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'('</font><font color=Red><b>:</b></font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>"|"</font> <font color=Cyan>(</font>map show cps<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-559"></a>                          <font color=Cyan>++</font><font color=Magenta>")"</font><font color=Cyan>++</font>show m
+<a name="line-560"></a>    show <font color=Cyan>(</font>Seq cps m<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'('</font><font color=Red><b>:</b></font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> <font color=Cyan>(</font>map show cps<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-561"></a>                          <font color=Cyan>++</font><font color=Magenta>")"</font><font color=Cyan>++</font>show m
+<a name="line-562"></a><font color=Green><u>instance</u></font> Show Modifier <font color=Green><u>where</u></font>
+<a name="line-563"></a>    show None <font color=Red>=</font> <font color=Magenta>""</font>
+<a name="line-564"></a>    show Query <font color=Red>=</font> <font color=Magenta>"?"</font>
+<a name="line-565"></a>    show Star <font color=Red>=</font> <font color=Magenta>"*"</font>
+<a name="line-566"></a>    show Plus <font color=Red>=</font> <font color=Magenta>"+"</font>
+<a name="line-567"></a><font color=Blue>----</font>
+<a name="line-568"></a>
+<a name="line-569"></a><a name="mixed"></a><font color=Blue>mixed</font> <font color=Red>::</font> XParser Mixed
+<a name="line-570"></a><font color=Blue>mixed</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-571"></a>    tok TokBraOpen
+<a name="line-572"></a>    peRef <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokHash
+<a name="line-573"></a>              word <font color=Magenta>"PCDATA"</font><font color=Cyan>)</font>
+<a name="line-574"></a>    commit <font color=Cyan>$</font>
+<a name="line-575"></a>      oneOf <font color=Red>[</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> cs <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokPipe
+<a name="line-576"></a>                                         peRef name<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-577"></a>                   blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>&gt;&gt;</font> tok TokStar<font color=Cyan>)</font>
+<a name="line-578"></a>                   return <font color=Cyan>(</font>PCDATAplus cs<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-579"></a>            <font color=Cyan>,</font> <font color=Cyan>(</font> blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>&gt;&gt;</font> tok TokStar<font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return PCDATA<font color=Cyan>)</font>
+<a name="line-580"></a>            <font color=Cyan>,</font> <font color=Cyan>(</font> blank <font color=Cyan>(</font>tok TokBraClose<font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return PCDATA<font color=Cyan>)</font>
+<a name="line-581"></a>            <font color=Red>]</font>
+<a name="line-582"></a>        <font color=Cyan>`adjustErrP`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Magenta>"\nLooking for mixed content spec (#PCDATA | ...)*\n"</font><font color=Cyan>)</font>
+<a name="line-583"></a>
+<a name="line-584"></a><a name="attlistdecl"></a><font color=Blue>attlistdecl</font> <font color=Red>::</font> XParser AttListDecl
+<a name="line-585"></a><font color=Blue>attlistdecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-586"></a>    tok TokSpecialOpen
+<a name="line-587"></a>    tok <font color=Cyan>(</font>TokSpecial ATTLISTx<font color=Cyan>)</font>
+<a name="line-588"></a>    n <font color=Red>&lt;-</font> peRef name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"expecting identifier in ATTLIST\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-589"></a>    ds <font color=Red>&lt;-</font> peRef <font color=Cyan>(</font>many1 <font color=Cyan>(</font>peRef attdef<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-590"></a>    blank <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing &gt; terminating ATTLIST"</font>
+<a name="line-591"></a>    return <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font>
+<a name="line-592"></a>
+<a name="line-593"></a><a name="attdef"></a><font color=Blue>attdef</font> <font color=Red>::</font> XParser AttDef
+<a name="line-594"></a><font color=Blue>attdef</font> <font color=Red>=</font>
+<a name="line-595"></a>  <font color=Green><u>do</u></font> n <font color=Red>&lt;-</font> peRef name <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"expecting attribute name\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-596"></a>     t <font color=Red>&lt;-</font> peRef atttype <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"within attlist defn: "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-597"></a>     d <font color=Red>&lt;-</font> peRef defaultdecl <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in attlist defn: "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-598"></a>     return <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>
+<a name="line-599"></a>
+<a name="line-600"></a><a name="atttype"></a><font color=Blue>atttype</font> <font color=Red>::</font> XParser AttType
+<a name="line-601"></a><font color=Blue>atttype</font> <font color=Red>=</font>
+<a name="line-602"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"CDATA"</font><font color=Cyan>,</font>      word <font color=Magenta>"CDATA"</font> <font color=Cyan>&gt;&gt;</font> return StringType<font color=Cyan>)</font>
+<a name="line-603"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tokenized"</font><font color=Cyan>,</font>  tokenizedtype <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> TokenizedType<font color=Cyan>)</font>
+<a name="line-604"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"enumerated"</font><font color=Cyan>,</font> enumeratedtype <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EnumeratedType<font color=Cyan>)</font>
+<a name="line-605"></a>           <font color=Red>]</font>
+<a name="line-606"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for ATTTYPE,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-607"></a> <font color=Blue>--   `adjustErr` (++"\nLooking for ATTTYPE (CDATA, tokenized, or enumerated")</font>
+<a name="line-608"></a>
+<a name="line-609"></a><a name="tokenizedtype"></a><font color=Blue>tokenizedtype</font> <font color=Red>::</font> XParser TokenizedType
+<a name="line-610"></a><font color=Blue>tokenizedtype</font> <font color=Red>=</font>
+<a name="line-611"></a>    oneOf <font color=Red>[</font> <font color=Cyan>(</font> word <font color=Magenta>"ID"</font> <font color=Cyan>&gt;&gt;</font> return ID<font color=Cyan>)</font>
+<a name="line-612"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"IDREF"</font> <font color=Cyan>&gt;&gt;</font> return IDREF<font color=Cyan>)</font>
+<a name="line-613"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"IDREFS"</font> <font color=Cyan>&gt;&gt;</font> return IDREFS<font color=Cyan>)</font>
+<a name="line-614"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"ENTITY"</font> <font color=Cyan>&gt;&gt;</font> return ENTITY<font color=Cyan>)</font>
+<a name="line-615"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"ENTITIES"</font> <font color=Cyan>&gt;&gt;</font> return ENTITIES<font color=Cyan>)</font>
+<a name="line-616"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"NMTOKEN"</font> <font color=Cyan>&gt;&gt;</font> return NMTOKEN<font color=Cyan>)</font>
+<a name="line-617"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"NMTOKENS"</font> <font color=Cyan>&gt;&gt;</font> return NMTOKENS<font color=Cyan>)</font>
+<a name="line-618"></a>          <font color=Red>]</font> <font color=Cyan>`onFail`</font>
+<a name="line-619"></a>    <font color=Green><u>do</u></font> <font color=Cyan>{</font> t <font color=Red>&lt;-</font> next
+<a name="line-620"></a>       <font color=Cyan>;</font> failP <font color=Cyan>(</font><font color=Magenta>"Expected one of"</font>
+<a name="line-621"></a>               <font color=Cyan>++</font><font color=Magenta>" (ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, NMTOKENS)"</font>
+<a name="line-622"></a>               <font color=Cyan>++</font><font color=Magenta>"\nbut got "</font><font color=Cyan>++</font>show t<font color=Cyan>)</font>
+<a name="line-623"></a>       <font color=Cyan>}</font>
+<a name="line-624"></a><font color=Blue>-- `adjustErr` (++"\nLooking for a tokenized type:\n\ </font>
+<a name="line-625"></a><font color=Blue>-- \    (ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, NMTOKENS)")</font>
+<a name="line-626"></a>
+<a name="line-627"></a><a name="enumeratedtype"></a><font color=Blue>enumeratedtype</font> <font color=Red>::</font> XParser EnumeratedType
+<a name="line-628"></a><font color=Blue>enumeratedtype</font> <font color=Red>=</font>
+<a name="line-629"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"NOTATION"</font><font color=Cyan>,</font>   notationtype <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> NotationType<font color=Cyan>)</font>
+<a name="line-630"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"enumerated"</font><font color=Cyan>,</font> enumeration <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Enumeration<font color=Cyan>)</font>
+<a name="line-631"></a>           <font color=Red>]</font>
+<a name="line-632"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for an enumerated or NOTATION type,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-633"></a>
+<a name="line-634"></a><a name="notationtype"></a><font color=Blue>notationtype</font> <font color=Red>::</font> XParser NotationType
+<a name="line-635"></a><font color=Blue>notationtype</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-636"></a>    word <font color=Magenta>"NOTATION"</font>
+<a name="line-637"></a>    bracket <font color=Cyan>(</font>tok TokBraOpen<font color=Cyan>)</font> <font color=Cyan>(</font>blank <font color=Cyan>(</font>tok TokBraClose<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-638"></a>            <font color=Cyan>(</font>peRef name <font color=Cyan>`sepBy1`</font> peRef <font color=Cyan>(</font>tok TokPipe<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-639"></a>
+<a name="line-640"></a><a name="enumeration"></a><font color=Blue>enumeration</font> <font color=Red>::</font> XParser Enumeration
+<a name="line-641"></a><font color=Blue>enumeration</font> <font color=Red>=</font>
+<a name="line-642"></a>    bracket <font color=Cyan>(</font>tok TokBraOpen<font color=Cyan>)</font> <font color=Cyan>(</font>blank <font color=Cyan>(</font>tok TokBraClose<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-643"></a>            <font color=Cyan>(</font>peRef nmtoken <font color=Cyan>`sepBy1`</font> blank <font color=Cyan>(</font>peRef <font color=Cyan>(</font>tok TokPipe<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-644"></a>
+<a name="line-645"></a><a name="defaultdecl"></a><font color=Blue>defaultdecl</font> <font color=Red>::</font> XParser DefaultDecl
+<a name="line-646"></a><font color=Blue>defaultdecl</font> <font color=Red>=</font>
+<a name="line-647"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"REQUIRED"</font><font color=Cyan>,</font>  tok TokHash <font color=Cyan>&gt;&gt;</font> word <font color=Magenta>"REQUIRED"</font> <font color=Cyan>&gt;&gt;</font> return REQUIRED<font color=Cyan>)</font>
+<a name="line-648"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"IMPLIED"</font><font color=Cyan>,</font>   tok TokHash <font color=Cyan>&gt;&gt;</font> word <font color=Magenta>"IMPLIED"</font> <font color=Cyan>&gt;&gt;</font> return IMPLIED<font color=Cyan>)</font>
+<a name="line-649"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"FIXED"</font><font color=Cyan>,</font>     <font color=Green><u>do</u></font> f <font color=Red>&lt;-</font> maybe <font color=Cyan>(</font>tok TokHash <font color=Cyan>&gt;&gt;</font> word <font color=Magenta>"FIXED"</font>
+<a name="line-650"></a>                                                      <font color=Cyan>&gt;&gt;</font> return FIXED<font color=Cyan>)</font>
+<a name="line-651"></a>                              a <font color=Red>&lt;-</font> peRef attvalue
+<a name="line-652"></a>                              return <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font> <font color=Cyan>)</font>
+<a name="line-653"></a>           <font color=Red>]</font>
+<a name="line-654"></a>        <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for an attribute default decl,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-655"></a><font color=Blue>--      `adjustErr` (++"\nLooking for an attribute default decl:\n\ </font>
+<a name="line-656"></a><font color=Blue>-- \    (REQUIRED, IMPLIED, FIXED)")</font>
+<a name="line-657"></a>
+<a name="line-658"></a><a name="conditionalsect"></a><font color=Blue>conditionalsect</font> <font color=Red>::</font> XParser ConditionalSect
+<a name="line-659"></a><font color=Blue>conditionalsect</font> <font color=Red>=</font> oneOf'
+<a name="line-660"></a>    <font color=Red>[</font> <font color=Cyan>(</font> <font color=Magenta>"INCLUDE"</font>
+<a name="line-661"></a>      <font color=Cyan>,</font> <font color=Green><u>do</u></font> tok TokSectionOpen
+<a name="line-662"></a>           peRef <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection INCLUDEx<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-663"></a>           p <font color=Red>&lt;-</font> posn
+<a name="line-664"></a>           tok TokSqOpen <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing [ after INCLUDE"</font>
+<a name="line-665"></a>           i <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef extsubsetdecl<font color=Cyan>)</font>
+<a name="line-666"></a>           tok TokSectionClose
+<a name="line-667"></a>                   <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"missing ]]&gt; for INCLUDE section"</font>
+<a name="line-668"></a>                                     <font color=Cyan>++</font><font color=Magenta>"\n    begun at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
+<a name="line-669"></a>           return <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-670"></a>    <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"IGNORE"</font>
+<a name="line-671"></a>      <font color=Cyan>,</font> <font color=Green><u>do</u></font> tok TokSectionOpen
+<a name="line-672"></a>           peRef <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection IGNOREx<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-673"></a>           p <font color=Red>&lt;-</font> posn
+<a name="line-674"></a>           tok TokSqOpen <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing [ after IGNORE"</font>
+<a name="line-675"></a>           i <font color=Red>&lt;-</font> many newIgnore  <font color=Blue>-- many ignoresectcontents</font>
+<a name="line-676"></a>           tok TokSectionClose
+<a name="line-677"></a>                   <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"missing ]]&gt; for IGNORE section"</font>
+<a name="line-678"></a>                                     <font color=Cyan>++</font><font color=Magenta>"\n    begun at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
+<a name="line-679"></a>           return <font color=Cyan>(</font>IgnoreSect []<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-680"></a>    <font color=Red>]</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"in a conditional section,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-681"></a>
+<a name="line-682"></a><a name="newIgnore"></a><font color=Blue>newIgnore</font> <font color=Red>::</font> XParser Ignore
+<a name="line-683"></a><font color=Blue>newIgnore</font> <font color=Red>=</font>
+<a name="line-684"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokSectionOpen
+<a name="line-685"></a>         many newIgnore <font color=Cyan>`debug`</font> <font color=Magenta>"IGNORING conditional section"</font>
+<a name="line-686"></a>         tok TokSectionClose
+<a name="line-687"></a>         return Ignore <font color=Cyan>`debug`</font> <font color=Magenta>"end of IGNORED conditional section"</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-688"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> t <font color=Red>&lt;-</font> nottok <font color=Red>[</font>TokSectionOpen<font color=Cyan>,</font>TokSectionClose<font color=Red>]</font>
+<a name="line-689"></a>         return Ignore  <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ignoring: "</font><font color=Cyan>++</font>show t<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-690"></a>
+<a name="line-691"></a><a name="ignoresectcontents"></a><font color=Blue>--- obsolete?</font>
+<a name="line-692"></a><font color=Blue>ignoresectcontents</font> <font color=Red>::</font> XParser IgnoreSectContents
+<a name="line-693"></a><font color=Blue>ignoresectcontents</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-694"></a>    i <font color=Red>&lt;-</font> ignore
+<a name="line-695"></a>    is <font color=Red>&lt;-</font> many <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokSectionOpen
+<a name="line-696"></a>                   ic <font color=Red>&lt;-</font> ignoresectcontents
+<a name="line-697"></a>                   tok TokSectionClose
+<a name="line-698"></a>                   ig <font color=Red>&lt;-</font> ignore
+<a name="line-699"></a>                   return <font color=Cyan>(</font>ic<font color=Cyan>,</font>ig<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-700"></a>    return <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>
+<a name="line-701"></a>
+<a name="line-702"></a><a name="ignore"></a><font color=Blue>ignore</font> <font color=Red>::</font> XParser Ignore
+<a name="line-703"></a><font color=Blue>ignore</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-704"></a>  is <font color=Red>&lt;-</font> many1 <font color=Cyan>(</font>nottok <font color=Red>[</font>TokSectionOpen<font color=Cyan>,</font>TokSectionClose<font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-705"></a>  return Ignore  <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ignored all of: "</font><font color=Cyan>++</font>show is<font color=Cyan>)</font>
+<a name="line-706"></a><font color=Blue>----</font>
+<a name="line-707"></a>
+<a name="line-708"></a><a name="reference"></a><font color=Blue>-- | Return either a general entity reference, or a character reference.</font>
+<a name="line-709"></a><font color=Blue>reference</font> <font color=Red>::</font> XParser Reference
+<a name="line-710"></a><font color=Blue>reference</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-711"></a>    myBracket <font color=Cyan>(</font>tok TokAmp<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSemi<font color=Cyan>)</font> <font color=Cyan>(</font>freetext <font color=Cyan>&gt;&gt;=</font> val<font color=Cyan>)</font>
+<a name="line-712"></a>  <font color=Green><u>where</u></font>
+<a name="line-713"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font><font color=Magenta>'x'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font> <font color=Red>|</font> all isHexDigit i
+<a name="line-714"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readHex <font color=Cyan>$</font> i
+<a name="line-715"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font>     <font color=Red>|</font> all isDigit i
+<a name="line-716"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readDec <font color=Cyan>$</font> i
+<a name="line-717"></a>    val name        <font color=Red>=</font> return <font color=Cyan>.</font> RefEntity <font color=Cyan>$</font> name
+<a name="line-718"></a>
+<a name="line-719"></a><font color=Blue>{- -- following is incorrect
+<a name="line-720"></a>reference =
+<a name="line-721"></a>    ( charref &gt;&gt;= return . RefChar) `onFail`
+<a name="line-722"></a>    ( entityref &gt;&gt;= return . RefEntity)
+<a name="line-723"></a>
+<a name="line-724"></a>entityref :: XParser EntityRef
+<a name="line-725"></a>entityref = do
+<a name="line-726"></a>    bracket (tok TokAmp) (tok TokSemi) name
+<a name="line-727"></a>
+<a name="line-728"></a>charref :: XParser CharRef
+<a name="line-729"></a>charref = do
+<a name="line-730"></a>    bracket (tok TokAmp) (tok TokSemi) (freetext &gt;&gt;= readCharVal)
+<a name="line-731"></a>  where
+<a name="line-732"></a>    readCharVal ('#':'x':i) = return . fst . head . readHex $ i
+<a name="line-733"></a>    readCharVal ('#':i)     = return . fst . head . readDec $ i
+<a name="line-734"></a>    readCharVal _           = mzero
+<a name="line-735"></a>-}</font>
+<a name="line-736"></a>
+<a name="line-737"></a><a name="pereference"></a><font color=Blue>pereference</font> <font color=Red>::</font> XParser PEReference
+<a name="line-738"></a><font color=Blue>pereference</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-739"></a>    myBracket <font color=Cyan>(</font>tok TokPercent<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSemi<font color=Cyan>)</font> nmtoken
+<a name="line-740"></a>
+<a name="line-741"></a><a name="entitydecl"></a><font color=Blue>entitydecl</font> <font color=Red>::</font> XParser EntityDecl
+<a name="line-742"></a><font color=Blue>entitydecl</font> <font color=Red>=</font>
+<a name="line-743"></a>    <font color=Cyan>(</font> gedecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EntityGEDecl<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-744"></a>    <font color=Cyan>(</font> pedecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EntityPEDecl<font color=Cyan>)</font>
+<a name="line-745"></a>
+<a name="line-746"></a><a name="gedecl"></a><font color=Blue>gedecl</font> <font color=Red>::</font> XParser GEDecl
+<a name="line-747"></a><font color=Blue>gedecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-748"></a>    tok TokSpecialOpen
+<a name="line-749"></a>    tok <font color=Cyan>(</font>TokSpecial ENTITYx<font color=Cyan>)</font>
+<a name="line-750"></a>    n <font color=Red>&lt;-</font> name
+<a name="line-751"></a>    e <font color=Red>&lt;-</font> entitydef <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in general entity defn "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-752"></a>    tok TokAnyClose <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating G ENTITY decl "</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
+<a name="line-753"></a>    stUpdate <font color=Cyan>(</font>addGE n e<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"added GE defn &amp;"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
+<a name="line-754"></a>    return <font color=Cyan>(</font>GEDecl n e<font color=Cyan>)</font>
+<a name="line-755"></a>
+<a name="line-756"></a><a name="pedecl"></a><font color=Blue>pedecl</font> <font color=Red>::</font> XParser PEDecl
+<a name="line-757"></a><font color=Blue>pedecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-758"></a>    tok TokSpecialOpen
+<a name="line-759"></a>    tok <font color=Cyan>(</font>TokSpecial ENTITYx<font color=Cyan>)</font>
+<a name="line-760"></a>    tok TokPercent
+<a name="line-761"></a>    n <font color=Red>&lt;-</font> name
+<a name="line-762"></a>    e <font color=Red>&lt;-</font> pedef <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in parameter entity defn "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-763"></a>    tok TokAnyClose <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating P ENTITY decl "</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
+<a name="line-764"></a>    stUpdate <font color=Cyan>(</font>addPE n e<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"added PE defn %"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";\n"</font><font color=Cyan>++</font>show e<font color=Cyan>)</font>
+<a name="line-765"></a>    return <font color=Cyan>(</font>PEDecl n e<font color=Cyan>)</font>
+<a name="line-766"></a>
+<a name="line-767"></a><a name="entitydef"></a><font color=Blue>entitydef</font> <font color=Red>::</font> XParser EntityDef
+<a name="line-768"></a><font color=Blue>entitydef</font> <font color=Red>=</font>
+<a name="line-769"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"entityvalue"</font><font color=Cyan>,</font> entityvalue <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> DefEntityValue<font color=Cyan>)</font>
+<a name="line-770"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"external"</font><font color=Cyan>,</font>    <font color=Green><u>do</u></font> eid <font color=Red>&lt;-</font> externalid
+<a name="line-771"></a>                                ndd <font color=Red>&lt;-</font> maybe ndatadecl
+<a name="line-772"></a>                                return <font color=Cyan>(</font>DefExternalID eid ndd<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-773"></a>           <font color=Red>]</font>
+<a name="line-774"></a>
+<a name="line-775"></a><a name="pedef"></a><font color=Blue>pedef</font> <font color=Red>::</font> XParser PEDef
+<a name="line-776"></a><font color=Blue>pedef</font> <font color=Red>=</font>
+<a name="line-777"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"entityvalue"</font><font color=Cyan>,</font> entityvalue <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PEDefEntityValue<font color=Cyan>)</font>
+<a name="line-778"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"externalid"</font><font color=Cyan>,</font>  externalid  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PEDefExternalID<font color=Cyan>)</font>
+<a name="line-779"></a>           <font color=Red>]</font>
+<a name="line-780"></a>
+<a name="line-781"></a><a name="externalid"></a><font color=Blue>externalid</font> <font color=Red>::</font> XParser ExternalID
+<a name="line-782"></a><font color=Blue>externalid</font> <font color=Red>=</font>
+<a name="line-783"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"SYSTEM"</font><font color=Cyan>,</font> <font color=Green><u>do</u></font> word <font color=Magenta>"SYSTEM"</font>
+<a name="line-784"></a>                           s <font color=Red>&lt;-</font> systemliteral
+<a name="line-785"></a>                           return <font color=Cyan>(</font>SYSTEM s<font color=Cyan>)</font> <font color=Cyan>)</font>
+<a name="line-786"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"PUBLIC"</font><font color=Cyan>,</font> <font color=Green><u>do</u></font> word <font color=Magenta>"PUBLIC"</font>
+<a name="line-787"></a>                           p <font color=Red>&lt;-</font> pubidliteral
+<a name="line-788"></a>                           s <font color=Red>&lt;-</font> systemliteral
+<a name="line-789"></a>                           return <font color=Cyan>(</font>PUBLIC p s<font color=Cyan>)</font> <font color=Cyan>)</font>
+<a name="line-790"></a>           <font color=Red>]</font>
+<a name="line-791"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for an external id,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-792"></a>
+<a name="line-793"></a><a name="ndatadecl"></a><font color=Blue>ndatadecl</font> <font color=Red>::</font> XParser NDataDecl
+<a name="line-794"></a><font color=Blue>ndatadecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-795"></a>    word <font color=Magenta>"NDATA"</font>
+<a name="line-796"></a>    n <font color=Red>&lt;-</font> name
+<a name="line-797"></a>    return <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>
+<a name="line-798"></a>
+<a name="line-799"></a><a name="textdecl"></a><font color=Blue>textdecl</font> <font color=Red>::</font> XParser TextDecl
+<a name="line-800"></a><font color=Blue>textdecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-801"></a>    tok TokPIOpen
+<a name="line-802"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
+<a name="line-803"></a>    v <font color=Red>&lt;-</font> maybe versioninfo
+<a name="line-804"></a>    e <font color=Red>&lt;-</font> encodingdecl
+<a name="line-805"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failP <font color=Magenta>"expected ?&gt; terminating text decl"</font>
+<a name="line-806"></a>    return <font color=Cyan>(</font>TextDecl v e<font color=Cyan>)</font>
+<a name="line-807"></a>
+<a name="line-808"></a><a name="extparsedent"></a><font color=Blue>extparsedent</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>ExtParsedEnt Posn<font color=Cyan>)</font>
+<a name="line-809"></a><font color=Blue>extparsedent</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-810"></a>    t <font color=Red>&lt;-</font> maybe textdecl
+<a name="line-811"></a>    c <font color=Red>&lt;-</font> content
+<a name="line-812"></a>    return <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font>
+<a name="line-813"></a>
+<a name="line-814"></a><a name="extpe"></a><font color=Blue>extpe</font> <font color=Red>::</font> XParser ExtPE
+<a name="line-815"></a><font color=Blue>extpe</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-816"></a>    t <font color=Red>&lt;-</font> maybe textdecl
+<a name="line-817"></a>    e <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef extsubsetdecl<font color=Cyan>)</font>
+<a name="line-818"></a>    return <font color=Cyan>(</font>ExtPE t e<font color=Cyan>)</font>
+<a name="line-819"></a>
+<a name="line-820"></a><a name="encodingdecl"></a><font color=Blue>encodingdecl</font> <font color=Red>::</font> XParser EncodingDecl
+<a name="line-821"></a><font color=Blue>encodingdecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-822"></a>    <font color=Cyan>(</font>word <font color=Magenta>"encoding"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"ENCODING"</font><font color=Cyan>)</font>
+<a name="line-823"></a>    tok TokEqual <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"expected = in 'encoding' decl"</font>
+<a name="line-824"></a>    f <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-825"></a>    return <font color=Cyan>(</font>EncodingDecl f<font color=Cyan>)</font>
+<a name="line-826"></a>
+<a name="line-827"></a><a name="notationdecl"></a><font color=Blue>notationdecl</font> <font color=Red>::</font> XParser NotationDecl
+<a name="line-828"></a><font color=Blue>notationdecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-829"></a>    tok TokSpecialOpen
+<a name="line-830"></a>    tok <font color=Cyan>(</font>TokSpecial NOTATIONx<font color=Cyan>)</font>
+<a name="line-831"></a>    n <font color=Red>&lt;-</font> name
+<a name="line-832"></a>    e <font color=Red>&lt;-</font> either externalid publicid
+<a name="line-833"></a>    tok TokAnyClose <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating NOTATION decl "</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
+<a name="line-834"></a>    return <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>
+<a name="line-835"></a>
+<a name="line-836"></a><a name="publicid"></a><font color=Blue>publicid</font> <font color=Red>::</font> XParser PublicID
+<a name="line-837"></a><font color=Blue>publicid</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-838"></a>    word <font color=Magenta>"PUBLIC"</font>
+<a name="line-839"></a>    p <font color=Red>&lt;-</font> pubidliteral
+<a name="line-840"></a>    return <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>
+<a name="line-841"></a>
+<a name="line-842"></a><a name="entityvalue"></a><font color=Blue>entityvalue</font> <font color=Red>::</font> XParser EntityValue
+<a name="line-843"></a><font color=Blue>entityvalue</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-844"></a> <font color=Blue>-- evs &lt;- bracket (tok TokQuote) (tok TokQuote) (many (peRef ev))</font>
+<a name="line-845"></a>    tok TokQuote
+<a name="line-846"></a>    pn <font color=Red>&lt;-</font> posn
+<a name="line-847"></a>    evs <font color=Red>&lt;-</font> many ev
+<a name="line-848"></a>    tok TokQuote <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"expected quote to terminate entityvalue"</font>
+<a name="line-849"></a>    <font color=Blue>-- quoted text must be rescanned for possible PERefs</font>
+<a name="line-850"></a>    st <font color=Red>&lt;-</font> stGet
+<a name="line-851"></a>    Prelude<font color=Cyan>.</font>either failBad <font color=Cyan>(</font>return <font color=Cyan>.</font> EntityValue<font color=Cyan>)</font> <font color=Cyan>.</font> fst3 <font color=Cyan>$</font>
+<a name="line-852"></a>                <font color=Cyan>(</font>runParser <font color=Cyan>(</font>many ev<font color=Cyan>)</font> st
+<a name="line-853"></a>                         <font color=Cyan>(</font>reLexEntityValue <font color=Cyan>(</font><font color=Red>\</font>s<font color=Red>-&gt;</font> stringify <font color=Cyan>(</font>lookupPE s st<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-854"></a>                                           pn
+<a name="line-855"></a>                                           <font color=Cyan>(</font>flattenEV <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-856"></a>  <font color=Green><u>where</u></font>
+<a name="line-857"></a>    stringify <font color=Cyan>(</font>Just <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> Just <font color=Cyan>(</font>flattenEV ev<font color=Cyan>)</font>
+<a name="line-858"></a>    stringify <font color=Green><u>_</u></font> <font color=Red>=</font> Nothing
+<a name="line-859"></a>
+<a name="line-860"></a><a name="ev"></a><font color=Blue>ev</font> <font color=Red>::</font> XParser EV
+<a name="line-861"></a><font color=Blue>ev</font> <font color=Red>=</font>
+<a name="line-862"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"string"</font><font color=Cyan>,</font>    <font color=Cyan>(</font>string<font color=Cyan>`onFail`</font>freetext<font color=Cyan>)</font> <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVString<font color=Cyan>)</font>
+<a name="line-863"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"reference"</font><font color=Cyan>,</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVRef<font color=Cyan>)</font>
+<a name="line-864"></a>           <font color=Red>]</font>
+<a name="line-865"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for entity value,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-866"></a>
+<a name="line-867"></a><a name="attvalue"></a><font color=Blue>attvalue</font> <font color=Red>::</font> XParser AttValue
+<a name="line-868"></a><font color=Blue>attvalue</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-869"></a>    avs <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
+<a name="line-870"></a>                   <font color=Cyan>(</font>many <font color=Cyan>(</font>either freetext reference<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-871"></a>    return <font color=Cyan>(</font>AttValue avs<font color=Cyan>)</font>
+<a name="line-872"></a>
+<a name="line-873"></a><a name="systemliteral"></a><font color=Blue>systemliteral</font> <font color=Red>::</font> XParser SystemLiteral
+<a name="line-874"></a><font color=Blue>systemliteral</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-875"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-876"></a>    return <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>            <font color=Blue>-- note: refs &amp;...; not permitted</font>
+<a name="line-877"></a>
+<a name="line-878"></a><a name="pubidliteral"></a><font color=Blue>pubidliteral</font> <font color=Red>::</font> XParser PubidLiteral
+<a name="line-879"></a><font color=Blue>pubidliteral</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-880"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-881"></a>    return <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>             <font color=Blue>-- note: freetext is too liberal here</font>
+<a name="line-882"></a>
+<a name="line-883"></a><a name="chardata"></a><font color=Blue>-- | Return parsed freetext (i.e. until the next markup)</font>
+<a name="line-884"></a><font color=Blue>chardata</font> <font color=Red>::</font> XParser CharData
+<a name="line-885"></a><font color=Blue>chardata</font> <font color=Red>=</font> freetext
+<a name="line-886"></a>
+</pre>
+</body>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/ParseLazy.html b/docs/HaXml/src/Text/XML/HaXml/ParseLazy.html
--- a/docs/HaXml/src/Text/XML/HaXml/ParseLazy.html
+++ b/docs/HaXml/src/Text/XML/HaXml/ParseLazy.html
@@ -1,892 +1,906 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | A non-validating XML parser.  For the input grammar, see</font>
-<a name="(line2)"></a><font color=Blue>--   &lt;<a href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</a>&gt;.</font>
-<a name="(line3)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ParseLazy
-<a name="(line4)"></a>  <font color=Cyan>(</font>
-<a name="(line5)"></a>  <font color=Blue>-- * Parse a whole document</font>
-<a name="(line6)"></a>    xmlParse  <font color=Blue>-- , xmlParse'</font>
-<a name="(line7)"></a>  <font color=Blue>-- * Parse just a DTD</font>
-<a name="(line8)"></a>  <font color=Cyan>,</font> dtdParse  <font color=Blue>-- , dtdParse'</font>
-<a name="(line9)"></a>  <font color=Blue>-- * Parse a partial document</font>
-<a name="(line10)"></a>  <font color=Cyan>,</font> xmlParseWith
-<a name="(line11)"></a>  <font color=Blue>-- * Individual parsers for use with /xmlParseWith/ and module SAX</font>
-<a name="(line12)"></a>  <font color=Cyan>,</font> document<font color=Cyan>,</font> element<font color=Cyan>,</font> content
-<a name="(line13)"></a>  <font color=Cyan>,</font> comment<font color=Cyan>,</font> chardata
-<a name="(line14)"></a>  <font color=Cyan>,</font> reference<font color=Cyan>,</font> doctypedecl
-<a name="(line15)"></a>  <font color=Cyan>,</font> processinginstruction
-<a name="(line16)"></a>  <font color=Cyan>,</font> elemtag<font color=Cyan>,</font> name<font color=Cyan>,</font> tok
-<a name="(line17)"></a>  <font color=Cyan>,</font> elemOpenTag<font color=Cyan>,</font> elemCloseTag
-<a name="(line18)"></a>  <font color=Cyan>,</font> emptySTs<font color=Cyan>,</font> XParser
-<a name="(line19)"></a>  <font color=Blue>-- * These general utility functions don't belong here</font>
-<a name="(line20)"></a>  <font color=Cyan>,</font> fst3<font color=Cyan>,</font> snd3<font color=Cyan>,</font> thd3
-<a name="(line21)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line22)"></a>
-<a name="(line23)"></a><font color=Blue>-- An XML parser, written using a slightly extended version of the</font>
-<a name="(line24)"></a><font color=Blue>-- Hutton/Meijer parser combinators.  The input is tokenised internally</font>
-<a name="(line25)"></a><font color=Blue>-- by the lexer xmlLex.  Whilst parsing, we gather a symbol</font>
-<a name="(line26)"></a><font color=Blue>-- table of entity references.  PERefs must be defined before use, so we</font>
-<a name="(line27)"></a><font color=Blue>-- expand their uses as we encounter them, forcing the remainder of the</font>
-<a name="(line28)"></a><font color=Blue>-- input to be re-lexed and re-parsed.  GERefs are simply stored for</font>
-<a name="(line29)"></a><font color=Blue>-- later retrieval.</font>
-<a name="(line30)"></a>
-<a name="(line31)"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>either<font color=Cyan>,</font>maybe<font color=Cyan>,</font>sequence<font color=Cyan>,</font>catch<font color=Cyan>)</font>
-<a name="(line32)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Prelude <font color=Cyan>(</font>either<font color=Cyan>)</font>
-<a name="(line33)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
-<a name="(line34)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font>       <font color=Blue>-- debugging only</font>
-<a name="(line35)"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>isSpace<font color=Cyan>,</font>isDigit<font color=Cyan>,</font>isHexDigit<font color=Cyan>)</font>
-<a name="(line36)"></a><font color=Green><u>import</u></font> Monad hiding <font color=Cyan>(</font>sequence<font color=Cyan>)</font>
-<a name="(line37)"></a><font color=Green><u>import</u></font> Numeric <font color=Cyan>(</font>readDec<font color=Cyan>,</font>readHex<font color=Cyan>)</font>
-<a name="(line38)"></a><font color=Blue>--import Control.Exception (catch)</font>
-<a name="(line39)"></a>
-<a name="(line40)"></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="(line41)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn
-<a name="(line42)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Lex
-<a name="(line43)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly<font color=Cyan>.</font>NoLeak<font color=Cyan>.</font>StateLazy
-<a name="(line44)"></a>
-<a name="(line45)"></a>
-<a name="(line46)"></a><font color=Magenta><em>#if ( defined(__GLASGOW_HASKELL__) &amp;&amp; __GLASGOW_HASKELL__ &gt; 502 ) || \</em></font>
-<a name="(line47)"></a>    <font color=Cyan>(</font> defined<font color=Cyan>(</font><b><font color=Magenta>__NHC__</font></b><font color=Cyan>)</font> <font color=Cyan>&amp;&amp;</font> <b><font color=Magenta>__NHC__</font></b> <font color=Cyan>&gt;</font> <font color=Magenta>114</font> <font color=Cyan>)</font> <font color=Cyan>||</font> defined<font color=Cyan>(</font><b><font color=Magenta>__HUGS__</font></b><font color=Cyan>)</font>
-<a name="(line48)"></a><font color=Green><u>import</u></font> System<font color=Cyan>.</font>IO<font color=Cyan>.</font>Unsafe <font color=Cyan>(</font>unsafePerformIO<font color=Cyan>)</font>
-<a name="(line49)"></a><font color=Magenta><em>#elif defined(__GLASGOW_HASKELL__)</em></font>
-<a name="(line50)"></a><font color=Green><u>import</u></font> IOExts <font color=Cyan>(</font>unsafePerformIO<font color=Cyan>)</font>
-<a name="(line51)"></a><font color=Magenta><em>#elif defined(__NHC__)</em></font>
-<a name="(line52)"></a><font color=Green><u>import</u></font> IOExtras <font color=Cyan>(</font>unsafePerformIO<font color=Cyan>)</font>
-<a name="(line53)"></a><font color=Magenta><em>#elif defined(__HBC__)</em></font>
-<a name="(line54)"></a><font color=Green><u>import</u></font> UnsafePerformIO
-<a name="(line55)"></a><font color=Magenta><em>#endif</em></font>
-<a name="(line56)"></a>
-<a name="(line57)"></a><font color=Blue>--  #define DEBUG</font>
-<a name="(line58)"></a>
-<a name="(line59)"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>
-<a name="(line60)"></a><font color=Magenta><em>#  if ( defined(__GLASGOW_HASKELL__) &amp;&amp; __GLASGOW_HASKELL__ &gt; 502 ) || \</em></font>
-<a name="(line61)"></a>      <font color=Cyan>(</font> defined<font color=Cyan>(</font><b><font color=Magenta>__NHC__</font></b><font color=Cyan>)</font> <font color=Cyan>&amp;&amp;</font> <b><font color=Magenta>__NHC__</font></b> <font color=Cyan>&gt;</font> <font color=Magenta>114</font> <font color=Cyan>)</font> <font color=Cyan>||</font> defined<font color=Cyan>(</font><b><font color=Magenta>__HUGS__</font></b><font color=Cyan>)</font>
-<a name="(line62)"></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="(line63)"></a><font color=Magenta><em>#  elif defined(__GLASGOW_HASKELL__)</em></font>
-<a name="(line64)"></a><font color=Green><u>import</u></font> IOExts<font color=Cyan>(</font>trace<font color=Cyan>)</font>
-<a name="(line65)"></a><font color=Magenta><em>#  elif defined(__NHC__) || defined(__HBC__)</em></font>
-<a name="(line66)"></a><font color=Green><u>import</u></font> NonStdTrace
-<a name="(line67)"></a><font color=Magenta><em>#  endif</em></font>
-<a name="(line68)"></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="(line69)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> s <font color=Red>=</font> trace s v
-<a name="(line70)"></a><font color=Magenta><em>#else</em></font>
-<a name="(line71)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> s <font color=Red>=</font> v
-<a name="(line72)"></a><font color=Magenta><em>#endif</em></font>
-<a name="(line73)"></a>
-<a name="(line74)"></a>
-<a name="(line75)"></a><a name="xmlParse"></a><font color=Blue>-- | To parse a whole document, @xmlParse file content@ takes a filename</font>
-<a name="(line76)"></a><font color=Blue>--   (for generating error reports) and the string content of that file.</font>
-<a name="(line77)"></a><font color=Blue>--   A parse error causes program failure, with message to stderr.</font>
-<a name="(line78)"></a>xmlParse <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Document Posn
-<a name="(line79)"></a>
-<a name="(line80)"></a><font color=Blue>{-
-<a name="(line81)"></a>-- | To parse a whole document, @xmlParse' file content@ takes a filename
-<a name="(line82)"></a>--   (for generating error reports) and the string content of that file.
-<a name="(line83)"></a>--   Any parse error message is passed back to the caller through the
-<a name="(line84)"></a>--   @Either@ type.
-<a name="(line85)"></a>xmlParse' :: String -&gt; String -&gt; Either String (Document Posn)
-<a name="(line86)"></a>
-<a name="(line87)"></a>-- | To parse just a DTD, @dtdParse file content@ takes a filename
-<a name="(line88)"></a>--   (for generating error reports) and the string content of that
-<a name="(line89)"></a>--   file.  If no DTD was found, you get @Nothing@ rather than an error.
-<a name="(line90)"></a>--   However, if a DTD is found but contains errors, the program crashes.
-<a name="(line91)"></a>dtdParse  :: String -&gt; String -&gt; Maybe DocTypeDecl
-<a name="(line92)"></a>
-<a name="(line93)"></a>-- | To parse just a DTD, @dtdParse' file content@ takes a filename
-<a name="(line94)"></a>--   (for generating error reports) and the string content of that
-<a name="(line95)"></a>--   file.  If no DTD was found, you get @Right Nothing@.
-<a name="(line96)"></a>--   If a DTD was found but contains errors, you get a @Left message@.
-<a name="(line97)"></a>dtdParse' :: String -&gt; String -&gt; Either String (Maybe DocTypeDecl)
-<a name="(line98)"></a>
-<a name="(line99)"></a>xmlParse' name inp = xmlParse name inp `catch` (Left . show)
-<a name="(line100)"></a>dtdParse' name inp = dtdParse name inp `catch` (Left . show)
-<a name="(line101)"></a>-}</font>
-<a name="(line102)"></a>
-<a name="(line103)"></a>xmlParse  name  <font color=Red>=</font> fst3 <font color=Cyan>.</font> runParser <font color=Cyan>(</font>toEOF document<font color=Cyan>)</font> emptySTs <font color=Cyan>.</font> xmlLex name
-<a name="(line104)"></a><a name="dtdParse"></a>dtdParse  name  <font color=Red>=</font> fst3 <font color=Cyan>.</font> runParser justDTD  emptySTs <font color=Cyan>.</font> xmlLex name
-<a name="(line105)"></a>
-<a name="(line106)"></a>
-<a name="(line107)"></a><a name="toEOF"></a>toEOF <font color=Red>=</font> id	<font color=Blue>-- there are other possible implementations...</font>
-<a name="(line108)"></a>
-<a name="(line109)"></a><a name="xmlParseWith"></a><font color=Blue>-- | To parse a partial document, e.g. from an XML-based stream protocol,</font>
-<a name="(line110)"></a><font color=Blue>--   where you may later want to get more document elements from the same</font>
-<a name="(line111)"></a><font color=Blue>--   stream.  Arguments are: a parser for the item you want, and the</font>
-<a name="(line112)"></a><font color=Blue>--   already-lexed input to parse from.  Returns the item you wanted</font>
-<a name="(line113)"></a><font color=Blue>--   (or an error message), plus the remainder of the input.</font>
-<a name="(line114)"></a>xmlParseWith <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line115)"></a>                <font color=Red>-&gt;</font> <font color=Cyan>(</font>Either String a<font color=Cyan>,</font> <font color=Red>[</font><font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line116)"></a>xmlParseWith p <font color=Red>=</font> <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>v<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Red>-&gt;</font><font color=Cyan>(</font>Right v<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>.</font> runParser p emptySTs
-<a name="(line117)"></a>
-<a name="(line118)"></a>
-<a name="(line119)"></a><font color=Blue>---- Symbol table stuff ----</font>
-<a name="(line120)"></a>
-<a name="(line121)"></a><a name="SymTabs"></a><font color=Green><u>type</u></font> SymTabs <font color=Red>=</font> <font color=Cyan>(</font>SymTab PEDef<font color=Cyan>,</font> SymTab EntityDef<font color=Cyan>)</font>
-<a name="(line122)"></a>
-<a name="(line123)"></a><a name="emptySTs"></a><font color=Blue>-- | Some empty symbol tables for GE and PE references.</font>
-<a name="(line124)"></a>emptySTs <font color=Red>::</font> SymTabs
-<a name="(line125)"></a>emptySTs <font color=Red>=</font> <font color=Cyan>(</font>emptyST<font color=Cyan>,</font> emptyST<font color=Cyan>)</font>
-<a name="(line126)"></a>
-<a name="(line127)"></a><a name="addPE"></a>addPE <font color=Red>::</font> String <font color=Red>-&gt;</font> PEDef <font color=Red>-&gt;</font> SymTabs <font color=Red>-&gt;</font> SymTabs
-<a name="(line128)"></a>addPE n v <font color=Cyan>(</font>pe<font color=Cyan>,</font>ge<font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font>addST n v pe<font color=Cyan>,</font> ge<font color=Cyan>)</font>
-<a name="(line129)"></a>
-<a name="(line130)"></a><a name="addGE"></a>addGE <font color=Red>::</font> String <font color=Red>-&gt;</font> EntityDef <font color=Red>-&gt;</font> SymTabs <font color=Red>-&gt;</font> SymTabs
-<a name="(line131)"></a>addGE n v <font color=Cyan>(</font>pe<font color=Cyan>,</font>ge<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>let</u></font> newge <font color=Red>=</font> addST n v ge <font color=Green><u>in</u></font> newge <font color=Cyan>`seq`</font> <font color=Cyan>(</font>pe<font color=Cyan>,</font> newge<font color=Cyan>)</font>
-<a name="(line132)"></a>
-<a name="(line133)"></a><a name="lookupPE"></a>lookupPE <font color=Red>::</font> String <font color=Red>-&gt;</font> SymTabs <font color=Red>-&gt;</font> Maybe PEDef
-<a name="(line134)"></a>lookupPE s <font color=Cyan>(</font>pe<font color=Cyan>,</font>ge<font color=Cyan>)</font> <font color=Red>=</font> lookupST s pe
-<a name="(line135)"></a>
-<a name="(line136)"></a><a name="flattenEV"></a>flattenEV <font color=Red>::</font> EntityValue <font color=Red>-&gt;</font> String
-<a name="(line137)"></a>flattenEV <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font> <font color=Red>=</font> concatMap flatten evs
-<a name="(line138)"></a>  <font color=Green><u>where</u></font>
-<a name="(line139)"></a>    flatten <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>          <font color=Red>=</font> s
-<a name="(line140)"></a>    flatten <font color=Cyan>(</font>EVRef <font color=Cyan>(</font>RefEntity r<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&amp;"</font> <font color=Cyan>++</font>r<font color=Cyan>++</font><font color=Magenta>";"</font>
-<a name="(line141)"></a>    flatten <font color=Cyan>(</font>EVRef <font color=Cyan>(</font>RefChar r<font color=Cyan>)</font><font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&amp;#"</font><font color=Cyan>++</font>show r<font color=Cyan>++</font><font color=Magenta>";"</font>
-<a name="(line142)"></a> <font color=Blue>-- flatten (EVPERef n)           = "%" ++n++";"</font>
-<a name="(line143)"></a>
-<a name="(line144)"></a>
-<a name="(line145)"></a><a name="fst3"></a><font color=Blue>---- Misc ----</font>
-<a name="(line146)"></a>fst3 <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>-&gt;</font> a
-<a name="(line147)"></a><a name="snd3"></a>snd3 <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>-&gt;</font> b
-<a name="(line148)"></a><a name="thd3"></a>thd3 <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>-&gt;</font> c
-<a name="(line149)"></a>
-<a name="(line150)"></a>fst3 <font color=Cyan>(</font>a<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> a
-<a name="(line151)"></a>snd3 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> a
-<a name="(line152)"></a>thd3 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>)</font> <font color=Red>=</font> a
-<a name="(line153)"></a>
-<a name="(line154)"></a>
-<a name="(line155)"></a><font color=Blue>---- Auxiliary Parsing Functions ----</font>
-<a name="(line156)"></a>
-<a name="(line157)"></a><a name="XParser"></a><font color=Blue>-- | XParser is just a specialisation of the PolyStateLazy parser.</font>
-<a name="(line158)"></a><a name="XParser"></a><font color=Green><u>type</u></font> XParser a <font color=Red>=</font> Parser SymTabs <font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font> a
-<a name="(line159)"></a>
-<a name="(line160)"></a><a name="tok"></a><font color=Blue>-- | Return the next token from the input only if it matches the given token.</font>
-<a name="(line161)"></a>tok <font color=Red>::</font> TokenT <font color=Red>-&gt;</font> XParser TokenT
-<a name="(line162)"></a>tok t <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t'<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line163)"></a>           <font color=Green><u>case</u></font> t' <font color=Green><u>of</u></font> TokError <font color=Green><u>_</u></font>    <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
-<a name="(line164)"></a>                      <font color=Green><u>_</u></font> <font color=Red>|</font> t'<font color=Cyan>==</font>t     <font color=Red>-&gt;</font> return t
-<a name="(line165)"></a>                        <font color=Red>|</font> otherwise <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
-<a name="(line166)"></a><a name="nottok"></a>nottok <font color=Red>::</font> <font color=Red>[</font>TokenT<font color=Red>]</font> <font color=Red>-&gt;</font> XParser TokenT
-<a name="(line167)"></a>nottok ts <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line168)"></a>               <font color=Green><u>if</u></font> t<font color=Cyan>`elem`</font>ts <font color=Green><u>then</u></font> report fail <font color=Cyan>(</font><font color=Magenta>"no "</font><font color=Cyan>++</font>show t<font color=Cyan>)</font> p t
-<a name="(line169)"></a>                            <font color=Green><u>else</u></font> return t
-<a name="(line170)"></a>
-<a name="(line171)"></a><a name="name"></a><font color=Blue>-- | Return just a name, e.g. element name, attribute name.</font>
-<a name="(line172)"></a>name <font color=Red>::</font> XParser Name
-<a name="(line173)"></a>name <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>tok<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line174)"></a>          <font color=Green><u>case</u></font> tok <font color=Green><u>of</u></font>
-<a name="(line175)"></a>            TokName s  <font color=Red>-&gt;</font> return s
-<a name="(line176)"></a>            TokError <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> report failBad <font color=Magenta>"a name"</font> p tok
-<a name="(line177)"></a>            <font color=Green><u>_</u></font>          <font color=Red>-&gt;</font> report fail <font color=Magenta>"a name"</font> p tok
-<a name="(line178)"></a>
-<a name="(line179)"></a><a name="string"></a>string<font color=Cyan>,</font> freetext <font color=Red>::</font> XParser String
-<a name="(line180)"></a>string   <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line181)"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokName s <font color=Red>-&gt;</font> return s
-<a name="(line182)"></a>                        <font color=Green><u>_</u></font>         <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
-<a name="(line183)"></a><a name="freetext"></a>freetext <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line184)"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokFreeText s <font color=Red>-&gt;</font> return s
-<a name="(line185)"></a>                        <font color=Green><u>_</u></font>             <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
-<a name="(line186)"></a>
-<a name="(line187)"></a><a name="maybe"></a>maybe <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font>
-<a name="(line188)"></a>maybe p <font color=Red>=</font>
-<a name="(line189)"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Just<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line190)"></a>    <font color=Cyan>(</font> return Nothing<font color=Cyan>)</font>
-<a name="(line191)"></a>
-<a name="(line192)"></a><a name="either"></a>either <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser b <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>Either a b<font color=Cyan>)</font>
-<a name="(line193)"></a>either p q <font color=Red>=</font>
-<a name="(line194)"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Left<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line195)"></a>    <font color=Cyan>(</font> q <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Right<font color=Cyan>)</font>
-<a name="(line196)"></a>
-<a name="(line197)"></a><a name="word"></a>word <font color=Red>::</font> String <font color=Red>-&gt;</font> XParser ()
-<a name="(line198)"></a>word s <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x <font color=Red>&lt;-</font> next
-<a name="(line199)"></a>            <font color=Cyan>;</font> <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>
-<a name="(line200)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokName n<font color=Cyan>)</font>     <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
-<a name="(line201)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokFreeText n<font color=Cyan>)</font> <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
-<a name="(line202)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Red>@</font><font color=Cyan>(</font>TokError <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
-<a name="(line203)"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
-<a name="(line204)"></a>            <font color=Cyan>}</font>
-<a name="(line205)"></a>
-<a name="(line206)"></a><a name="posn"></a>posn <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x<font color=Red>@</font><font color=Cyan>(</font>p<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> next
-<a name="(line207)"></a>          <font color=Cyan>;</font> reparse <font color=Red>[</font>x<font color=Red>]</font>
-<a name="(line208)"></a>          <font color=Cyan>;</font> return p
-<a name="(line209)"></a>          <font color=Cyan>}</font>
-<a name="(line210)"></a>
-<a name="(line211)"></a><a name="nmtoken"></a>nmtoken <font color=Red>::</font> XParser NmToken
-<a name="(line212)"></a>nmtoken <font color=Red>=</font> <font color=Cyan>(</font>string <font color=Cyan>`onFail`</font> freetext<font color=Cyan>)</font>
-<a name="(line213)"></a>
-<a name="(line214)"></a><a name="failP"></a>failP<font color=Cyan>,</font> failBadP <font color=Red>::</font> String <font color=Red>-&gt;</font> XParser a
-<a name="(line215)"></a>failP msg <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> fail <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line216)"></a><a name="failBadP"></a>failBadP msg <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> failBad <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
-<a name="(line217)"></a>
-<a name="(line218)"></a><a name="report"></a>report <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>XParser a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> TokenT <font color=Red>-&gt;</font> XParser a
-<a name="(line219)"></a>report fail exp p t <font color=Red>=</font> fail <font color=Cyan>(</font><font color=Magenta>"Expected "</font><font color=Cyan>++</font>exp<font color=Cyan>++</font><font color=Magenta>" but found "</font><font color=Cyan>++</font>show t
-<a name="(line220)"></a>                           <font color=Cyan>++</font><font color=Magenta>"\n  in "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
-<a name="(line221)"></a>
-<a name="(line222)"></a><a name="adjustErrP"></a>adjustErrP <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> XParser a
-<a name="(line223)"></a><a name="adjustErrP"></a>p <font color=Cyan>`adjustErrP`</font> f <font color=Red>=</font> p <font color=Cyan>`onFail`</font> <font color=Green><u>do</u></font> pn <font color=Red>&lt;-</font> posn
-<a name="(line224)"></a>                                 <font color=Cyan>(</font>p <font color=Cyan>`adjustErr`</font> f<font color=Cyan>)</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font>show pn<font color=Cyan>)</font>
-<a name="(line225)"></a>
-<a name="(line226)"></a><a name="peRef"></a>peRef <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser a
-<a name="(line227)"></a>peRef p <font color=Red>=</font>
-<a name="(line228)"></a>    p <font color=Cyan>`onFail`</font>
-<a name="(line229)"></a>    <font color=Green><u>do</u></font> pn <font color=Red>&lt;-</font> posn
-<a name="(line230)"></a>       n <font color=Red>&lt;-</font> pereference
-<a name="(line231)"></a>       tr <font color=Red>&lt;-</font> stQuery <font color=Cyan>(</font>lookupPE n<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Looking up %"</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
-<a name="(line232)"></a>       <font color=Green><u>case</u></font> tr <font color=Green><u>of</u></font>
-<a name="(line233)"></a>           Just <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font> <font color=Red>-&gt;</font>
-<a name="(line234)"></a>                      <font color=Green><u>do</u></font> reparse <font color=Cyan>(</font>xmlReLex <font color=Cyan>(</font>posInNewCxt <font color=Cyan>(</font><font color=Magenta>"macro %"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
-<a name="(line235)"></a>                                                        <font color=Cyan>(</font>Just pn<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line236)"></a>                                           <font color=Cyan>(</font>flattenEV ev<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line237)"></a>                               <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"  defn:  "</font><font color=Cyan>++</font>flattenEV ev<font color=Cyan>)</font>
-<a name="(line238)"></a>                         peRef p
-<a name="(line239)"></a>           Just <font color=Cyan>(</font>PEDefExternalID <font color=Cyan>(</font>PUBLIC <font color=Green><u>_</u></font> <font color=Cyan>(</font>SystemLiteral f<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font>
-<a name="(line240)"></a>                      <font color=Green><u>do</u></font> <font color=Green><u>let</u></font> val <font color=Red>=</font> unsafePerformIO <font color=Cyan>(</font>readFile f<font color=Cyan>)</font>
-<a name="(line241)"></a>                         reparse <font color=Cyan>(</font>xmlReLex <font color=Cyan>(</font>posInNewCxt <font color=Cyan>(</font><font color=Magenta>"file "</font><font color=Cyan>++</font>f<font color=Cyan>)</font>
-<a name="(line242)"></a>                                                        <font color=Cyan>(</font>Just pn<font color=Cyan>)</font><font color=Cyan>)</font> val<font color=Cyan>)</font>
-<a name="(line243)"></a>                               <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"  reading from file "</font><font color=Cyan>++</font>f<font color=Cyan>)</font>
-<a name="(line244)"></a>                         peRef p
-<a name="(line245)"></a>           Just <font color=Cyan>(</font>PEDefExternalID <font color=Cyan>(</font>SYSTEM <font color=Cyan>(</font>SystemLiteral f<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font>
-<a name="(line246)"></a>                      <font color=Green><u>do</u></font> <font color=Green><u>let</u></font> val <font color=Red>=</font> unsafePerformIO <font color=Cyan>(</font>readFile f<font color=Cyan>)</font>
-<a name="(line247)"></a>                         reparse <font color=Cyan>(</font>xmlReLex <font color=Cyan>(</font>posInNewCxt <font color=Cyan>(</font><font color=Magenta>"file "</font><font color=Cyan>++</font>f<font color=Cyan>)</font>
-<a name="(line248)"></a>                                                        <font color=Cyan>(</font>Just pn<font color=Cyan>)</font><font color=Cyan>)</font> val<font color=Cyan>)</font>
-<a name="(line249)"></a>                               <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"  reading from file "</font><font color=Cyan>++</font>f<font color=Cyan>)</font>
-<a name="(line250)"></a>                         peRef p
-<a name="(line251)"></a>           Nothing <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"PEReference use before definition: "</font><font color=Cyan>++</font><font color=Magenta>"%"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font>
-<a name="(line252)"></a>                           <font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show pn<font color=Cyan>)</font>
-<a name="(line253)"></a>
-<a name="(line254)"></a><a name="blank"></a>blank <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser a
-<a name="(line255)"></a>blank p <font color=Red>=</font>
-<a name="(line256)"></a>    p <font color=Cyan>`onFail`</font>
-<a name="(line257)"></a>    <font color=Green><u>do</u></font> n <font color=Red>&lt;-</font> pereference
-<a name="(line258)"></a>       tr <font color=Red>&lt;-</font> stQuery <font color=Cyan>(</font>lookupPE n<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Looking up %"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>" (is blank?)"</font><font color=Cyan>)</font>
-<a name="(line259)"></a>       <font color=Green><u>case</u></font> tr <font color=Green><u>of</u></font>
-<a name="(line260)"></a>           Just <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font>
-<a name="(line261)"></a>                    <font color=Red>|</font> all isSpace <font color=Cyan>(</font>flattenEV ev<font color=Cyan>)</font>  <font color=Red>-&gt;</font>
-<a name="(line262)"></a>                            <font color=Green><u>do</u></font> blank p <font color=Cyan>`debug`</font> <font color=Magenta>"Empty macro definition"</font>
-<a name="(line263)"></a>           Just <font color=Green><u>_</u></font>  <font color=Red>-&gt;</font> failP <font color=Cyan>(</font><font color=Magenta>"expected a blank PERef macro: "</font><font color=Cyan>++</font><font color=Magenta>"%"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
-<a name="(line264)"></a>           Nothing <font color=Red>-&gt;</font> failP <font color=Cyan>(</font><font color=Magenta>"PEReference use before definition: "</font><font color=Cyan>++</font><font color=Magenta>"%"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
-<a name="(line265)"></a>
-<a name="(line266)"></a>
-<a name="(line267)"></a>
-<a name="(line268)"></a><font color=Blue>---- XML Parsing Functions ----</font>
-<a name="(line269)"></a>
-<a name="(line270)"></a><a name="justDTD"></a>justDTD <font color=Red>::</font> XParser <font color=Cyan>(</font>Maybe DocTypeDecl<font color=Cyan>)</font>
-<a name="(line271)"></a>justDTD <font color=Red>=</font>
-<a name="(line272)"></a>  <font color=Green><u>do</u></font> <font color=Cyan>(</font>ExtSubset <font color=Green><u>_</u></font> ds<font color=Cyan>)</font> <font color=Red>&lt;-</font> extsubset <font color=Cyan>`debug`</font> <font color=Magenta>"Trying external subset"</font>
-<a name="(line273)"></a>     <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font> fail <font color=Magenta>"empty"</font>
-<a name="(line274)"></a>         <font color=Green><u>else</u></font> return <font color=Cyan>(</font>Just <font color=Cyan>(</font>DTD <font color=Magenta>"extsubset"</font> Nothing <font color=Cyan>(</font>concatMap extract ds<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line275)"></a>  <font color=Cyan>`onFail`</font>
-<a name="(line276)"></a>  <font color=Green><u>do</u></font> <font color=Cyan>(</font>Prolog <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> dtd <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> prolog
-<a name="(line277)"></a>     return dtd
-<a name="(line278)"></a> <font color=Green><u>where</u></font> extract <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>m<font color=Red>]</font>
-<a name="(line279)"></a>       extract <font color=Cyan>(</font>ExtConditionalSect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> concatMap extract i
-<a name="(line280)"></a>       extract <font color=Cyan>(</font>ExtConditionalSect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> []
-<a name="(line281)"></a>
-<a name="(line282)"></a><a name="document"></a><font color=Blue>-- | Return an entire XML document including prolog and trailing junk.</font>
-<a name="(line283)"></a>document <font color=Red>::</font> XParser <font color=Cyan>(</font>Document Posn<font color=Cyan>)</font>
-<a name="(line284)"></a>document <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line285)"></a> <font color=Blue>-- p &lt;- prolog `adjustErr` ("unrecognisable XML prolog\n"++)</font>
-<a name="(line286)"></a> <font color=Blue>-- e &lt;- element</font>
-<a name="(line287)"></a> <font color=Blue>-- ms &lt;- many misc</font>
-<a name="(line288)"></a> <font color=Blue>-- (_,ge) &lt;- stGet</font>
-<a name="(line289)"></a> <font color=Blue>-- return (Document p ge e ms)</font>
-<a name="(line290)"></a>    return Document <font color=Cyan>`apply`</font> <font color=Cyan>(</font>prolog <font color=Cyan>`adjustErr`</font>
-<a name="(line291)"></a>                                    <font color=Cyan>(</font><font color=Magenta>"unrecognisable XML prolog\n"</font><font color=Cyan>++</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line292)"></a>                    <font color=Cyan>`apply`</font> <font color=Cyan>(</font>fmap snd stGet<font color=Cyan>)</font>
-<a name="(line293)"></a>                    <font color=Cyan>`apply`</font> element
-<a name="(line294)"></a>                    <font color=Cyan>`apply`</font> many misc
-<a name="(line295)"></a>
-<a name="(line296)"></a><a name="comment"></a><font color=Blue>-- | Return an XML comment.</font>
-<a name="(line297)"></a>comment <font color=Red>::</font> XParser Comment
-<a name="(line298)"></a>comment <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line299)"></a>    bracket <font color=Cyan>(</font>tok TokCommentOpen<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokCommentClose<font color=Cyan>)</font> freetext
-<a name="(line300)"></a><font color=Blue>--  tok TokCommentOpen</font>
-<a name="(line301)"></a><font color=Blue>--  commit $ do</font>
-<a name="(line302)"></a><font color=Blue>--    c &lt;- freetext</font>
-<a name="(line303)"></a><font color=Blue>--    tok TokCommentClose</font>
-<a name="(line304)"></a><font color=Blue>--    return c</font>
-<a name="(line305)"></a>
-<a name="(line306)"></a><a name="processinginstruction"></a><font color=Blue>-- | Parse a processing instruction.</font>
-<a name="(line307)"></a>processinginstruction <font color=Red>::</font> XParser ProcessingInstruction
-<a name="(line308)"></a>processinginstruction <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line309)"></a>    tok TokPIOpen
-<a name="(line310)"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
-<a name="(line311)"></a>      n <font color=Red>&lt;-</font> string  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"processing instruction has no target"</font>
-<a name="(line312)"></a>      f <font color=Red>&lt;-</font> freetext
-<a name="(line313)"></a>      tok TokPIClose <font color=Cyan>`onFail`</font> failP <font color=Cyan>(</font><font color=Magenta>"missing ?&gt; in &lt;?"</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
-<a name="(line314)"></a>      return <font color=Cyan>(</font>n<font color=Cyan>,</font> f<font color=Cyan>)</font>
-<a name="(line315)"></a>
-<a name="(line316)"></a><a name="cdsect"></a>cdsect <font color=Red>::</font> XParser CDSect
-<a name="(line317)"></a>cdsect <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line318)"></a>    tok TokSectionOpen
-<a name="(line319)"></a>    bracket <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection CDATAx<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSectionClose<font color=Cyan>)</font> chardata
-<a name="(line320)"></a>
-<a name="(line321)"></a><a name="prolog"></a>prolog <font color=Red>::</font> XParser Prolog
-<a name="(line322)"></a>prolog <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line323)"></a>    x   <font color=Red>&lt;-</font> maybe xmldecl
-<a name="(line324)"></a>    m1  <font color=Red>&lt;-</font> many misc
-<a name="(line325)"></a>    dtd <font color=Red>&lt;-</font> maybe doctypedecl
-<a name="(line326)"></a>    m2  <font color=Red>&lt;-</font> many misc
-<a name="(line327)"></a>    return <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font>
-<a name="(line328)"></a>
-<a name="(line329)"></a><a name="xmldecl"></a>xmldecl <font color=Red>::</font> XParser XMLDecl
-<a name="(line330)"></a>xmldecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line331)"></a>    tok TokPIOpen
-<a name="(line332)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
-<a name="(line333)"></a>    p <font color=Red>&lt;-</font> posn
-<a name="(line334)"></a>    s <font color=Red>&lt;-</font> freetext
-<a name="(line335)"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing ?&gt; in &lt;?xml ...?&gt;"</font>
-<a name="(line336)"></a> <font color=Blue>-- raise ((runParser aux emptySTs . xmlReLex p) s)</font>
-<a name="(line337)"></a>    return <font color=Cyan>(</font>fst3 <font color=Cyan>(</font><font color=Cyan>(</font>runParser aux emptySTs <font color=Cyan>.</font> xmlReLex p<font color=Cyan>)</font> s<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line338)"></a>  <font color=Green><u>where</u></font>
-<a name="(line339)"></a>    aux <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line340)"></a>        v <font color=Red>&lt;-</font> versioninfo  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing XML version info"</font>
-<a name="(line341)"></a>        e <font color=Red>&lt;-</font> maybe encodingdecl
-<a name="(line342)"></a>        s <font color=Red>&lt;-</font> maybe sddecl
-<a name="(line343)"></a>        return <font color=Cyan>(</font>XMLDecl v e s<font color=Cyan>)</font>
-<a name="(line344)"></a> <font color=Blue>-- raise (Left err, _, _) = failP err</font>
-<a name="(line345)"></a> <font color=Blue>-- raise (Right ok, _, _) = return ok</font>
-<a name="(line346)"></a>
-<a name="(line347)"></a><a name="versioninfo"></a>versioninfo <font color=Red>::</font> XParser VersionInfo
-<a name="(line348)"></a>versioninfo <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line349)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"version"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"VERSION"</font><font color=Cyan>)</font>
-<a name="(line350)"></a>    tok TokEqual
-<a name="(line351)"></a>    bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line352)"></a>
-<a name="(line353)"></a><a name="misc"></a>misc <font color=Red>::</font> XParser Misc
-<a name="(line354)"></a>misc <font color=Red>=</font>
-<a name="(line355)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"&lt;!--comment--&gt;"</font><font color=Cyan>,</font>  comment <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Comment<font color=Cyan>)</font>
-<a name="(line356)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"&lt;?PI?&gt;"</font><font color=Cyan>,</font>          processinginstruction <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PI<font color=Cyan>)</font>
-<a name="(line357)"></a>           <font color=Red>]</font>
-<a name="(line358)"></a>
-<a name="(line359)"></a><a name="doctypedecl"></a><font color=Blue>-- | Return a DOCTYPE decl, indicating a DTD.</font>
-<a name="(line360)"></a>doctypedecl <font color=Red>::</font> XParser DocTypeDecl
-<a name="(line361)"></a>doctypedecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line362)"></a>    tok TokSpecialOpen
-<a name="(line363)"></a>    tok <font color=Cyan>(</font>TokSpecial DOCTYPEx<font color=Cyan>)</font>
-<a name="(line364)"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
-<a name="(line365)"></a>      n   <font color=Red>&lt;-</font> name
-<a name="(line366)"></a>      eid <font color=Red>&lt;-</font> maybe externalid
-<a name="(line367)"></a>      es  <font color=Red>&lt;-</font> maybe <font color=Cyan>(</font>bracket <font color=Cyan>(</font>tok TokSqOpen<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSqClose<font color=Cyan>)</font>
-<a name="(line368)"></a>                            <font color=Cyan>(</font>many <font color=Cyan>(</font>peRef markupdecl<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line369)"></a>      blank <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font>  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing &gt; in DOCTYPE decl"</font>
-<a name="(line370)"></a>      return <font color=Cyan>(</font>DTD n eid <font color=Cyan>(</font><font color=Green><u>case</u></font> es <font color=Green><u>of</u></font> <font color=Cyan>{</font> Nothing <font color=Red>-&gt;</font> []<font color=Cyan>;</font> Just e <font color=Red>-&gt;</font> e <font color=Cyan>}</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line371)"></a>
-<a name="(line372)"></a><a name="markupdecl"></a><font color=Blue>-- | Return a DTD markup decl, e.g. ELEMENT, ATTLIST, etc</font>
-<a name="(line373)"></a>markupdecl <font color=Red>::</font> XParser MarkupDecl
-<a name="(line374)"></a>markupdecl <font color=Red>=</font>
-<a name="(line375)"></a>  oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"ELEMENT"</font><font color=Cyan>,</font>  elementdecl  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Element<font color=Cyan>)</font>
-<a name="(line376)"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ATTLIST"</font><font color=Cyan>,</font>  attlistdecl  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> AttList<font color=Cyan>)</font>
-<a name="(line377)"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ENTITY"</font><font color=Cyan>,</font>   entitydecl   <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Entity<font color=Cyan>)</font>
-<a name="(line378)"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"NOTATION"</font><font color=Cyan>,</font> notationdecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Notation<font color=Cyan>)</font>
-<a name="(line379)"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"misc"</font><font color=Cyan>,</font>     misc         <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> MarkupMisc<font color=Cyan>)</font>
-<a name="(line380)"></a>         <font color=Red>]</font>
-<a name="(line381)"></a>    <font color=Cyan>`adjustErrP`</font>
-<a name="(line382)"></a>          <font color=Cyan>(</font><font color=Magenta>"when looking for a markup decl,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line383)"></a> <font color=Blue>--       (\  (ELEMENT, ATTLIST, ENTITY, NOTATION, &lt;!--comment--&gt;, or &lt;?PI?&gt;")</font>
-<a name="(line384)"></a>
-<a name="(line385)"></a><a name="extsubset"></a>extsubset <font color=Red>::</font> XParser ExtSubset
-<a name="(line386)"></a>extsubset <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line387)"></a>    td <font color=Red>&lt;-</font> maybe textdecl
-<a name="(line388)"></a>    ds <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef extsubsetdecl<font color=Cyan>)</font>
-<a name="(line389)"></a>    return <font color=Cyan>(</font>ExtSubset td ds<font color=Cyan>)</font>
-<a name="(line390)"></a>
-<a name="(line391)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> XParser ExtSubsetDecl
-<a name="(line392)"></a>extsubsetdecl <font color=Red>=</font>
-<a name="(line393)"></a>    <font color=Cyan>(</font> markupdecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> ExtMarkupDecl<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line394)"></a>    <font color=Cyan>(</font> conditionalsect <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> ExtConditionalSect<font color=Cyan>)</font>
-<a name="(line395)"></a>
-<a name="(line396)"></a><a name="sddecl"></a>sddecl <font color=Red>::</font> XParser SDDecl
-<a name="(line397)"></a>sddecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line398)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"standalone"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"STANDALONE"</font><font color=Cyan>)</font>
-<a name="(line399)"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
-<a name="(line400)"></a>      tok TokEqual <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing = in 'standalone' decl"</font>
-<a name="(line401)"></a>      bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
-<a name="(line402)"></a>              <font color=Cyan>(</font> <font color=Cyan>(</font>word <font color=Magenta>"yes"</font> <font color=Cyan>&gt;&gt;</font> return True<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line403)"></a>                <font color=Cyan>(</font>word <font color=Magenta>"no"</font> <font color=Cyan>&gt;&gt;</font> return False<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line404)"></a>                failP <font color=Magenta>"'standalone' decl requires 'yes' or 'no' value"</font> <font color=Cyan>)</font>
-<a name="(line405)"></a>
-<a name="(line406)"></a><font color=Blue>{-
-<a name="(line407)"></a>element :: XParser (Element Posn)
-<a name="(line408)"></a>element = do
-<a name="(line409)"></a>    tok TokAnyOpen
-<a name="(line410)"></a>    (ElemTag n as) &lt;- elemtag
-<a name="(line411)"></a>    oneOf' [ ("self-closing tag &lt;"++n++"/&gt;"
-<a name="(line412)"></a>             ,  do tok TokEndClose
-<a name="(line413)"></a>                   return (Elem n as []))
-<a name="(line414)"></a>           , ("after open tag &lt;"++n++"&gt;"
-<a name="(line415)"></a>             ,  do tok TokAnyClose
-<a name="(line416)"></a>                   cs &lt;- many content
-<a name="(line417)"></a>                   p  &lt;- posn
-<a name="(line418)"></a>                   m  &lt;- bracket (tok TokEndOpen) (tok TokAnyClose) name
-<a name="(line419)"></a>                   checkmatch p n m
-<a name="(line420)"></a>                   return (Elem n as cs))
-<a name="(line421)"></a>           ] `adjustErr` (("in element tag "++n++",\n")++)
-<a name="(line422)"></a>-}</font>
-<a name="(line423)"></a>
-<a name="(line424)"></a><a name="element"></a><font color=Blue>-- | Return a complete element including all its inner content.</font>
-<a name="(line425)"></a>element <font color=Red>::</font> XParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>
-<a name="(line426)"></a>element <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line427)"></a>    tok TokAnyOpen
-<a name="(line428)"></a>    <font color=Cyan>(</font>ElemTag n <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> elemtag
-<a name="(line429)"></a>    return <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>`apply`</font>
-<a name="(line430)"></a>        <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokEndClose
-<a name="(line431)"></a>             return []
-<a name="(line432)"></a>          <font color=Cyan>`onFail`</font>
-<a name="(line433)"></a>          <font color=Green><u>do</u></font> tok TokAnyClose
-<a name="(line434)"></a>             commit <font color=Cyan>$</font> manyFinally content
-<a name="(line435)"></a>                                  <font color=Cyan>(</font><font color=Green><u>do</u></font> p <font color=Red>&lt;-</font> posn
-<a name="(line436)"></a>                                      m <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokEndOpen<font color=Cyan>)</font>
-<a name="(line437)"></a>                                                   <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font> name
-<a name="(line438)"></a>                                      checkmatch p n m<font color=Cyan>)</font>
-<a name="(line439)"></a>          <font color=Cyan>)</font> <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in element tag "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line440)"></a>
-<a name="(line441)"></a><a name="checkmatch"></a>checkmatch <font color=Red>::</font> Posn <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> XParser ()
-<a name="(line442)"></a>checkmatch p n m <font color=Red>=</font>
-<a name="(line443)"></a>  <font color=Green><u>if</u></font> n <font color=Cyan>==</font> m <font color=Green><u>then</u></font> return ()
-<a name="(line444)"></a>  <font color=Green><u>else</u></font> failBadP <font color=Cyan>(</font><font color=Magenta>"tag &lt;"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>"&gt; terminated by &lt;/"</font><font color=Cyan>++</font>m<font color=Cyan>++</font><font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
-<a name="(line445)"></a>
-<a name="(line446)"></a><a name="elemtag"></a><font color=Blue>-- | Parse only the parts between angle brackets in an element tag.</font>
-<a name="(line447)"></a>elemtag <font color=Red>::</font> XParser ElemTag
-<a name="(line448)"></a>elemtag <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line449)"></a>    n  <font color=Red>&lt;-</font> name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"malformed element tag\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line450)"></a>    <font color=Green><u>as</u></font> <font color=Red>&lt;-</font> many attribute
-<a name="(line451)"></a>    return <font color=Cyan>(</font>ElemTag n <font color=Green><u>as</u></font><font color=Cyan>)</font>
-<a name="(line452)"></a>
-<a name="(line453)"></a><a name="elemOpenTag"></a><font color=Blue>-- | For use with stream parsers - returns the complete opening element tag.</font>
-<a name="(line454)"></a>elemOpenTag <font color=Red>::</font> XParser ElemTag
-<a name="(line455)"></a>elemOpenTag <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line456)"></a>    tok TokAnyOpen
-<a name="(line457)"></a>    e <font color=Red>&lt;-</font> elemtag
-<a name="(line458)"></a>    tok TokAnyClose
-<a name="(line459)"></a>    return e
-<a name="(line460)"></a>
-<a name="(line461)"></a><a name="elemCloseTag"></a><font color=Blue>-- | For use with stream parsers - accepts a closing tag, provided it</font>
-<a name="(line462)"></a><font color=Blue>--   matches the given element name.</font>
-<a name="(line463)"></a>elemCloseTag <font color=Red>::</font> Name <font color=Red>-&gt;</font> XParser ()
-<a name="(line464)"></a>elemCloseTag n <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line465)"></a>    tok TokEndOpen
-<a name="(line466)"></a>    p <font color=Red>&lt;-</font> posn
-<a name="(line467)"></a>    m <font color=Red>&lt;-</font> name
-<a name="(line468)"></a>    tok TokAnyClose
-<a name="(line469)"></a>    checkmatch p n m
-<a name="(line470)"></a>
-<a name="(line471)"></a><a name="attribute"></a>attribute <font color=Red>::</font> XParser Attribute
-<a name="(line472)"></a>attribute <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line473)"></a>    n <font color=Red>&lt;-</font> name <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"malformed attribute name\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line474)"></a>    tok TokEqual <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing = in attribute"</font>
-<a name="(line475)"></a>    v <font color=Red>&lt;-</font> attvalue <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing attvalue"</font>
-<a name="(line476)"></a>    return <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>
-<a name="(line477)"></a>
-<a name="(line478)"></a><a name="content"></a><font color=Blue>-- | Return a content particle, e.g. text, element, reference, etc</font>
-<a name="(line479)"></a>content <font color=Red>::</font> XParser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font>
-<a name="(line480)"></a>content <font color=Red>=</font>
-<a name="(line481)"></a>  <font color=Green><u>do</u></font> <font color=Cyan>{</font> p  <font color=Red>&lt;-</font> posn
-<a name="(line482)"></a>     <font color=Cyan>;</font> c' <font color=Red>&lt;-</font> content'
-<a name="(line483)"></a>     <font color=Cyan>;</font> return <font color=Cyan>(</font>c' p<font color=Cyan>)</font>
-<a name="(line484)"></a>     <font color=Cyan>}</font>
-<a name="(line485)"></a>  <font color=Green><u>where</u></font>
-<a name="(line486)"></a>     content' <font color=Red>=</font> oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"element"</font><font color=Cyan>,</font>   element   <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CElem<font color=Cyan>)</font>
-<a name="(line487)"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"chardata"</font><font color=Cyan>,</font>  chardata  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CString False<font color=Cyan>)</font>
-<a name="(line488)"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"reference"</font><font color=Cyan>,</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CRef<font color=Cyan>)</font>
-<a name="(line489)"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"CDATA"</font><font color=Cyan>,</font>     cdsect    <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CString True<font color=Cyan>)</font>
-<a name="(line490)"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"misc"</font><font color=Cyan>,</font>      misc      <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CMisc<font color=Cyan>)</font>
-<a name="(line491)"></a>                       <font color=Red>]</font>
-<a name="(line492)"></a>                  <font color=Cyan>`adjustErrP`</font> <font color=Cyan>(</font><font color=Magenta>"when looking for a content item,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line493)"></a><font color=Blue>-- (\    (element, text, reference, CDATA section, &lt;!--comment--&gt;, or &lt;?PI?&gt;")</font>
-<a name="(line494)"></a>
-<a name="(line495)"></a><a name="elementdecl"></a>elementdecl <font color=Red>::</font> XParser ElementDecl
-<a name="(line496)"></a>elementdecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line497)"></a>    tok TokSpecialOpen
-<a name="(line498)"></a>    tok <font color=Cyan>(</font>TokSpecial ELEMENTx<font color=Cyan>)</font>
-<a name="(line499)"></a>    n <font color=Red>&lt;-</font> peRef name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"expecting identifier in ELEMENT decl\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line500)"></a>    c <font color=Red>&lt;-</font> peRef contentspec
-<a name="(line501)"></a>             <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in content spec of ELEMENT decl: "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line502)"></a>    blank <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failBadP
-<a name="(line503)"></a>       <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating ELEMENT decl"</font>
-<a name="(line504)"></a>       <font color=Cyan>++</font><font color=Magenta>"\n    element name was "</font><font color=Cyan>++</font>show n
-<a name="(line505)"></a>       <font color=Cyan>++</font><font color=Magenta>"\n    contentspec was "</font><font color=Cyan>++</font><font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>ContentSpec p<font color=Cyan>)</font><font color=Red>-&gt;</font> show p<font color=Cyan>)</font> c<font color=Cyan>)</font>
-<a name="(line506)"></a>    return <font color=Cyan>(</font>ElementDecl n c<font color=Cyan>)</font>
-<a name="(line507)"></a>
-<a name="(line508)"></a><a name="contentspec"></a>contentspec <font color=Red>::</font> XParser ContentSpec
-<a name="(line509)"></a>contentspec <font color=Red>=</font>
-<a name="(line510)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"EMPTY"</font><font color=Cyan>,</font>  peRef <font color=Cyan>(</font>word <font color=Magenta>"EMPTY"</font><font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return EMPTY<font color=Cyan>)</font>
-<a name="(line511)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ANY"</font><font color=Cyan>,</font>    peRef <font color=Cyan>(</font>word <font color=Magenta>"ANY"</font><font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return ANY<font color=Cyan>)</font>
-<a name="(line512)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"mixed"</font><font color=Cyan>,</font>  peRef mixed <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Mixed<font color=Cyan>)</font>
-<a name="(line513)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"simple"</font><font color=Cyan>,</font> peRef cp <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> ContentSpec<font color=Cyan>)</font>
-<a name="(line514)"></a>           <font color=Red>]</font>
-<a name="(line515)"></a> <font color=Blue>--   `adjustErr` ("when looking for content spec,\n"++)</font>
-<a name="(line516)"></a> <font color=Blue>--   `adjustErr` (++"\nLooking for content spec (EMPTY, ANY, mixed, etc)")</font>
-<a name="(line517)"></a>
-<a name="(line518)"></a><a name="choice"></a>choice <font color=Red>::</font> XParser <font color=Red>[</font>CP<font color=Red>]</font>
-<a name="(line519)"></a>choice <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line520)"></a>    bracket <font color=Cyan>(</font>tok TokBraOpen <font color=Cyan>`debug`</font> <font color=Magenta>"Trying choice"</font><font color=Cyan>)</font>
-<a name="(line521)"></a>            <font color=Cyan>(</font>blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>`debug`</font> <font color=Magenta>"Succeeded with choice"</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line522)"></a>            <font color=Cyan>(</font>peRef cp <font color=Cyan>`sepBy1`</font> blank <font color=Cyan>(</font>tok TokPipe<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line523)"></a>
-<a name="(line524)"></a><a name="sequence"></a>sequence <font color=Red>::</font> XParser <font color=Red>[</font>CP<font color=Red>]</font>
-<a name="(line525)"></a>sequence <font color=Red>=</font> <font color=Green><u>do</u></font>	<font color=Blue>-- bracket is inappropriate because of inner failBad</font>
-<a name="(line526)"></a> <font color=Blue>-- bracket (tok TokBraOpen `debug` "Trying sequence")</font>
-<a name="(line527)"></a> <font color=Blue>--         (blank (tok TokBraClose `debug` "Succeeded with sequence"))</font>
-<a name="(line528)"></a> <font color=Blue>--         (peRef cp `sepBy1` blank (tok TokComma))</font>
-<a name="(line529)"></a>    tok TokBraOpen <font color=Cyan>`debug`</font> <font color=Magenta>"Trying sequence"</font>
-<a name="(line530)"></a>    cps <font color=Red>&lt;-</font> peRef cp <font color=Cyan>`sepBy1`</font> blank <font color=Cyan>(</font>tok TokComma<font color=Cyan>)</font>
-<a name="(line531)"></a>    blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>`debug`</font> <font color=Magenta>"Succeeded with sequence"</font><font color=Cyan>)</font>
-<a name="(line532)"></a>    return cps
-<a name="(line533)"></a>
-<a name="(line534)"></a><a name="cp"></a>cp <font color=Red>::</font> XParser CP
-<a name="(line535)"></a>cp <font color=Red>=</font> oneOf <font color=Red>[</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> n <font color=Red>&lt;-</font> name
-<a name="(line536)"></a>                  m <font color=Red>&lt;-</font> modifier
-<a name="(line537)"></a>                  <font color=Green><u>let</u></font> c <font color=Red>=</font> TagName n m
-<a name="(line538)"></a>                  return c <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ContentSpec: name "</font><font color=Cyan>++</font>show c<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line539)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> ss <font color=Red>&lt;-</font> sequence
-<a name="(line540)"></a>                  m <font color=Red>&lt;-</font> modifier
-<a name="(line541)"></a>                  <font color=Green><u>let</u></font> c <font color=Red>=</font> Seq ss m
-<a name="(line542)"></a>                  return c <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ContentSpec: sequence "</font><font color=Cyan>++</font>show c<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line543)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> cs <font color=Red>&lt;-</font> choice
-<a name="(line544)"></a>                  m <font color=Red>&lt;-</font> modifier
-<a name="(line545)"></a>                  <font color=Green><u>let</u></font> c <font color=Red>=</font> Choice cs m
-<a name="(line546)"></a>                  return c <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ContentSpec: choice "</font><font color=Cyan>++</font>show c<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line547)"></a>           <font color=Red>]</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Magenta>"\nwhen looking for a content particle"</font><font color=Cyan>)</font>
-<a name="(line548)"></a>
-<a name="(line549)"></a><a name="modifier"></a>modifier <font color=Red>::</font> XParser Modifier
-<a name="(line550)"></a>modifier <font color=Red>=</font> oneOf <font color=Red>[</font> <font color=Cyan>(</font> tok TokStar <font color=Cyan>&gt;&gt;</font> return Star <font color=Cyan>)</font>
-<a name="(line551)"></a>                 <font color=Cyan>,</font> <font color=Cyan>(</font> tok TokQuery <font color=Cyan>&gt;&gt;</font> return Query <font color=Cyan>)</font>
-<a name="(line552)"></a>                 <font color=Cyan>,</font> <font color=Cyan>(</font> tok TokPlus <font color=Cyan>&gt;&gt;</font> return Plus <font color=Cyan>)</font>
-<a name="(line553)"></a>                 <font color=Cyan>,</font> <font color=Cyan>(</font> return None <font color=Cyan>)</font>
-<a name="(line554)"></a>                 <font color=Red>]</font>
-<a name="(line555)"></a>
-<a name="(line556)"></a><font color=Blue>-- just for debugging</font>
-<a name="(line557)"></a><font color=Green><u>instance</u></font> Show CP <font color=Green><u>where</u></font>
-<a name="(line558)"></a>    show <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font> <font color=Red>=</font> n<font color=Cyan>++</font>show m
-<a name="(line559)"></a>    show <font color=Cyan>(</font>Choice cps m<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'('</font><font color=Red><b>:</b></font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>"|"</font> <font color=Cyan>(</font>map show cps<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line560)"></a>                          <font color=Cyan>++</font><font color=Magenta>")"</font><font color=Cyan>++</font>show m
-<a name="(line561)"></a>    show <font color=Cyan>(</font>Seq cps m<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'('</font><font color=Red><b>:</b></font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> <font color=Cyan>(</font>map show cps<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line562)"></a>                          <font color=Cyan>++</font><font color=Magenta>")"</font><font color=Cyan>++</font>show m
-<a name="(line563)"></a><font color=Green><u>instance</u></font> Show Modifier <font color=Green><u>where</u></font>
-<a name="(line564)"></a>    show None <font color=Red>=</font> <font color=Magenta>""</font>
-<a name="(line565)"></a>    show Query <font color=Red>=</font> <font color=Magenta>"?"</font>
-<a name="(line566)"></a>    show Star <font color=Red>=</font> <font color=Magenta>"*"</font>
-<a name="(line567)"></a>    show Plus <font color=Red>=</font> <font color=Magenta>"+"</font>
-<a name="(line568)"></a><font color=Blue>----</font>
-<a name="(line569)"></a>
-<a name="(line570)"></a><a name="mixed"></a>mixed <font color=Red>::</font> XParser Mixed
-<a name="(line571)"></a>mixed <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line572)"></a>    tok TokBraOpen
-<a name="(line573)"></a>    peRef <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokHash
-<a name="(line574)"></a>              word <font color=Magenta>"PCDATA"</font><font color=Cyan>)</font>
-<a name="(line575)"></a>    commit <font color=Cyan>$</font>
-<a name="(line576)"></a>      oneOf <font color=Red>[</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> cs <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokPipe
-<a name="(line577)"></a>                                         peRef name<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line578)"></a>                   blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>&gt;&gt;</font> tok TokStar<font color=Cyan>)</font>
-<a name="(line579)"></a>                   return <font color=Cyan>(</font>PCDATAplus cs<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line580)"></a>            <font color=Cyan>,</font> <font color=Cyan>(</font> blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>&gt;&gt;</font> tok TokStar<font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return PCDATA<font color=Cyan>)</font>
-<a name="(line581)"></a>            <font color=Cyan>,</font> <font color=Cyan>(</font> blank <font color=Cyan>(</font>tok TokBraClose<font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return PCDATA<font color=Cyan>)</font>
-<a name="(line582)"></a>            <font color=Red>]</font>
-<a name="(line583)"></a>        <font color=Cyan>`adjustErrP`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Magenta>"\nLooking for mixed content spec (#PCDATA | ...)*\n"</font><font color=Cyan>)</font>
-<a name="(line584)"></a>
-<a name="(line585)"></a><a name="attlistdecl"></a>attlistdecl <font color=Red>::</font> XParser AttListDecl
-<a name="(line586)"></a>attlistdecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line587)"></a>    tok TokSpecialOpen
-<a name="(line588)"></a>    tok <font color=Cyan>(</font>TokSpecial ATTLISTx<font color=Cyan>)</font>
-<a name="(line589)"></a>    n <font color=Red>&lt;-</font> peRef name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"expecting identifier in ATTLIST\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line590)"></a>    ds <font color=Red>&lt;-</font> peRef <font color=Cyan>(</font>many1 <font color=Cyan>(</font>peRef attdef<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line591)"></a>    blank <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing &gt; terminating ATTLIST"</font>
-<a name="(line592)"></a>    return <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font>
-<a name="(line593)"></a>
-<a name="(line594)"></a><a name="attdef"></a>attdef <font color=Red>::</font> XParser AttDef
-<a name="(line595)"></a>attdef <font color=Red>=</font>
-<a name="(line596)"></a>  <font color=Green><u>do</u></font> n <font color=Red>&lt;-</font> peRef name <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"expecting attribute name\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line597)"></a>     t <font color=Red>&lt;-</font> peRef atttype <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"within attlist defn: "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line598)"></a>     d <font color=Red>&lt;-</font> peRef defaultdecl <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in attlist defn: "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line599)"></a>     return <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>
-<a name="(line600)"></a>
-<a name="(line601)"></a><a name="atttype"></a>atttype <font color=Red>::</font> XParser AttType
-<a name="(line602)"></a>atttype <font color=Red>=</font>
-<a name="(line603)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"CDATA"</font><font color=Cyan>,</font>      word <font color=Magenta>"CDATA"</font> <font color=Cyan>&gt;&gt;</font> return StringType<font color=Cyan>)</font>
-<a name="(line604)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tokenized"</font><font color=Cyan>,</font>  tokenizedtype <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> TokenizedType<font color=Cyan>)</font>
-<a name="(line605)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"enumerated"</font><font color=Cyan>,</font> enumeratedtype <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EnumeratedType<font color=Cyan>)</font>
-<a name="(line606)"></a>           <font color=Red>]</font>
-<a name="(line607)"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for ATTTYPE,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line608)"></a> <font color=Blue>--   `adjustErr` (++"\nLooking for ATTTYPE (CDATA, tokenized, or enumerated")</font>
-<a name="(line609)"></a>
-<a name="(line610)"></a><a name="tokenizedtype"></a>tokenizedtype <font color=Red>::</font> XParser TokenizedType
-<a name="(line611)"></a>tokenizedtype <font color=Red>=</font>
-<a name="(line612)"></a>    oneOf <font color=Red>[</font> <font color=Cyan>(</font> word <font color=Magenta>"ID"</font> <font color=Cyan>&gt;&gt;</font> return ID<font color=Cyan>)</font>
-<a name="(line613)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"IDREF"</font> <font color=Cyan>&gt;&gt;</font> return IDREF<font color=Cyan>)</font>
-<a name="(line614)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"IDREFS"</font> <font color=Cyan>&gt;&gt;</font> return IDREFS<font color=Cyan>)</font>
-<a name="(line615)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"ENTITY"</font> <font color=Cyan>&gt;&gt;</font> return ENTITY<font color=Cyan>)</font>
-<a name="(line616)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"ENTITIES"</font> <font color=Cyan>&gt;&gt;</font> return ENTITIES<font color=Cyan>)</font>
-<a name="(line617)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"NMTOKEN"</font> <font color=Cyan>&gt;&gt;</font> return NMTOKEN<font color=Cyan>)</font>
-<a name="(line618)"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"NMTOKENS"</font> <font color=Cyan>&gt;&gt;</font> return NMTOKENS<font color=Cyan>)</font>
-<a name="(line619)"></a>          <font color=Red>]</font> <font color=Cyan>`onFail`</font>
-<a name="(line620)"></a>    <font color=Green><u>do</u></font> <font color=Cyan>{</font> t <font color=Red>&lt;-</font> next
-<a name="(line621)"></a>       <font color=Cyan>;</font> failP <font color=Cyan>(</font><font color=Magenta>"Expected one of"</font>
-<a name="(line622)"></a>               <font color=Cyan>++</font><font color=Magenta>" (ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, NMTOKENS)"</font>
-<a name="(line623)"></a>               <font color=Cyan>++</font><font color=Magenta>"\nbut got "</font><font color=Cyan>++</font>show t<font color=Cyan>)</font>
-<a name="(line624)"></a>       <font color=Cyan>}</font>
-<a name="(line625)"></a><font color=Blue>-- `adjustErr` (++"\nLooking for a tokenized type:\n\ </font>
-<a name="(line626)"></a><font color=Blue>-- \    (ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, NMTOKENS)")</font>
-<a name="(line627)"></a>
-<a name="(line628)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Red>::</font> XParser EnumeratedType
-<a name="(line629)"></a>enumeratedtype <font color=Red>=</font>
-<a name="(line630)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"NOTATION"</font><font color=Cyan>,</font>   notationtype <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> NotationType<font color=Cyan>)</font>
-<a name="(line631)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"enumerated"</font><font color=Cyan>,</font> enumeration <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Enumeration<font color=Cyan>)</font>
-<a name="(line632)"></a>           <font color=Red>]</font>
-<a name="(line633)"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for an enumerated or NOTATION type,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line634)"></a>
-<a name="(line635)"></a><a name="notationtype"></a>notationtype <font color=Red>::</font> XParser NotationType
-<a name="(line636)"></a>notationtype <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line637)"></a>    word <font color=Magenta>"NOTATION"</font>
-<a name="(line638)"></a>    bracket <font color=Cyan>(</font>tok TokBraOpen<font color=Cyan>)</font> <font color=Cyan>(</font>blank <font color=Cyan>(</font>tok TokBraClose<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line639)"></a>            <font color=Cyan>(</font>peRef name <font color=Cyan>`sepBy1`</font> peRef <font color=Cyan>(</font>tok TokPipe<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line640)"></a>
-<a name="(line641)"></a><a name="enumeration"></a>enumeration <font color=Red>::</font> XParser Enumeration
-<a name="(line642)"></a>enumeration <font color=Red>=</font>
-<a name="(line643)"></a>    bracket <font color=Cyan>(</font>tok TokBraOpen<font color=Cyan>)</font> <font color=Cyan>(</font>blank <font color=Cyan>(</font>tok TokBraClose<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line644)"></a>            <font color=Cyan>(</font>peRef nmtoken <font color=Cyan>`sepBy1`</font> blank <font color=Cyan>(</font>peRef <font color=Cyan>(</font>tok TokPipe<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line645)"></a>
-<a name="(line646)"></a><a name="defaultdecl"></a>defaultdecl <font color=Red>::</font> XParser DefaultDecl
-<a name="(line647)"></a>defaultdecl <font color=Red>=</font>
-<a name="(line648)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"REQUIRED"</font><font color=Cyan>,</font>  tok TokHash <font color=Cyan>&gt;&gt;</font> word <font color=Magenta>"REQUIRED"</font> <font color=Cyan>&gt;&gt;</font> return REQUIRED<font color=Cyan>)</font>
-<a name="(line649)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"IMPLIED"</font><font color=Cyan>,</font>   tok TokHash <font color=Cyan>&gt;&gt;</font> word <font color=Magenta>"IMPLIED"</font> <font color=Cyan>&gt;&gt;</font> return IMPLIED<font color=Cyan>)</font>
-<a name="(line650)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"FIXED"</font><font color=Cyan>,</font>     <font color=Green><u>do</u></font> f <font color=Red>&lt;-</font> maybe <font color=Cyan>(</font>tok TokHash <font color=Cyan>&gt;&gt;</font> word <font color=Magenta>"FIXED"</font>
-<a name="(line651)"></a>                                                      <font color=Cyan>&gt;&gt;</font> return FIXED<font color=Cyan>)</font>
-<a name="(line652)"></a>                              a <font color=Red>&lt;-</font> peRef attvalue
-<a name="(line653)"></a>                              return <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font> <font color=Cyan>)</font>
-<a name="(line654)"></a>           <font color=Red>]</font>
-<a name="(line655)"></a>        <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for an attribute default decl,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line656)"></a><font color=Blue>--      `adjustErr` (++"\nLooking for an attribute default decl:\n\ </font>
-<a name="(line657)"></a><font color=Blue>-- \    (REQUIRED, IMPLIED, FIXED)")</font>
-<a name="(line658)"></a>
-<a name="(line659)"></a><a name="conditionalsect"></a>conditionalsect <font color=Red>::</font> XParser ConditionalSect
-<a name="(line660)"></a>conditionalsect <font color=Red>=</font> oneOf'
-<a name="(line661)"></a>    <font color=Red>[</font> <font color=Cyan>(</font> <font color=Magenta>"INCLUDE"</font>
-<a name="(line662)"></a>      <font color=Cyan>,</font> <font color=Green><u>do</u></font> tok TokSectionOpen
-<a name="(line663)"></a>           peRef <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection INCLUDEx<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line664)"></a>           p <font color=Red>&lt;-</font> posn
-<a name="(line665)"></a>           tok TokSqOpen <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing [ after INCLUDE"</font>
-<a name="(line666)"></a>           i <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef extsubsetdecl<font color=Cyan>)</font>
-<a name="(line667)"></a>           tok TokSectionClose
-<a name="(line668)"></a>                   <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"missing ]]&gt; for INCLUDE section"</font>
-<a name="(line669)"></a>                                     <font color=Cyan>++</font><font color=Magenta>"\n    begun at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
-<a name="(line670)"></a>           return <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line671)"></a>    <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"IGNORE"</font>
-<a name="(line672)"></a>      <font color=Cyan>,</font> <font color=Green><u>do</u></font> tok TokSectionOpen
-<a name="(line673)"></a>           peRef <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection IGNOREx<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line674)"></a>           p <font color=Red>&lt;-</font> posn
-<a name="(line675)"></a>           tok TokSqOpen <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing [ after IGNORE"</font>
-<a name="(line676)"></a>           i <font color=Red>&lt;-</font> many newIgnore  <font color=Blue>-- many ignoresectcontents</font>
-<a name="(line677)"></a>           tok TokSectionClose
-<a name="(line678)"></a>                   <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"missing ]]&gt; for IGNORE section"</font>
-<a name="(line679)"></a>                                     <font color=Cyan>++</font><font color=Magenta>"\n    begun at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
-<a name="(line680)"></a>           return <font color=Cyan>(</font>IgnoreSect []<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line681)"></a>    <font color=Red>]</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"in a conditional section,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line682)"></a>
-<a name="(line683)"></a><a name="newIgnore"></a>newIgnore <font color=Red>::</font> XParser Ignore
-<a name="(line684)"></a>newIgnore <font color=Red>=</font>
-<a name="(line685)"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokSectionOpen
-<a name="(line686)"></a>         many newIgnore <font color=Cyan>`debug`</font> <font color=Magenta>"IGNORING conditional section"</font>
-<a name="(line687)"></a>         tok TokSectionClose
-<a name="(line688)"></a>         return Ignore <font color=Cyan>`debug`</font> <font color=Magenta>"end of IGNORED conditional section"</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line689)"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> t <font color=Red>&lt;-</font> nottok <font color=Red>[</font>TokSectionOpen<font color=Cyan>,</font>TokSectionClose<font color=Red>]</font>
-<a name="(line690)"></a>         return Ignore  <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ignoring: "</font><font color=Cyan>++</font>show t<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line691)"></a>
-<a name="(line692)"></a><a name="ignoresectcontents"></a><font color=Blue>--- obsolete?</font>
-<a name="(line693)"></a>ignoresectcontents <font color=Red>::</font> XParser IgnoreSectContents
-<a name="(line694)"></a>ignoresectcontents <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line695)"></a>    i <font color=Red>&lt;-</font> ignore
-<a name="(line696)"></a>    is <font color=Red>&lt;-</font> many <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokSectionOpen
-<a name="(line697)"></a>                   ic <font color=Red>&lt;-</font> ignoresectcontents
-<a name="(line698)"></a>                   tok TokSectionClose
-<a name="(line699)"></a>                   ig <font color=Red>&lt;-</font> ignore
-<a name="(line700)"></a>                   return <font color=Cyan>(</font>ic<font color=Cyan>,</font>ig<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line701)"></a>    return <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>
-<a name="(line702)"></a>
-<a name="(line703)"></a><a name="ignore"></a>ignore <font color=Red>::</font> XParser Ignore
-<a name="(line704)"></a>ignore <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line705)"></a>  is <font color=Red>&lt;-</font> many1 <font color=Cyan>(</font>nottok <font color=Red>[</font>TokSectionOpen<font color=Cyan>,</font>TokSectionClose<font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line706)"></a>  return Ignore  <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ignored all of: "</font><font color=Cyan>++</font>show is<font color=Cyan>)</font>
-<a name="(line707)"></a><font color=Blue>----</font>
-<a name="(line708)"></a>
-<a name="(line709)"></a><a name="reference"></a><font color=Blue>-- | Return either a general entity reference, or a character reference.</font>
-<a name="(line710)"></a>reference <font color=Red>::</font> XParser Reference
-<a name="(line711)"></a>reference <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line712)"></a>    bracket <font color=Cyan>(</font>tok TokAmp<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSemi<font color=Cyan>)</font> <font color=Cyan>(</font>freetext <font color=Cyan>&gt;&gt;=</font> val<font color=Cyan>)</font>
-<a name="(line713)"></a>  <font color=Green><u>where</u></font>
-<a name="(line714)"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font><font color=Magenta>'x'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font> <font color=Red>|</font> all isHexDigit i
-<a name="(line715)"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readHex <font color=Cyan>$</font> i
-<a name="(line716)"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font>     <font color=Red>|</font> all isDigit i
-<a name="(line717)"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readDec <font color=Cyan>$</font> i
-<a name="(line718)"></a>    val name        <font color=Red>=</font> return <font color=Cyan>.</font> RefEntity <font color=Cyan>$</font> name
-<a name="(line719)"></a>
-<a name="(line720)"></a><font color=Blue>{- -- following is incorrect
-<a name="(line721)"></a>reference =
-<a name="(line722)"></a>    ( charref &gt;&gt;= return . RefChar) `onFail`
-<a name="(line723)"></a>    ( entityref &gt;&gt;= return . RefEntity)
-<a name="(line724)"></a>
-<a name="(line725)"></a>entityref :: XParser EntityRef
-<a name="(line726)"></a>entityref = do
-<a name="(line727)"></a>    bracket (tok TokAmp) (tok TokSemi) name
-<a name="(line728)"></a>
-<a name="(line729)"></a>charref :: XParser CharRef
-<a name="(line730)"></a>charref = do
-<a name="(line731)"></a>    bracket (tok TokAmp) (tok TokSemi) (freetext &gt;&gt;= readCharVal)
-<a name="(line732)"></a>  where
-<a name="(line733)"></a>    readCharVal ('#':'x':i) = return . fst . head . readHex $ i
-<a name="(line734)"></a>    readCharVal ('#':i)     = return . fst . head . readDec $ i
-<a name="(line735)"></a>    readCharVal _           = mzero
-<a name="(line736)"></a>-}</font>
-<a name="(line737)"></a>
-<a name="(line738)"></a><a name="pereference"></a>pereference <font color=Red>::</font> XParser PEReference
-<a name="(line739)"></a>pereference <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line740)"></a>    bracket <font color=Cyan>(</font>tok TokPercent<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSemi<font color=Cyan>)</font> nmtoken
-<a name="(line741)"></a>
-<a name="(line742)"></a><a name="entitydecl"></a>entitydecl <font color=Red>::</font> XParser EntityDecl
-<a name="(line743)"></a>entitydecl <font color=Red>=</font>
-<a name="(line744)"></a>    <font color=Cyan>(</font> gedecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EntityGEDecl<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line745)"></a>    <font color=Cyan>(</font> pedecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EntityPEDecl<font color=Cyan>)</font>
-<a name="(line746)"></a>
-<a name="(line747)"></a><a name="gedecl"></a>gedecl <font color=Red>::</font> XParser GEDecl
-<a name="(line748)"></a>gedecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line749)"></a>    tok TokSpecialOpen
-<a name="(line750)"></a>    tok <font color=Cyan>(</font>TokSpecial ENTITYx<font color=Cyan>)</font>
-<a name="(line751)"></a>    n <font color=Red>&lt;-</font> name
-<a name="(line752)"></a>    e <font color=Red>&lt;-</font> entitydef <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in general entity defn "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line753)"></a>    tok TokAnyClose <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating G ENTITY decl "</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
-<a name="(line754)"></a>    stUpdate <font color=Cyan>(</font>addGE n e<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"added GE defn &amp;"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
-<a name="(line755)"></a>    return <font color=Cyan>(</font>GEDecl n e<font color=Cyan>)</font>
-<a name="(line756)"></a>
-<a name="(line757)"></a><a name="pedecl"></a>pedecl <font color=Red>::</font> XParser PEDecl
-<a name="(line758)"></a>pedecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line759)"></a>    tok TokSpecialOpen
-<a name="(line760)"></a>    tok <font color=Cyan>(</font>TokSpecial ENTITYx<font color=Cyan>)</font>
-<a name="(line761)"></a>    tok TokPercent
-<a name="(line762)"></a>    n <font color=Red>&lt;-</font> name
-<a name="(line763)"></a>    e <font color=Red>&lt;-</font> pedef <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in parameter entity defn "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line764)"></a>    tok TokAnyClose <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating P ENTITY decl "</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
-<a name="(line765)"></a>    stUpdate <font color=Cyan>(</font>addPE n e<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"added PE defn %"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";\n"</font><font color=Cyan>++</font>show e<font color=Cyan>)</font>
-<a name="(line766)"></a>    return <font color=Cyan>(</font>PEDecl n e<font color=Cyan>)</font>
-<a name="(line767)"></a>
-<a name="(line768)"></a><a name="entitydef"></a>entitydef <font color=Red>::</font> XParser EntityDef
-<a name="(line769)"></a>entitydef <font color=Red>=</font>
-<a name="(line770)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"entityvalue"</font><font color=Cyan>,</font> entityvalue <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> DefEntityValue<font color=Cyan>)</font>
-<a name="(line771)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"external"</font><font color=Cyan>,</font>    <font color=Green><u>do</u></font> eid <font color=Red>&lt;-</font> externalid
-<a name="(line772)"></a>                                ndd <font color=Red>&lt;-</font> maybe ndatadecl
-<a name="(line773)"></a>                                return <font color=Cyan>(</font>DefExternalID eid ndd<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line774)"></a>           <font color=Red>]</font>
-<a name="(line775)"></a>
-<a name="(line776)"></a><a name="pedef"></a>pedef <font color=Red>::</font> XParser PEDef
-<a name="(line777)"></a>pedef <font color=Red>=</font>
-<a name="(line778)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"entityvalue"</font><font color=Cyan>,</font> entityvalue <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PEDefEntityValue<font color=Cyan>)</font>
-<a name="(line779)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"externalid"</font><font color=Cyan>,</font>  externalid  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PEDefExternalID<font color=Cyan>)</font>
-<a name="(line780)"></a>           <font color=Red>]</font>
-<a name="(line781)"></a>
-<a name="(line782)"></a><a name="externalid"></a>externalid <font color=Red>::</font> XParser ExternalID
-<a name="(line783)"></a>externalid <font color=Red>=</font>
-<a name="(line784)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"SYSTEM"</font><font color=Cyan>,</font> <font color=Green><u>do</u></font> word <font color=Magenta>"SYSTEM"</font>
-<a name="(line785)"></a>                           s <font color=Red>&lt;-</font> systemliteral
-<a name="(line786)"></a>                           return <font color=Cyan>(</font>SYSTEM s<font color=Cyan>)</font> <font color=Cyan>)</font>
-<a name="(line787)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"PUBLIC"</font><font color=Cyan>,</font> <font color=Green><u>do</u></font> word <font color=Magenta>"PUBLIC"</font>
-<a name="(line788)"></a>                           p <font color=Red>&lt;-</font> pubidliteral
-<a name="(line789)"></a>                           s <font color=Red>&lt;-</font> systemliteral
-<a name="(line790)"></a>                           return <font color=Cyan>(</font>PUBLIC p s<font color=Cyan>)</font> <font color=Cyan>)</font>
-<a name="(line791)"></a>           <font color=Red>]</font>
-<a name="(line792)"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for an external id,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line793)"></a>
-<a name="(line794)"></a><a name="ndatadecl"></a>ndatadecl <font color=Red>::</font> XParser NDataDecl
-<a name="(line795)"></a>ndatadecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line796)"></a>    word <font color=Magenta>"NDATA"</font>
-<a name="(line797)"></a>    n <font color=Red>&lt;-</font> name
-<a name="(line798)"></a>    return <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>
-<a name="(line799)"></a>
-<a name="(line800)"></a><a name="textdecl"></a>textdecl <font color=Red>::</font> XParser TextDecl
-<a name="(line801)"></a>textdecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line802)"></a>    tok TokPIOpen
-<a name="(line803)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
-<a name="(line804)"></a>    v <font color=Red>&lt;-</font> maybe versioninfo
-<a name="(line805)"></a>    e <font color=Red>&lt;-</font> encodingdecl
-<a name="(line806)"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failP <font color=Magenta>"expected ?&gt; terminating text decl"</font>
-<a name="(line807)"></a>    return <font color=Cyan>(</font>TextDecl v e<font color=Cyan>)</font>
-<a name="(line808)"></a>
-<a name="(line809)"></a><a name="extparsedent"></a>extparsedent <font color=Red>::</font> XParser <font color=Cyan>(</font>ExtParsedEnt Posn<font color=Cyan>)</font>
-<a name="(line810)"></a>extparsedent <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line811)"></a>    t <font color=Red>&lt;-</font> maybe textdecl
-<a name="(line812)"></a>    c <font color=Red>&lt;-</font> content
-<a name="(line813)"></a>    return <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font>
-<a name="(line814)"></a>
-<a name="(line815)"></a><a name="extpe"></a>extpe <font color=Red>::</font> XParser ExtPE
-<a name="(line816)"></a>extpe <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line817)"></a>    t <font color=Red>&lt;-</font> maybe textdecl
-<a name="(line818)"></a>    e <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef extsubsetdecl<font color=Cyan>)</font>
-<a name="(line819)"></a>    return <font color=Cyan>(</font>ExtPE t e<font color=Cyan>)</font>
-<a name="(line820)"></a>
-<a name="(line821)"></a><a name="encodingdecl"></a>encodingdecl <font color=Red>::</font> XParser EncodingDecl
-<a name="(line822)"></a>encodingdecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line823)"></a>    <font color=Cyan>(</font>word <font color=Magenta>"encoding"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"ENCODING"</font><font color=Cyan>)</font>
-<a name="(line824)"></a>    tok TokEqual <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"expected = in 'encoding' decl"</font>
-<a name="(line825)"></a>    f <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line826)"></a>    return <font color=Cyan>(</font>EncodingDecl f<font color=Cyan>)</font>
-<a name="(line827)"></a>
-<a name="(line828)"></a><a name="notationdecl"></a>notationdecl <font color=Red>::</font> XParser NotationDecl
-<a name="(line829)"></a>notationdecl <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line830)"></a>    tok TokSpecialOpen
-<a name="(line831)"></a>    tok <font color=Cyan>(</font>TokSpecial NOTATIONx<font color=Cyan>)</font>
-<a name="(line832)"></a>    n <font color=Red>&lt;-</font> name
-<a name="(line833)"></a>    e <font color=Red>&lt;-</font> either externalid publicid
-<a name="(line834)"></a>    tok TokAnyClose <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating NOTATION decl "</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
-<a name="(line835)"></a>    return <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>
-<a name="(line836)"></a>
-<a name="(line837)"></a><a name="publicid"></a>publicid <font color=Red>::</font> XParser PublicID
-<a name="(line838)"></a>publicid <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line839)"></a>    word <font color=Magenta>"PUBLIC"</font>
-<a name="(line840)"></a>    p <font color=Red>&lt;-</font> pubidliteral
-<a name="(line841)"></a>    return <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>
-<a name="(line842)"></a>
-<a name="(line843)"></a><a name="entityvalue"></a>entityvalue <font color=Red>::</font> XParser EntityValue
-<a name="(line844)"></a>entityvalue <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line845)"></a> <font color=Blue>-- evs &lt;- bracket (tok TokQuote) (tok TokQuote) (many (peRef ev))</font>
-<a name="(line846)"></a>    tok TokQuote
-<a name="(line847)"></a>    pn <font color=Red>&lt;-</font> posn
-<a name="(line848)"></a>    evs <font color=Red>&lt;-</font> many ev
-<a name="(line849)"></a>    tok TokQuote <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"expected quote to terminate entityvalue"</font>
-<a name="(line850)"></a>    <font color=Blue>-- quoted text must be rescanned for possible PERefs</font>
-<a name="(line851)"></a>    st <font color=Red>&lt;-</font> stGet
-<a name="(line852)"></a> <font color=Blue>-- Prelude.either failBad (return . EntityValue) . fst3 $</font>
-<a name="(line853)"></a>    return <font color=Cyan>.</font> EntityValue <font color=Cyan>.</font> fst3 <font color=Cyan>$</font>
-<a name="(line854)"></a>                <font color=Cyan>(</font>runParser <font color=Cyan>(</font>many ev<font color=Cyan>)</font> st
-<a name="(line855)"></a>                         <font color=Cyan>(</font>reLexEntityValue <font color=Cyan>(</font><font color=Red>\</font>s<font color=Red>-&gt;</font> stringify <font color=Cyan>(</font>lookupPE s st<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line856)"></a>                                           pn
-<a name="(line857)"></a>                                           <font color=Cyan>(</font>flattenEV <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line858)"></a>  <font color=Green><u>where</u></font>
-<a name="(line859)"></a>    stringify <font color=Cyan>(</font>Just <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> Just <font color=Cyan>(</font>flattenEV ev<font color=Cyan>)</font>
-<a name="(line860)"></a>    stringify <font color=Green><u>_</u></font> <font color=Red>=</font> Nothing
-<a name="(line861)"></a>
-<a name="(line862)"></a><a name="ev"></a>ev <font color=Red>::</font> XParser EV
-<a name="(line863)"></a>ev <font color=Red>=</font>
-<a name="(line864)"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"string"</font><font color=Cyan>,</font>    <font color=Cyan>(</font>string<font color=Cyan>`onFail`</font>freetext<font color=Cyan>)</font> <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVString<font color=Cyan>)</font>
-<a name="(line865)"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"reference"</font><font color=Cyan>,</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVRef<font color=Cyan>)</font>
-<a name="(line866)"></a>           <font color=Red>]</font>
-<a name="(line867)"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for entity value,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line868)"></a>
-<a name="(line869)"></a><a name="attvalue"></a>attvalue <font color=Red>::</font> XParser AttValue
-<a name="(line870)"></a>attvalue <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line871)"></a>    avs <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
-<a name="(line872)"></a>                   <font color=Cyan>(</font>many <font color=Cyan>(</font>either freetext reference<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line873)"></a>    return <font color=Cyan>(</font>AttValue avs<font color=Cyan>)</font>
-<a name="(line874)"></a>
-<a name="(line875)"></a><a name="systemliteral"></a>systemliteral <font color=Red>::</font> XParser SystemLiteral
-<a name="(line876)"></a>systemliteral <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line877)"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line878)"></a>    return <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>            <font color=Blue>-- note: refs &amp;...; not permitted</font>
-<a name="(line879)"></a>
-<a name="(line880)"></a><a name="pubidliteral"></a>pubidliteral <font color=Red>::</font> XParser PubidLiteral
-<a name="(line881)"></a>pubidliteral <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line882)"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
-<a name="(line883)"></a>    return <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>             <font color=Blue>-- note: freetext is too liberal here</font>
-<a name="(line884)"></a>
-<a name="(line885)"></a><a name="chardata"></a><font color=Blue>-- | Return parsed freetext (i.e. until the next markup)</font>
-<a name="(line886)"></a>chardata <font color=Red>::</font> XParser CharData
-<a name="(line887)"></a>chardata <font color=Red>=</font> freetext
-<a name="(line888)"></a>
-</pre>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/ParseLazy.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | A non-validating XML parser.  For the input grammar, see</font>
+<a name="line-2"></a><font color=Blue>--   &lt;<a href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</a>&gt;.</font>
+<a name="line-3"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ParseLazy
+<a name="line-4"></a>  <font color=Cyan>(</font>
+<a name="line-5"></a>  <font color=Blue>-- * Parse a whole document</font>
+<a name="line-6"></a>    xmlParse  <font color=Blue>-- , xmlParse'</font>
+<a name="line-7"></a>  <font color=Blue>-- * Parse just a DTD</font>
+<a name="line-8"></a>  <font color=Cyan>,</font> dtdParse  <font color=Blue>-- , dtdParse'</font>
+<a name="line-9"></a>  <font color=Blue>-- * Parse a partial document</font>
+<a name="line-10"></a>  <font color=Cyan>,</font> xmlParseWith
+<a name="line-11"></a>  <font color=Blue>-- * Individual parsers for use with /xmlParseWith/ and module SAX</font>
+<a name="line-12"></a>  <font color=Cyan>,</font> document<font color=Cyan>,</font> element<font color=Cyan>,</font> content
+<a name="line-13"></a>  <font color=Cyan>,</font> comment<font color=Cyan>,</font> chardata
+<a name="line-14"></a>  <font color=Cyan>,</font> reference<font color=Cyan>,</font> doctypedecl
+<a name="line-15"></a>  <font color=Cyan>,</font> processinginstruction
+<a name="line-16"></a>  <font color=Cyan>,</font> elemtag<font color=Cyan>,</font> name<font color=Cyan>,</font> tok
+<a name="line-17"></a>  <font color=Cyan>,</font> elemOpenTag<font color=Cyan>,</font> elemCloseTag
+<a name="line-18"></a>  <font color=Cyan>,</font> emptySTs<font color=Cyan>,</font> XParser
+<a name="line-19"></a>  <font color=Blue>-- * These general utility functions don't belong here</font>
+<a name="line-20"></a>  <font color=Cyan>,</font> fst3<font color=Cyan>,</font> snd3<font color=Cyan>,</font> thd3
+<a name="line-21"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-22"></a>
+<a name="line-23"></a><font color=Blue>-- An XML parser, written using a slightly extended version of the</font>
+<a name="line-24"></a><font color=Blue>-- Hutton/Meijer parser combinators.  The input is tokenised internally</font>
+<a name="line-25"></a><font color=Blue>-- by the lexer xmlLex.  Whilst parsing, we gather a symbol</font>
+<a name="line-26"></a><font color=Blue>-- table of entity references.  PERefs must be defined before use, so we</font>
+<a name="line-27"></a><font color=Blue>-- expand their uses as we encounter them, forcing the remainder of the</font>
+<a name="line-28"></a><font color=Blue>-- input to be re-lexed and re-parsed.  GERefs are simply stored for</font>
+<a name="line-29"></a><font color=Blue>-- later retrieval.</font>
+<a name="line-30"></a>
+<a name="line-31"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>either<font color=Cyan>,</font>maybe<font color=Cyan>,</font>sequence<font color=Cyan>,</font>catch<font color=Cyan>)</font>
+<a name="line-32"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Prelude <font color=Cyan>(</font>either<font color=Cyan>)</font>
+<a name="line-33"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
+<a name="line-34"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font>       <font color=Blue>-- debugging only</font>
+<a name="line-35"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>isSpace<font color=Cyan>,</font>isDigit<font color=Cyan>,</font>isHexDigit<font color=Cyan>)</font>
+<a name="line-36"></a><font color=Green><u>import</u></font> Monad hiding <font color=Cyan>(</font>sequence<font color=Cyan>)</font>
+<a name="line-37"></a><font color=Green><u>import</u></font> Numeric <font color=Cyan>(</font>readDec<font color=Cyan>,</font>readHex<font color=Cyan>)</font>
+<a name="line-38"></a><font color=Blue>--import Control.Exception (catch)</font>
+<a name="line-39"></a>
+<a name="line-40"></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="line-41"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn
+<a name="line-42"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Lex
+<a name="line-43"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly<font color=Cyan>.</font>NoLeak<font color=Cyan>.</font>StateLazy
+<a name="line-44"></a>
+<a name="line-45"></a><font color=Green><u>import</u></font> System<font color=Cyan>.</font>FilePath <font color=Cyan>(</font>combine<font color=Cyan>,</font> dropFileName<font color=Cyan>)</font>
+<a name="line-46"></a>
+<a name="line-47"></a>
+<a name="line-48"></a><font color=Magenta><em>#if ( defined(__GLASGOW_HASKELL__) &amp;&amp; __GLASGOW_HASKELL__ &gt; 502 ) || \</em></font>
+<a name="line-49"></a>    <font color=Cyan>(</font> defined<font color=Cyan>(</font><b><font color=Magenta>__NHC__</font></b><font color=Cyan>)</font> <font color=Cyan>&amp;&amp;</font> <b><font color=Magenta>__NHC__</font></b> <font color=Cyan>&gt;</font> <font color=Magenta>114</font> <font color=Cyan>)</font> <font color=Cyan>||</font> defined<font color=Cyan>(</font><b><font color=Magenta>__HUGS__</font></b><font color=Cyan>)</font>
+<a name="line-50"></a><font color=Green><u>import</u></font> System<font color=Cyan>.</font>IO<font color=Cyan>.</font>Unsafe <font color=Cyan>(</font>unsafePerformIO<font color=Cyan>)</font>
+<a name="line-51"></a><font color=Magenta><em>#elif defined(__GLASGOW_HASKELL__)</em></font>
+<a name="line-52"></a><font color=Green><u>import</u></font> IOExts <font color=Cyan>(</font>unsafePerformIO<font color=Cyan>)</font>
+<a name="line-53"></a><font color=Magenta><em>#elif defined(__NHC__)</em></font>
+<a name="line-54"></a><font color=Green><u>import</u></font> IOExtras <font color=Cyan>(</font>unsafePerformIO<font color=Cyan>)</font>
+<a name="line-55"></a><font color=Magenta><em>#elif defined(__HBC__)</em></font>
+<a name="line-56"></a><font color=Green><u>import</u></font> UnsafePerformIO
+<a name="line-57"></a><font color=Magenta><em>#endif</em></font>
+<a name="line-58"></a>
+<a name="line-59"></a><font color=Blue>--  #define DEBUG</font>
+<a name="line-60"></a>
+<a name="line-61"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>
+<a name="line-62"></a><font color=Magenta><em>#  if ( defined(__GLASGOW_HASKELL__) &amp;&amp; __GLASGOW_HASKELL__ &gt; 502 ) || \</em></font>
+<a name="line-63"></a>      <font color=Cyan>(</font> defined<font color=Cyan>(</font><b><font color=Magenta>__NHC__</font></b><font color=Cyan>)</font> <font color=Cyan>&amp;&amp;</font> <b><font color=Magenta>__NHC__</font></b> <font color=Cyan>&gt;</font> <font color=Magenta>114</font> <font color=Cyan>)</font> <font color=Cyan>||</font> defined<font color=Cyan>(</font><b><font color=Magenta>__HUGS__</font></b><font color=Cyan>)</font>
+<a name="line-64"></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="line-65"></a><font color=Magenta><em>#  elif defined(__GLASGOW_HASKELL__)</em></font>
+<a name="line-66"></a><font color=Green><u>import</u></font> IOExts<font color=Cyan>(</font>trace<font color=Cyan>)</font>
+<a name="line-67"></a><font color=Magenta><em>#  elif defined(__NHC__) || defined(__HBC__)</em></font>
+<a name="line-68"></a><font color=Green><u>import</u></font> NonStdTrace
+<a name="line-69"></a><font color=Magenta><em>#  endif</em></font>
+<a name="line-70"></a><a name="debug"></a><font color=Blue>debug</font> <font color=Red>::</font> a <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> a
+<a name="line-71"></a><a name="debug"></a><font color=Blue>v</font> <font color=Cyan>`debug`</font> s <font color=Red>=</font> trace s v
+<a name="line-72"></a><font color=Magenta><em>#else</em></font>
+<a name="line-73"></a><a name="debug"></a><font color=Blue>v</font> <font color=Cyan>`debug`</font> s <font color=Red>=</font> v
+<a name="line-74"></a><font color=Magenta><em>#endif</em></font>
+<a name="line-75"></a>
+<a name="line-76"></a>
+<a name="line-77"></a><a name="xmlParse"></a><font color=Blue>-- | To parse a whole document, @xmlParse file content@ takes a filename</font>
+<a name="line-78"></a><font color=Blue>--   (for generating error reports) and the string content of that file.</font>
+<a name="line-79"></a><font color=Blue>--   A parse error causes program failure, with message to stderr.</font>
+<a name="line-80"></a><font color=Blue>xmlParse</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Document Posn
+<a name="line-81"></a>
+<a name="line-82"></a><font color=Blue>{-
+<a name="line-83"></a>-- | To parse a whole document, @xmlParse' file content@ takes a filename
+<a name="line-84"></a>--   (for generating error reports) and the string content of that file.
+<a name="line-85"></a>--   Any parse error message is passed back to the caller through the
+<a name="line-86"></a>--   @Either@ type.
+<a name="line-87"></a>xmlParse' :: String -&gt; String -&gt; Either String (Document Posn)
+<a name="line-88"></a>
+<a name="line-89"></a>-- | To parse just a DTD, @dtdParse file content@ takes a filename
+<a name="line-90"></a>--   (for generating error reports) and the string content of that
+<a name="line-91"></a>--   file.  If no DTD was found, you get @Nothing@ rather than an error.
+<a name="line-92"></a>--   However, if a DTD is found but contains errors, the program crashes.
+<a name="line-93"></a>dtdParse  :: String -&gt; String -&gt; Maybe DocTypeDecl
+<a name="line-94"></a>
+<a name="line-95"></a>-- | To parse just a DTD, @dtdParse' file content@ takes a filename
+<a name="line-96"></a>--   (for generating error reports) and the string content of that
+<a name="line-97"></a>--   file.  If no DTD was found, you get @Right Nothing@.
+<a name="line-98"></a>--   If a DTD was found but contains errors, you get a @Left message@.
+<a name="line-99"></a>dtdParse' :: String -&gt; String -&gt; Either String (Maybe DocTypeDecl)
+<a name="line-100"></a>
+<a name="line-101"></a>xmlParse' name inp = xmlParse name inp `catch` (Left . show)
+<a name="line-102"></a>dtdParse' name inp = dtdParse name inp `catch` (Left . show)
+<a name="line-103"></a>-}</font>
+<a name="line-104"></a>
+<a name="line-105"></a><font color=Blue>xmlParse</font>  name  <font color=Red>=</font> fst3 <font color=Cyan>.</font> runParser <font color=Cyan>(</font>toEOF document<font color=Cyan>)</font> emptySTs <font color=Cyan>.</font> xmlLex name
+<a name="line-106"></a><a name="dtdParse"></a><font color=Blue>dtdParse</font>  name  <font color=Red>=</font> fst3 <font color=Cyan>.</font> runParser justDTD  emptySTs <font color=Cyan>.</font> xmlLex name
+<a name="line-107"></a>
+<a name="line-108"></a>
+<a name="line-109"></a><a name="toEOF"></a><font color=Blue>toEOF</font> <font color=Red>=</font> id	<font color=Blue>-- there are other possible implementations...</font>
+<a name="line-110"></a>
+<a name="line-111"></a><a name="xmlParseWith"></a><font color=Blue>-- | To parse a partial document, e.g. from an XML-based stream protocol,</font>
+<a name="line-112"></a><font color=Blue>--   where you may later want to get more document elements from the same</font>
+<a name="line-113"></a><font color=Blue>--   stream.  Arguments are: a parser for the item you want, and the</font>
+<a name="line-114"></a><font color=Blue>--   already-lexed input to parse from.  Returns the item you wanted</font>
+<a name="line-115"></a><font color=Blue>--   (or an error message), plus the remainder of the input.</font>
+<a name="line-116"></a><font color=Blue>xmlParseWith</font> <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-117"></a>                <font color=Red>-&gt;</font> <font color=Cyan>(</font>Either String a<font color=Cyan>,</font> <font color=Red>[</font><font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-118"></a><font color=Blue>xmlParseWith</font> p <font color=Red>=</font> <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>v<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Red>-&gt;</font><font color=Cyan>(</font>Right v<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>.</font> runParser p emptySTs
+<a name="line-119"></a>
+<a name="line-120"></a>
+<a name="line-121"></a><font color=Blue>---- Symbol table stuff ----</font>
+<a name="line-122"></a>
+<a name="line-123"></a><a name="SymTabs"></a><font color=Green><u>type</u></font> SymTabs <font color=Red>=</font> <font color=Cyan>(</font>SymTab PEDef<font color=Cyan>,</font> SymTab EntityDef<font color=Cyan>)</font>
+<a name="line-124"></a>
+<a name="line-125"></a><a name="emptySTs"></a><font color=Blue>-- | Some empty symbol tables for GE and PE references.</font>
+<a name="line-126"></a><font color=Blue>emptySTs</font> <font color=Red>::</font> SymTabs
+<a name="line-127"></a><font color=Blue>emptySTs</font> <font color=Red>=</font> <font color=Cyan>(</font>emptyST<font color=Cyan>,</font> emptyST<font color=Cyan>)</font>
+<a name="line-128"></a>
+<a name="line-129"></a><a name="addPE"></a><font color=Blue>addPE</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> PEDef <font color=Red>-&gt;</font> SymTabs <font color=Red>-&gt;</font> SymTabs
+<a name="line-130"></a><font color=Blue>addPE</font> n v <font color=Cyan>(</font>pe<font color=Cyan>,</font>ge<font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font>addST n v pe<font color=Cyan>,</font> ge<font color=Cyan>)</font>
+<a name="line-131"></a>
+<a name="line-132"></a><a name="addGE"></a><font color=Blue>addGE</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> EntityDef <font color=Red>-&gt;</font> SymTabs <font color=Red>-&gt;</font> SymTabs
+<a name="line-133"></a><font color=Blue>addGE</font> n v <font color=Cyan>(</font>pe<font color=Cyan>,</font>ge<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>let</u></font> newge <font color=Red>=</font> addST n v ge <font color=Green><u>in</u></font> newge <font color=Cyan>`seq`</font> <font color=Cyan>(</font>pe<font color=Cyan>,</font> newge<font color=Cyan>)</font>
+<a name="line-134"></a>
+<a name="line-135"></a><a name="lookupPE"></a><font color=Blue>lookupPE</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> SymTabs <font color=Red>-&gt;</font> Maybe PEDef
+<a name="line-136"></a><font color=Blue>lookupPE</font> s <font color=Cyan>(</font>pe<font color=Cyan>,</font>ge<font color=Cyan>)</font> <font color=Red>=</font> lookupST s pe
+<a name="line-137"></a>
+<a name="line-138"></a><a name="flattenEV"></a><font color=Blue>flattenEV</font> <font color=Red>::</font> EntityValue <font color=Red>-&gt;</font> String
+<a name="line-139"></a><font color=Blue>flattenEV</font> <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font> <font color=Red>=</font> concatMap flatten evs
+<a name="line-140"></a>  <font color=Green><u>where</u></font>
+<a name="line-141"></a>    flatten <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>          <font color=Red>=</font> s
+<a name="line-142"></a>    flatten <font color=Cyan>(</font>EVRef <font color=Cyan>(</font>RefEntity r<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&amp;"</font> <font color=Cyan>++</font>r<font color=Cyan>++</font><font color=Magenta>";"</font>
+<a name="line-143"></a>    flatten <font color=Cyan>(</font>EVRef <font color=Cyan>(</font>RefChar r<font color=Cyan>)</font><font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&amp;#"</font><font color=Cyan>++</font>show r<font color=Cyan>++</font><font color=Magenta>";"</font>
+<a name="line-144"></a> <font color=Blue>-- flatten (EVPERef n)           = "%" ++n++";"</font>
+<a name="line-145"></a>
+<a name="line-146"></a>
+<a name="line-147"></a><a name="fst3"></a><font color=Blue>---- Misc ----</font>
+<a name="line-148"></a><font color=Blue>fst3</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>-&gt;</font> a
+<a name="line-149"></a><a name="snd3"></a><font color=Blue>snd3</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>-&gt;</font> b
+<a name="line-150"></a><a name="thd3"></a><font color=Blue>thd3</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>-&gt;</font> c
+<a name="line-151"></a>
+<a name="line-152"></a><font color=Blue>fst3</font> <font color=Cyan>(</font>a<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> a
+<a name="line-153"></a><font color=Blue>snd3</font> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> a
+<a name="line-154"></a><font color=Blue>thd3</font> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>,</font>a<font color=Cyan>)</font> <font color=Red>=</font> a
+<a name="line-155"></a>
+<a name="line-156"></a>
+<a name="line-157"></a><font color=Blue>---- Auxiliary Parsing Functions ----</font>
+<a name="line-158"></a>
+<a name="line-159"></a><a name="myBracket"></a><font color=Blue>-- | Parse a bracketed item, discarding the brackets AND NOT using adjustErrBad</font>
+<a name="line-160"></a><font color=Blue>myBracket</font> <font color=Red>::</font> PolyParse p <font color=Red>=&gt;</font> p bra <font color=Red>-&gt;</font> p ket <font color=Red>-&gt;</font> p a <font color=Red>-&gt;</font> p a
+<a name="line-161"></a><font color=Blue>myBracket</font> open close p <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-162"></a>    <font color=Green><u>do</u></font> <font color=Cyan>{</font> open    <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"Missing opening bracket:\n\t"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-163"></a>       <font color=Cyan>;</font> p <font color=Cyan>`discard`</font> <font color=Cyan>(</font>close <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"Missing closing bracket:\n\t"</font><font color=Cyan>++</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-164"></a>       <font color=Cyan>}</font>
+<a name="line-165"></a>
+<a name="line-166"></a>
+<a name="line-167"></a><a name="XParser"></a><font color=Blue>-- | XParser is just a specialisation of the PolyStateLazy parser.</font>
+<a name="line-168"></a><a name="XParser"></a><font color=Green><u>type</u></font> XParser a <font color=Red>=</font> Parser SymTabs <font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font> a
+<a name="line-169"></a>
+<a name="line-170"></a><a name="tok"></a><font color=Blue>-- | Return the next token from the input only if it matches the given token.</font>
+<a name="line-171"></a><font color=Blue>tok</font> <font color=Red>::</font> TokenT <font color=Red>-&gt;</font> XParser TokenT
+<a name="line-172"></a><font color=Blue>tok</font> t <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t'<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-173"></a>           <font color=Green><u>case</u></font> t' <font color=Green><u>of</u></font> TokError <font color=Green><u>_</u></font>    <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
+<a name="line-174"></a>                      <font color=Green><u>_</u></font> <font color=Red>|</font> t'<font color=Cyan>==</font>t     <font color=Red>-&gt;</font> return t
+<a name="line-175"></a>                        <font color=Red>|</font> otherwise <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show t<font color=Cyan>)</font> p t'
+<a name="line-176"></a><a name="nottok"></a><font color=Blue>nottok</font> <font color=Red>::</font> <font color=Red>[</font>TokenT<font color=Red>]</font> <font color=Red>-&gt;</font> XParser TokenT
+<a name="line-177"></a><font color=Blue>nottok</font> ts <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-178"></a>               <font color=Green><u>if</u></font> t<font color=Cyan>`elem`</font>ts <font color=Green><u>then</u></font> report fail <font color=Cyan>(</font><font color=Magenta>"no "</font><font color=Cyan>++</font>show t<font color=Cyan>)</font> p t
+<a name="line-179"></a>                            <font color=Green><u>else</u></font> return t
+<a name="line-180"></a>
+<a name="line-181"></a><a name="name"></a><font color=Blue>-- | Return just a name, e.g. element name, attribute name.</font>
+<a name="line-182"></a><font color=Blue>name</font> <font color=Red>::</font> XParser Name
+<a name="line-183"></a><font color=Blue>name</font> <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>tok<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-184"></a>          <font color=Green><u>case</u></font> tok <font color=Green><u>of</u></font>
+<a name="line-185"></a>            TokName s  <font color=Red>-&gt;</font> return s
+<a name="line-186"></a>            TokError <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> report failBad <font color=Magenta>"a name"</font> p tok
+<a name="line-187"></a>            <font color=Green><u>_</u></font>          <font color=Red>-&gt;</font> report fail <font color=Magenta>"a name"</font> p tok
+<a name="line-188"></a>
+<a name="line-189"></a><a name="string"></a><font color=Blue>string</font><font color=Cyan>,</font> freetext <font color=Red>::</font> XParser String
+<a name="line-190"></a><font color=Blue>string</font>   <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-191"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokName s <font color=Red>-&gt;</font> return s
+<a name="line-192"></a>                        <font color=Green><u>_</u></font>         <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
+<a name="line-193"></a><a name="freetext"></a><font color=Blue>freetext</font> <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-194"></a>              <font color=Green><u>case</u></font> t <font color=Green><u>of</u></font> TokFreeText s <font color=Red>-&gt;</font> return s
+<a name="line-195"></a>                        <font color=Green><u>_</u></font>             <font color=Red>-&gt;</font> report fail <font color=Magenta>"text"</font> p t
+<a name="line-196"></a>
+<a name="line-197"></a><a name="maybe"></a><font color=Blue>maybe</font> <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font>
+<a name="line-198"></a><font color=Blue>maybe</font> p <font color=Red>=</font>
+<a name="line-199"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Just<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-200"></a>    <font color=Cyan>(</font> return Nothing<font color=Cyan>)</font>
+<a name="line-201"></a>
+<a name="line-202"></a><a name="either"></a><font color=Blue>either</font> <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser b <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>Either a b<font color=Cyan>)</font>
+<a name="line-203"></a><font color=Blue>either</font> p q <font color=Red>=</font>
+<a name="line-204"></a>    <font color=Cyan>(</font> p <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Left<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-205"></a>    <font color=Cyan>(</font> q <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Right<font color=Cyan>)</font>
+<a name="line-206"></a>
+<a name="line-207"></a><a name="word"></a><font color=Blue>word</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> XParser ()
+<a name="line-208"></a><font color=Blue>word</font> s <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x <font color=Red>&lt;-</font> next
+<a name="line-209"></a>            <font color=Cyan>;</font> <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>
+<a name="line-210"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokName n<font color=Cyan>)</font>     <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
+<a name="line-211"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>TokFreeText n<font color=Cyan>)</font> <font color=Red>|</font> s<font color=Cyan>==</font>n <font color=Red>-&gt;</font> return ()
+<a name="line-212"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Red>@</font><font color=Cyan>(</font>TokError <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> report failBad <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
+<a name="line-213"></a>                <font color=Cyan>(</font>p<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>-&gt;</font> report fail <font color=Cyan>(</font>show s<font color=Cyan>)</font> p t
+<a name="line-214"></a>            <font color=Cyan>}</font>
+<a name="line-215"></a>
+<a name="line-216"></a><a name="posn"></a><font color=Blue>posn</font> <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> x<font color=Red>@</font><font color=Cyan>(</font>p<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> next
+<a name="line-217"></a>          <font color=Cyan>;</font> reparse <font color=Red>[</font>x<font color=Red>]</font>
+<a name="line-218"></a>          <font color=Cyan>;</font> return p
+<a name="line-219"></a>          <font color=Cyan>}</font>
+<a name="line-220"></a>
+<a name="line-221"></a><a name="nmtoken"></a><font color=Blue>nmtoken</font> <font color=Red>::</font> XParser NmToken
+<a name="line-222"></a><font color=Blue>nmtoken</font> <font color=Red>=</font> <font color=Cyan>(</font>string <font color=Cyan>`onFail`</font> freetext<font color=Cyan>)</font>
+<a name="line-223"></a>
+<a name="line-224"></a><a name="failP"></a><font color=Blue>failP</font><font color=Cyan>,</font> failBadP <font color=Red>::</font> String <font color=Red>-&gt;</font> XParser a
+<a name="line-225"></a><font color=Blue>failP</font> msg <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> fail <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="line-226"></a><a name="failBadP"></a><font color=Blue>failBadP</font> msg <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> p <font color=Red>&lt;-</font> posn<font color=Cyan>;</font> failBad <font color=Cyan>(</font>msg<font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="line-227"></a>
+<a name="line-228"></a><a name="report"></a><font color=Blue>report</font> <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>XParser a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> TokenT <font color=Red>-&gt;</font> XParser a
+<a name="line-229"></a><font color=Blue>report</font> fail exp p t <font color=Red>=</font> fail <font color=Cyan>(</font><font color=Magenta>"Expected "</font><font color=Cyan>++</font>exp<font color=Cyan>++</font><font color=Magenta>" but found "</font><font color=Cyan>++</font>show t
+<a name="line-230"></a>                           <font color=Cyan>++</font><font color=Magenta>"\n  in "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
+<a name="line-231"></a>
+<a name="line-232"></a><a name="adjustErrP"></a><font color=Blue>adjustErrP</font> <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> XParser a
+<a name="line-233"></a><a name="adjustErrP"></a><font color=Blue>p</font> <font color=Cyan>`adjustErrP`</font> f <font color=Red>=</font> p <font color=Cyan>`onFail`</font> <font color=Green><u>do</u></font> pn <font color=Red>&lt;-</font> posn
+<a name="line-234"></a>                                 <font color=Cyan>(</font>p <font color=Cyan>`adjustErr`</font> f<font color=Cyan>)</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font>show pn<font color=Cyan>)</font>
+<a name="line-235"></a>
+<a name="line-236"></a><a name="peRef"></a><font color=Blue>peRef</font> <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser a
+<a name="line-237"></a><font color=Blue>peRef</font> p <font color=Red>=</font>
+<a name="line-238"></a>    p <font color=Cyan>`onFail`</font>
+<a name="line-239"></a>    <font color=Green><u>do</u></font> pn <font color=Red>&lt;-</font> posn
+<a name="line-240"></a>       n <font color=Red>&lt;-</font> pereference
+<a name="line-241"></a>       tr <font color=Red>&lt;-</font> stQuery <font color=Cyan>(</font>lookupPE n<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Looking up %"</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
+<a name="line-242"></a>       <font color=Green><u>case</u></font> tr <font color=Green><u>of</u></font>
+<a name="line-243"></a>           Just <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font> <font color=Red>-&gt;</font>
+<a name="line-244"></a>                      <font color=Green><u>do</u></font> reparse <font color=Cyan>(</font>xmlReLex <font color=Cyan>(</font>posInNewCxt <font color=Cyan>(</font><font color=Magenta>"macro %"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
+<a name="line-245"></a>                                                        <font color=Cyan>(</font>Just pn<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-246"></a>                                           <font color=Cyan>(</font>flattenEV ev<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-247"></a>                               <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"  defn:  "</font><font color=Cyan>++</font>flattenEV ev<font color=Cyan>)</font>
+<a name="line-248"></a>                         peRef p
+<a name="line-249"></a>           Just <font color=Cyan>(</font>PEDefExternalID <font color=Cyan>(</font>PUBLIC <font color=Green><u>_</u></font> <font color=Cyan>(</font>SystemLiteral f<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font>
+<a name="line-250"></a>                      <font color=Green><u>do</u></font> <font color=Green><u>let</u></font> f' <font color=Red>=</font> combine <font color=Cyan>(</font>dropFileName <font color=Cyan>$</font> posnFilename pn<font color=Cyan>)</font> f
+<a name="line-251"></a>                             val <font color=Red>=</font> unsafePerformIO <font color=Cyan>(</font>readFile f'<font color=Cyan>)</font>
+<a name="line-252"></a>                         reparse <font color=Cyan>(</font>xmlReLex <font color=Cyan>(</font>posInNewCxt f'
+<a name="line-253"></a>                                                        <font color=Cyan>(</font>Just pn<font color=Cyan>)</font><font color=Cyan>)</font> val<font color=Cyan>)</font>
+<a name="line-254"></a>                               <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"  reading from file "</font><font color=Cyan>++</font>f'<font color=Cyan>)</font>
+<a name="line-255"></a>                         peRef p
+<a name="line-256"></a>           Just <font color=Cyan>(</font>PEDefExternalID <font color=Cyan>(</font>SYSTEM <font color=Cyan>(</font>SystemLiteral f<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font>
+<a name="line-257"></a>                      <font color=Green><u>do</u></font> <font color=Green><u>let</u></font> f' <font color=Red>=</font> combine <font color=Cyan>(</font>dropFileName <font color=Cyan>$</font> posnFilename pn<font color=Cyan>)</font> f
+<a name="line-258"></a>                             val <font color=Red>=</font> unsafePerformIO <font color=Cyan>(</font>readFile f'<font color=Cyan>)</font>
+<a name="line-259"></a>                         reparse <font color=Cyan>(</font>xmlReLex <font color=Cyan>(</font>posInNewCxt f'
+<a name="line-260"></a>                                                        <font color=Cyan>(</font>Just pn<font color=Cyan>)</font><font color=Cyan>)</font> val<font color=Cyan>)</font>
+<a name="line-261"></a>                               <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"  reading from file "</font><font color=Cyan>++</font>f'<font color=Cyan>)</font>
+<a name="line-262"></a>                         peRef p
+<a name="line-263"></a>           Nothing <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"PEReference use before definition: "</font><font color=Cyan>++</font><font color=Magenta>"%"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font>
+<a name="line-264"></a>                           <font color=Cyan>++</font><font color=Magenta>"\n    at "</font><font color=Cyan>++</font>show pn<font color=Cyan>)</font>
+<a name="line-265"></a>
+<a name="line-266"></a><a name="blank"></a><font color=Blue>blank</font> <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser a
+<a name="line-267"></a><font color=Blue>blank</font> p <font color=Red>=</font>
+<a name="line-268"></a>    p <font color=Cyan>`onFail`</font>
+<a name="line-269"></a>    <font color=Green><u>do</u></font> n <font color=Red>&lt;-</font> pereference
+<a name="line-270"></a>       tr <font color=Red>&lt;-</font> stQuery <font color=Cyan>(</font>lookupPE n<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Looking up %"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>" (is blank?)"</font><font color=Cyan>)</font>
+<a name="line-271"></a>       <font color=Green><u>case</u></font> tr <font color=Green><u>of</u></font>
+<a name="line-272"></a>           Just <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font>
+<a name="line-273"></a>                    <font color=Red>|</font> all isSpace <font color=Cyan>(</font>flattenEV ev<font color=Cyan>)</font>  <font color=Red>-&gt;</font>
+<a name="line-274"></a>                            <font color=Green><u>do</u></font> blank p <font color=Cyan>`debug`</font> <font color=Magenta>"Empty macro definition"</font>
+<a name="line-275"></a>           Just <font color=Green><u>_</u></font>  <font color=Red>-&gt;</font> failP <font color=Cyan>(</font><font color=Magenta>"expected a blank PERef macro: "</font><font color=Cyan>++</font><font color=Magenta>"%"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
+<a name="line-276"></a>           Nothing <font color=Red>-&gt;</font> failP <font color=Cyan>(</font><font color=Magenta>"PEReference use before definition: "</font><font color=Cyan>++</font><font color=Magenta>"%"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
+<a name="line-277"></a>
+<a name="line-278"></a>
+<a name="line-279"></a>
+<a name="line-280"></a><font color=Blue>---- XML Parsing Functions ----</font>
+<a name="line-281"></a>
+<a name="line-282"></a><a name="justDTD"></a><font color=Blue>justDTD</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>Maybe DocTypeDecl<font color=Cyan>)</font>
+<a name="line-283"></a><font color=Blue>justDTD</font> <font color=Red>=</font>
+<a name="line-284"></a>  <font color=Green><u>do</u></font> <font color=Cyan>(</font>ExtSubset <font color=Green><u>_</u></font> ds<font color=Cyan>)</font> <font color=Red>&lt;-</font> extsubset <font color=Cyan>`debug`</font> <font color=Magenta>"Trying external subset"</font>
+<a name="line-285"></a>     <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font> fail <font color=Magenta>"empty"</font>
+<a name="line-286"></a>         <font color=Green><u>else</u></font> return <font color=Cyan>(</font>Just <font color=Cyan>(</font>DTD <font color=Magenta>"extsubset"</font> Nothing <font color=Cyan>(</font>concatMap extract ds<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-287"></a>  <font color=Cyan>`onFail`</font>
+<a name="line-288"></a>  <font color=Green><u>do</u></font> <font color=Cyan>(</font>Prolog <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> dtd <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> prolog
+<a name="line-289"></a>     return dtd
+<a name="line-290"></a> <font color=Green><u>where</u></font> extract <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font> <font color=Red>=</font> <font color=Red>[</font>m<font color=Red>]</font>
+<a name="line-291"></a>       extract <font color=Cyan>(</font>ExtConditionalSect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> concatMap extract i
+<a name="line-292"></a>       extract <font color=Cyan>(</font>ExtConditionalSect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> []
+<a name="line-293"></a>
+<a name="line-294"></a><a name="document"></a><font color=Blue>-- | Return an entire XML document including prolog and trailing junk.</font>
+<a name="line-295"></a><font color=Blue>document</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>Document Posn<font color=Cyan>)</font>
+<a name="line-296"></a><font color=Blue>document</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-297"></a> <font color=Blue>-- p &lt;- prolog `adjustErr` ("unrecognisable XML prolog\n"++)</font>
+<a name="line-298"></a> <font color=Blue>-- e &lt;- element</font>
+<a name="line-299"></a> <font color=Blue>-- ms &lt;- many misc</font>
+<a name="line-300"></a> <font color=Blue>-- (_,ge) &lt;- stGet</font>
+<a name="line-301"></a> <font color=Blue>-- return (Document p ge e ms)</font>
+<a name="line-302"></a>    return Document <font color=Cyan>`apply`</font> <font color=Cyan>(</font>prolog <font color=Cyan>`adjustErr`</font>
+<a name="line-303"></a>                                    <font color=Cyan>(</font><font color=Magenta>"unrecognisable XML prolog\n"</font><font color=Cyan>++</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-304"></a>                    <font color=Cyan>`apply`</font> <font color=Cyan>(</font>fmap snd stGet<font color=Cyan>)</font>
+<a name="line-305"></a>                    <font color=Cyan>`apply`</font> element
+<a name="line-306"></a>                    <font color=Cyan>`apply`</font> many misc
+<a name="line-307"></a>
+<a name="line-308"></a><a name="comment"></a><font color=Blue>-- | Return an XML comment.</font>
+<a name="line-309"></a><font color=Blue>comment</font> <font color=Red>::</font> XParser Comment
+<a name="line-310"></a><font color=Blue>comment</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-311"></a>    myBracket <font color=Cyan>(</font>tok TokCommentOpen<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokCommentClose<font color=Cyan>)</font> freetext
+<a name="line-312"></a><font color=Blue>--  tok TokCommentOpen</font>
+<a name="line-313"></a><font color=Blue>--  commit $ do</font>
+<a name="line-314"></a><font color=Blue>--    c &lt;- freetext</font>
+<a name="line-315"></a><font color=Blue>--    tok TokCommentClose</font>
+<a name="line-316"></a><font color=Blue>--    return c</font>
+<a name="line-317"></a>
+<a name="line-318"></a><a name="processinginstruction"></a><font color=Blue>-- | Parse a processing instruction.</font>
+<a name="line-319"></a><font color=Blue>processinginstruction</font> <font color=Red>::</font> XParser ProcessingInstruction
+<a name="line-320"></a><font color=Blue>processinginstruction</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-321"></a>    tok TokPIOpen
+<a name="line-322"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-323"></a>      n <font color=Red>&lt;-</font> string  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"processing instruction has no target"</font>
+<a name="line-324"></a>      f <font color=Red>&lt;-</font> freetext
+<a name="line-325"></a>      tok TokPIClose <font color=Cyan>`onFail`</font> failP <font color=Cyan>(</font><font color=Magenta>"missing ?&gt; in &lt;?"</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
+<a name="line-326"></a>      return <font color=Cyan>(</font>n<font color=Cyan>,</font> f<font color=Cyan>)</font>
+<a name="line-327"></a>
+<a name="line-328"></a><a name="cdsect"></a><font color=Blue>cdsect</font> <font color=Red>::</font> XParser CDSect
+<a name="line-329"></a><font color=Blue>cdsect</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-330"></a>    tok TokSectionOpen
+<a name="line-331"></a>    bracket <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection CDATAx<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSectionClose<font color=Cyan>)</font> chardata
+<a name="line-332"></a>
+<a name="line-333"></a><a name="prolog"></a><font color=Blue>prolog</font> <font color=Red>::</font> XParser Prolog
+<a name="line-334"></a><font color=Blue>prolog</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-335"></a>    x   <font color=Red>&lt;-</font> maybe xmldecl
+<a name="line-336"></a>    m1  <font color=Red>&lt;-</font> many misc
+<a name="line-337"></a>    dtd <font color=Red>&lt;-</font> maybe doctypedecl
+<a name="line-338"></a>    m2  <font color=Red>&lt;-</font> many misc
+<a name="line-339"></a>    return <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font>
+<a name="line-340"></a>
+<a name="line-341"></a><a name="xmldecl"></a><font color=Blue>xmldecl</font> <font color=Red>::</font> XParser XMLDecl
+<a name="line-342"></a><font color=Blue>xmldecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-343"></a>    tok TokPIOpen
+<a name="line-344"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
+<a name="line-345"></a>    p <font color=Red>&lt;-</font> posn
+<a name="line-346"></a>    s <font color=Red>&lt;-</font> freetext
+<a name="line-347"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing ?&gt; in &lt;?xml ...?&gt;"</font>
+<a name="line-348"></a> <font color=Blue>-- raise ((runParser aux emptySTs . xmlReLex p) s)</font>
+<a name="line-349"></a>    return <font color=Cyan>(</font>fst3 <font color=Cyan>(</font><font color=Cyan>(</font>runParser aux emptySTs <font color=Cyan>.</font> xmlReLex p<font color=Cyan>)</font> s<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-350"></a>  <font color=Green><u>where</u></font>
+<a name="line-351"></a>    aux <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-352"></a>        v <font color=Red>&lt;-</font> versioninfo  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing XML version info"</font>
+<a name="line-353"></a>        e <font color=Red>&lt;-</font> maybe encodingdecl
+<a name="line-354"></a>        s <font color=Red>&lt;-</font> maybe sddecl
+<a name="line-355"></a>        return <font color=Cyan>(</font>XMLDecl v e s<font color=Cyan>)</font>
+<a name="line-356"></a> <font color=Blue>-- raise (Left err, _, _) = failP err</font>
+<a name="line-357"></a> <font color=Blue>-- raise (Right ok, _, _) = return ok</font>
+<a name="line-358"></a>
+<a name="line-359"></a><a name="versioninfo"></a><font color=Blue>versioninfo</font> <font color=Red>::</font> XParser VersionInfo
+<a name="line-360"></a><font color=Blue>versioninfo</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-361"></a>    <font color=Cyan>(</font>word <font color=Magenta>"version"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"VERSION"</font><font color=Cyan>)</font>
+<a name="line-362"></a>    tok TokEqual
+<a name="line-363"></a>    bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-364"></a>
+<a name="line-365"></a><a name="misc"></a><font color=Blue>misc</font> <font color=Red>::</font> XParser Misc
+<a name="line-366"></a><font color=Blue>misc</font> <font color=Red>=</font>
+<a name="line-367"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"&lt;!--comment--&gt;"</font><font color=Cyan>,</font>  comment <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Comment<font color=Cyan>)</font>
+<a name="line-368"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"&lt;?PI?&gt;"</font><font color=Cyan>,</font>          processinginstruction <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PI<font color=Cyan>)</font>
+<a name="line-369"></a>           <font color=Red>]</font>
+<a name="line-370"></a>
+<a name="line-371"></a><a name="doctypedecl"></a><font color=Blue>-- | Return a DOCTYPE decl, indicating a DTD.</font>
+<a name="line-372"></a><font color=Blue>doctypedecl</font> <font color=Red>::</font> XParser DocTypeDecl
+<a name="line-373"></a><font color=Blue>doctypedecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-374"></a>    tok TokSpecialOpen
+<a name="line-375"></a>    tok <font color=Cyan>(</font>TokSpecial DOCTYPEx<font color=Cyan>)</font>
+<a name="line-376"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-377"></a>      n   <font color=Red>&lt;-</font> name
+<a name="line-378"></a>      eid <font color=Red>&lt;-</font> maybe externalid
+<a name="line-379"></a>      es  <font color=Red>&lt;-</font> maybe <font color=Cyan>(</font>bracket <font color=Cyan>(</font>tok TokSqOpen<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSqClose<font color=Cyan>)</font>
+<a name="line-380"></a>                            <font color=Cyan>(</font>many <font color=Cyan>(</font>peRef markupdecl<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-381"></a>      blank <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font>  <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing &gt; in DOCTYPE decl"</font>
+<a name="line-382"></a>      return <font color=Cyan>(</font>DTD n eid <font color=Cyan>(</font><font color=Green><u>case</u></font> es <font color=Green><u>of</u></font> <font color=Cyan>{</font> Nothing <font color=Red>-&gt;</font> []<font color=Cyan>;</font> Just e <font color=Red>-&gt;</font> e <font color=Cyan>}</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-383"></a>
+<a name="line-384"></a><a name="markupdecl"></a><font color=Blue>-- | Return a DTD markup decl, e.g. ELEMENT, ATTLIST, etc</font>
+<a name="line-385"></a><font color=Blue>markupdecl</font> <font color=Red>::</font> XParser MarkupDecl
+<a name="line-386"></a><font color=Blue>markupdecl</font> <font color=Red>=</font>
+<a name="line-387"></a>  oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"ELEMENT"</font><font color=Cyan>,</font>  elementdecl  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Element<font color=Cyan>)</font>
+<a name="line-388"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ATTLIST"</font><font color=Cyan>,</font>  attlistdecl  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> AttList<font color=Cyan>)</font>
+<a name="line-389"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ENTITY"</font><font color=Cyan>,</font>   entitydecl   <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Entity<font color=Cyan>)</font>
+<a name="line-390"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"NOTATION"</font><font color=Cyan>,</font> notationdecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Notation<font color=Cyan>)</font>
+<a name="line-391"></a>         <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"misc"</font><font color=Cyan>,</font>     misc         <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> MarkupMisc<font color=Cyan>)</font>
+<a name="line-392"></a>         <font color=Red>]</font>
+<a name="line-393"></a>    <font color=Cyan>`adjustErrP`</font>
+<a name="line-394"></a>          <font color=Cyan>(</font><font color=Magenta>"when looking for a markup decl,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-395"></a> <font color=Blue>--       (\  (ELEMENT, ATTLIST, ENTITY, NOTATION, &lt;!--comment--&gt;, or &lt;?PI?&gt;")</font>
+<a name="line-396"></a>
+<a name="line-397"></a><a name="extsubset"></a><font color=Blue>extsubset</font> <font color=Red>::</font> XParser ExtSubset
+<a name="line-398"></a><font color=Blue>extsubset</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-399"></a>    td <font color=Red>&lt;-</font> maybe textdecl
+<a name="line-400"></a>    ds <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef extsubsetdecl<font color=Cyan>)</font>
+<a name="line-401"></a>    return <font color=Cyan>(</font>ExtSubset td ds<font color=Cyan>)</font>
+<a name="line-402"></a>
+<a name="line-403"></a><a name="extsubsetdecl"></a><font color=Blue>extsubsetdecl</font> <font color=Red>::</font> XParser ExtSubsetDecl
+<a name="line-404"></a><font color=Blue>extsubsetdecl</font> <font color=Red>=</font>
+<a name="line-405"></a>    <font color=Cyan>(</font> markupdecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> ExtMarkupDecl<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-406"></a>    <font color=Cyan>(</font> conditionalsect <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> ExtConditionalSect<font color=Cyan>)</font>
+<a name="line-407"></a>
+<a name="line-408"></a><a name="sddecl"></a><font color=Blue>sddecl</font> <font color=Red>::</font> XParser SDDecl
+<a name="line-409"></a><font color=Blue>sddecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-410"></a>    <font color=Cyan>(</font>word <font color=Magenta>"standalone"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"STANDALONE"</font><font color=Cyan>)</font>
+<a name="line-411"></a>    commit <font color=Cyan>$</font> <font color=Green><u>do</u></font>
+<a name="line-412"></a>      tok TokEqual <font color=Cyan>`onFail`</font> failP <font color=Magenta>"missing = in 'standalone' decl"</font>
+<a name="line-413"></a>      bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
+<a name="line-414"></a>              <font color=Cyan>(</font> <font color=Cyan>(</font>word <font color=Magenta>"yes"</font> <font color=Cyan>&gt;&gt;</font> return True<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-415"></a>                <font color=Cyan>(</font>word <font color=Magenta>"no"</font> <font color=Cyan>&gt;&gt;</font> return False<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-416"></a>                failP <font color=Magenta>"'standalone' decl requires 'yes' or 'no' value"</font> <font color=Cyan>)</font>
+<a name="line-417"></a>
+<a name="line-418"></a><font color=Blue>{-
+<a name="line-419"></a>element :: XParser (Element Posn)
+<a name="line-420"></a>element = do
+<a name="line-421"></a>    tok TokAnyOpen
+<a name="line-422"></a>    (ElemTag n as) &lt;- elemtag
+<a name="line-423"></a>    oneOf' [ ("self-closing tag &lt;"++n++"/&gt;"
+<a name="line-424"></a>             ,  do tok TokEndClose
+<a name="line-425"></a>                   return (Elem n as []))
+<a name="line-426"></a>           , ("after open tag &lt;"++n++"&gt;"
+<a name="line-427"></a>             ,  do tok TokAnyClose
+<a name="line-428"></a>                   cs &lt;- many content
+<a name="line-429"></a>                   p  &lt;- posn
+<a name="line-430"></a>                   m  &lt;- bracket (tok TokEndOpen) (tok TokAnyClose) name
+<a name="line-431"></a>                   checkmatch p n m
+<a name="line-432"></a>                   return (Elem n as cs))
+<a name="line-433"></a>           ] `adjustErr` (("in element tag "++n++",\n")++)
+<a name="line-434"></a>-}</font>
+<a name="line-435"></a>
+<a name="line-436"></a><a name="element"></a><font color=Blue>-- | Return a complete element including all its inner content.</font>
+<a name="line-437"></a><font color=Blue>element</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>
+<a name="line-438"></a><font color=Blue>element</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-439"></a>    tok TokAnyOpen
+<a name="line-440"></a>    <font color=Cyan>(</font>ElemTag n <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> elemtag
+<a name="line-441"></a>    return <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>`apply`</font>
+<a name="line-442"></a>        <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokEndClose
+<a name="line-443"></a>             return []
+<a name="line-444"></a>          <font color=Cyan>`onFail`</font>
+<a name="line-445"></a>          <font color=Green><u>do</u></font> tok TokAnyClose
+<a name="line-446"></a>             commit <font color=Cyan>$</font> manyFinally content
+<a name="line-447"></a>                                  <font color=Cyan>(</font><font color=Green><u>do</u></font> p <font color=Red>&lt;-</font> posn
+<a name="line-448"></a>                                      m <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokEndOpen<font color=Cyan>)</font>
+<a name="line-449"></a>                                                   <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font> name
+<a name="line-450"></a>                                      checkmatch p n m<font color=Cyan>)</font>
+<a name="line-451"></a>          <font color=Cyan>)</font> <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in element tag "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-452"></a>
+<a name="line-453"></a><a name="checkmatch"></a><font color=Blue>checkmatch</font> <font color=Red>::</font> Posn <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> XParser ()
+<a name="line-454"></a><font color=Blue>checkmatch</font> p n m <font color=Red>=</font>
+<a name="line-455"></a>  <font color=Green><u>if</u></font> n <font color=Cyan>==</font> m <font color=Green><u>then</u></font> return ()
+<a name="line-456"></a>  <font color=Green><u>else</u></font> failBadP <font color=Cyan>(</font><font color=Magenta>"tag &lt;"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>"&gt; terminated by &lt;/"</font><font color=Cyan>++</font>m<font color=Cyan>++</font><font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="line-457"></a>
+<a name="line-458"></a><a name="elemtag"></a><font color=Blue>-- | Parse only the parts between angle brackets in an element tag.</font>
+<a name="line-459"></a><font color=Blue>elemtag</font> <font color=Red>::</font> XParser ElemTag
+<a name="line-460"></a><font color=Blue>elemtag</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-461"></a>    n  <font color=Red>&lt;-</font> name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"malformed element tag\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-462"></a>    <font color=Green><u>as</u></font> <font color=Red>&lt;-</font> many attribute
+<a name="line-463"></a>    return <font color=Cyan>(</font>ElemTag n <font color=Green><u>as</u></font><font color=Cyan>)</font>
+<a name="line-464"></a>
+<a name="line-465"></a><a name="elemOpenTag"></a><font color=Blue>-- | For use with stream parsers - returns the complete opening element tag.</font>
+<a name="line-466"></a><font color=Blue>elemOpenTag</font> <font color=Red>::</font> XParser ElemTag
+<a name="line-467"></a><font color=Blue>elemOpenTag</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-468"></a>    tok TokAnyOpen
+<a name="line-469"></a>    e <font color=Red>&lt;-</font> elemtag
+<a name="line-470"></a>    tok TokAnyClose
+<a name="line-471"></a>    return e
+<a name="line-472"></a>
+<a name="line-473"></a><a name="elemCloseTag"></a><font color=Blue>-- | For use with stream parsers - accepts a closing tag, provided it</font>
+<a name="line-474"></a><font color=Blue>--   matches the given element name.</font>
+<a name="line-475"></a><font color=Blue>elemCloseTag</font> <font color=Red>::</font> Name <font color=Red>-&gt;</font> XParser ()
+<a name="line-476"></a><font color=Blue>elemCloseTag</font> n <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-477"></a>    tok TokEndOpen
+<a name="line-478"></a>    p <font color=Red>&lt;-</font> posn
+<a name="line-479"></a>    m <font color=Red>&lt;-</font> name
+<a name="line-480"></a>    tok TokAnyClose
+<a name="line-481"></a>    checkmatch p n m
+<a name="line-482"></a>
+<a name="line-483"></a><a name="attribute"></a><font color=Blue>attribute</font> <font color=Red>::</font> XParser Attribute
+<a name="line-484"></a><font color=Blue>attribute</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-485"></a>    n <font color=Red>&lt;-</font> name <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"malformed attribute name\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-486"></a>    tok TokEqual <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing = in attribute"</font>
+<a name="line-487"></a>    v <font color=Red>&lt;-</font> attvalue <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing attvalue"</font>
+<a name="line-488"></a>    return <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>
+<a name="line-489"></a>
+<a name="line-490"></a><a name="content"></a><font color=Blue>-- | Return a content particle, e.g. text, element, reference, etc</font>
+<a name="line-491"></a><font color=Blue>content</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font>
+<a name="line-492"></a><font color=Blue>content</font> <font color=Red>=</font>
+<a name="line-493"></a>  <font color=Green><u>do</u></font> <font color=Cyan>{</font> p  <font color=Red>&lt;-</font> posn
+<a name="line-494"></a>     <font color=Cyan>;</font> c' <font color=Red>&lt;-</font> content'
+<a name="line-495"></a>     <font color=Cyan>;</font> return <font color=Cyan>(</font>c' p<font color=Cyan>)</font>
+<a name="line-496"></a>     <font color=Cyan>}</font>
+<a name="line-497"></a>  <font color=Green><u>where</u></font>
+<a name="line-498"></a>     content' <font color=Red>=</font> oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"element"</font><font color=Cyan>,</font>   element   <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CElem<font color=Cyan>)</font>
+<a name="line-499"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"chardata"</font><font color=Cyan>,</font>  chardata  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CString False<font color=Cyan>)</font>
+<a name="line-500"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"reference"</font><font color=Cyan>,</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CRef<font color=Cyan>)</font>
+<a name="line-501"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"CDATA"</font><font color=Cyan>,</font>     cdsect    <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CString True<font color=Cyan>)</font>
+<a name="line-502"></a>                       <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"misc"</font><font color=Cyan>,</font>      misc      <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> CMisc<font color=Cyan>)</font>
+<a name="line-503"></a>                       <font color=Red>]</font>
+<a name="line-504"></a>                  <font color=Cyan>`adjustErrP`</font> <font color=Cyan>(</font><font color=Magenta>"when looking for a content item,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-505"></a><font color=Blue>-- (\    (element, text, reference, CDATA section, &lt;!--comment--&gt;, or &lt;?PI?&gt;")</font>
+<a name="line-506"></a>
+<a name="line-507"></a><a name="elementdecl"></a><font color=Blue>elementdecl</font> <font color=Red>::</font> XParser ElementDecl
+<a name="line-508"></a><font color=Blue>elementdecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-509"></a>    tok TokSpecialOpen
+<a name="line-510"></a>    tok <font color=Cyan>(</font>TokSpecial ELEMENTx<font color=Cyan>)</font>
+<a name="line-511"></a>    n <font color=Red>&lt;-</font> peRef name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"expecting identifier in ELEMENT decl\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-512"></a>    c <font color=Red>&lt;-</font> peRef contentspec
+<a name="line-513"></a>             <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in content spec of ELEMENT decl: "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-514"></a>    blank <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failBadP
+<a name="line-515"></a>       <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating ELEMENT decl"</font>
+<a name="line-516"></a>       <font color=Cyan>++</font><font color=Magenta>"\n    element name was "</font><font color=Cyan>++</font>show n
+<a name="line-517"></a>       <font color=Cyan>++</font><font color=Magenta>"\n    contentspec was "</font><font color=Cyan>++</font><font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>ContentSpec p<font color=Cyan>)</font><font color=Red>-&gt;</font> show p<font color=Cyan>)</font> c<font color=Cyan>)</font>
+<a name="line-518"></a>    return <font color=Cyan>(</font>ElementDecl n c<font color=Cyan>)</font>
+<a name="line-519"></a>
+<a name="line-520"></a><a name="contentspec"></a><font color=Blue>contentspec</font> <font color=Red>::</font> XParser ContentSpec
+<a name="line-521"></a><font color=Blue>contentspec</font> <font color=Red>=</font>
+<a name="line-522"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"EMPTY"</font><font color=Cyan>,</font>  peRef <font color=Cyan>(</font>word <font color=Magenta>"EMPTY"</font><font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return EMPTY<font color=Cyan>)</font>
+<a name="line-523"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"ANY"</font><font color=Cyan>,</font>    peRef <font color=Cyan>(</font>word <font color=Magenta>"ANY"</font><font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return ANY<font color=Cyan>)</font>
+<a name="line-524"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"mixed"</font><font color=Cyan>,</font>  peRef mixed <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Mixed<font color=Cyan>)</font>
+<a name="line-525"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"simple"</font><font color=Cyan>,</font> peRef cp <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> ContentSpec<font color=Cyan>)</font>
+<a name="line-526"></a>           <font color=Red>]</font>
+<a name="line-527"></a> <font color=Blue>--   `adjustErr` ("when looking for content spec,\n"++)</font>
+<a name="line-528"></a> <font color=Blue>--   `adjustErr` (++"\nLooking for content spec (EMPTY, ANY, mixed, etc)")</font>
+<a name="line-529"></a>
+<a name="line-530"></a><a name="choice"></a><font color=Blue>choice</font> <font color=Red>::</font> XParser <font color=Red>[</font>CP<font color=Red>]</font>
+<a name="line-531"></a><font color=Blue>choice</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-532"></a>    myBracket <font color=Cyan>(</font>tok TokBraOpen <font color=Cyan>`debug`</font> <font color=Magenta>"Trying choice"</font><font color=Cyan>)</font>
+<a name="line-533"></a>              <font color=Cyan>(</font>blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>`debug`</font> <font color=Magenta>"Succeeded with choice"</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-534"></a>              <font color=Cyan>(</font>peRef cp <font color=Cyan>`sepBy1`</font> blank <font color=Cyan>(</font>tok TokPipe<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-535"></a>
+<a name="line-536"></a><a name="sequence"></a><font color=Blue>sequence</font> <font color=Red>::</font> XParser <font color=Red>[</font>CP<font color=Red>]</font>
+<a name="line-537"></a><font color=Blue>sequence</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-538"></a> myBracket <font color=Cyan>(</font>tok TokBraOpen <font color=Cyan>`debug`</font> <font color=Magenta>"Trying sequence"</font><font color=Cyan>)</font>
+<a name="line-539"></a>           <font color=Cyan>(</font>blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>`debug`</font> <font color=Magenta>"Succeeded with sequence"</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-540"></a>           <font color=Cyan>(</font>peRef cp <font color=Cyan>`sepBy1`</font> blank <font color=Cyan>(</font>tok TokComma<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-541"></a>
+<a name="line-542"></a><a name="cp"></a><font color=Blue>cp</font> <font color=Red>::</font> XParser CP
+<a name="line-543"></a><font color=Blue>cp</font> <font color=Red>=</font> oneOf <font color=Red>[</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> n <font color=Red>&lt;-</font> name
+<a name="line-544"></a>                  m <font color=Red>&lt;-</font> modifier
+<a name="line-545"></a>                  <font color=Green><u>let</u></font> c <font color=Red>=</font> TagName n m
+<a name="line-546"></a>                  return c <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ContentSpec: name "</font><font color=Cyan>++</font>show c<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-547"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> ss <font color=Red>&lt;-</font> sequence
+<a name="line-548"></a>                  m <font color=Red>&lt;-</font> modifier
+<a name="line-549"></a>                  <font color=Green><u>let</u></font> c <font color=Red>=</font> Seq ss m
+<a name="line-550"></a>                  return c <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ContentSpec: sequence "</font><font color=Cyan>++</font>show c<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-551"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> cs <font color=Red>&lt;-</font> choice
+<a name="line-552"></a>                  m <font color=Red>&lt;-</font> modifier
+<a name="line-553"></a>                  <font color=Green><u>let</u></font> c <font color=Red>=</font> Choice cs m
+<a name="line-554"></a>                  return c <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ContentSpec: choice "</font><font color=Cyan>++</font>show c<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-555"></a>           <font color=Red>]</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Magenta>"\nwhen looking for a content particle"</font><font color=Cyan>)</font>
+<a name="line-556"></a>
+<a name="line-557"></a><a name="modifier"></a><font color=Blue>modifier</font> <font color=Red>::</font> XParser Modifier
+<a name="line-558"></a><font color=Blue>modifier</font> <font color=Red>=</font> oneOf <font color=Red>[</font> <font color=Cyan>(</font> tok TokStar <font color=Cyan>&gt;&gt;</font> return Star <font color=Cyan>)</font>
+<a name="line-559"></a>                 <font color=Cyan>,</font> <font color=Cyan>(</font> tok TokQuery <font color=Cyan>&gt;&gt;</font> return Query <font color=Cyan>)</font>
+<a name="line-560"></a>                 <font color=Cyan>,</font> <font color=Cyan>(</font> tok TokPlus <font color=Cyan>&gt;&gt;</font> return Plus <font color=Cyan>)</font>
+<a name="line-561"></a>                 <font color=Cyan>,</font> <font color=Cyan>(</font> return None <font color=Cyan>)</font>
+<a name="line-562"></a>                 <font color=Red>]</font>
+<a name="line-563"></a>
+<a name="line-564"></a><font color=Blue>-- just for debugging</font>
+<a name="line-565"></a><font color=Green><u>instance</u></font> Show CP <font color=Green><u>where</u></font>
+<a name="line-566"></a>    show <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font> <font color=Red>=</font> n<font color=Cyan>++</font>show m
+<a name="line-567"></a>    show <font color=Cyan>(</font>Choice cps m<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'('</font><font color=Red><b>:</b></font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>"|"</font> <font color=Cyan>(</font>map show cps<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-568"></a>                          <font color=Cyan>++</font><font color=Magenta>")"</font><font color=Cyan>++</font>show m
+<a name="line-569"></a>    show <font color=Cyan>(</font>Seq cps m<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'('</font><font color=Red><b>:</b></font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> <font color=Cyan>(</font>map show cps<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-570"></a>                          <font color=Cyan>++</font><font color=Magenta>")"</font><font color=Cyan>++</font>show m
+<a name="line-571"></a><font color=Green><u>instance</u></font> Show Modifier <font color=Green><u>where</u></font>
+<a name="line-572"></a>    show None <font color=Red>=</font> <font color=Magenta>""</font>
+<a name="line-573"></a>    show Query <font color=Red>=</font> <font color=Magenta>"?"</font>
+<a name="line-574"></a>    show Star <font color=Red>=</font> <font color=Magenta>"*"</font>
+<a name="line-575"></a>    show Plus <font color=Red>=</font> <font color=Magenta>"+"</font>
+<a name="line-576"></a><font color=Blue>----</font>
+<a name="line-577"></a>
+<a name="line-578"></a><a name="mixed"></a><font color=Blue>mixed</font> <font color=Red>::</font> XParser Mixed
+<a name="line-579"></a><font color=Blue>mixed</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-580"></a>    tok TokBraOpen
+<a name="line-581"></a>    peRef <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokHash
+<a name="line-582"></a>              word <font color=Magenta>"PCDATA"</font><font color=Cyan>)</font>
+<a name="line-583"></a>    commit <font color=Cyan>$</font>
+<a name="line-584"></a>      oneOf <font color=Red>[</font> <font color=Cyan>(</font> <font color=Green><u>do</u></font> cs <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokPipe
+<a name="line-585"></a>                                         peRef name<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-586"></a>                   blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>&gt;&gt;</font> tok TokStar<font color=Cyan>)</font>
+<a name="line-587"></a>                   return <font color=Cyan>(</font>PCDATAplus cs<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-588"></a>            <font color=Cyan>,</font> <font color=Cyan>(</font> blank <font color=Cyan>(</font>tok TokBraClose <font color=Cyan>&gt;&gt;</font> tok TokStar<font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return PCDATA<font color=Cyan>)</font>
+<a name="line-589"></a>            <font color=Cyan>,</font> <font color=Cyan>(</font> blank <font color=Cyan>(</font>tok TokBraClose<font color=Cyan>)</font> <font color=Cyan>&gt;&gt;</font> return PCDATA<font color=Cyan>)</font>
+<a name="line-590"></a>            <font color=Red>]</font>
+<a name="line-591"></a>        <font color=Cyan>`adjustErrP`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Magenta>"\nLooking for mixed content spec (#PCDATA | ...)*\n"</font><font color=Cyan>)</font>
+<a name="line-592"></a>
+<a name="line-593"></a><a name="attlistdecl"></a><font color=Blue>attlistdecl</font> <font color=Red>::</font> XParser AttListDecl
+<a name="line-594"></a><font color=Blue>attlistdecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-595"></a>    tok TokSpecialOpen
+<a name="line-596"></a>    tok <font color=Cyan>(</font>TokSpecial ATTLISTx<font color=Cyan>)</font>
+<a name="line-597"></a>    n <font color=Red>&lt;-</font> peRef name <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Magenta>"expecting identifier in ATTLIST\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-598"></a>    ds <font color=Red>&lt;-</font> peRef <font color=Cyan>(</font>many1 <font color=Cyan>(</font>peRef attdef<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-599"></a>    blank <font color=Cyan>(</font>tok TokAnyClose<font color=Cyan>)</font> <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing &gt; terminating ATTLIST"</font>
+<a name="line-600"></a>    return <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font>
+<a name="line-601"></a>
+<a name="line-602"></a><a name="attdef"></a><font color=Blue>attdef</font> <font color=Red>::</font> XParser AttDef
+<a name="line-603"></a><font color=Blue>attdef</font> <font color=Red>=</font>
+<a name="line-604"></a>  <font color=Green><u>do</u></font> n <font color=Red>&lt;-</font> peRef name <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"expecting attribute name\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-605"></a>     t <font color=Red>&lt;-</font> peRef atttype <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"within attlist defn: "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-606"></a>     d <font color=Red>&lt;-</font> peRef defaultdecl <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in attlist defn: "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-607"></a>     return <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>
+<a name="line-608"></a>
+<a name="line-609"></a><a name="atttype"></a><font color=Blue>atttype</font> <font color=Red>::</font> XParser AttType
+<a name="line-610"></a><font color=Blue>atttype</font> <font color=Red>=</font>
+<a name="line-611"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"CDATA"</font><font color=Cyan>,</font>      word <font color=Magenta>"CDATA"</font> <font color=Cyan>&gt;&gt;</font> return StringType<font color=Cyan>)</font>
+<a name="line-612"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"tokenized"</font><font color=Cyan>,</font>  tokenizedtype <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> TokenizedType<font color=Cyan>)</font>
+<a name="line-613"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"enumerated"</font><font color=Cyan>,</font> enumeratedtype <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EnumeratedType<font color=Cyan>)</font>
+<a name="line-614"></a>           <font color=Red>]</font>
+<a name="line-615"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for ATTTYPE,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-616"></a> <font color=Blue>--   `adjustErr` (++"\nLooking for ATTTYPE (CDATA, tokenized, or enumerated")</font>
+<a name="line-617"></a>
+<a name="line-618"></a><a name="tokenizedtype"></a><font color=Blue>tokenizedtype</font> <font color=Red>::</font> XParser TokenizedType
+<a name="line-619"></a><font color=Blue>tokenizedtype</font> <font color=Red>=</font>
+<a name="line-620"></a>    oneOf <font color=Red>[</font> <font color=Cyan>(</font> word <font color=Magenta>"ID"</font> <font color=Cyan>&gt;&gt;</font> return ID<font color=Cyan>)</font>
+<a name="line-621"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"IDREF"</font> <font color=Cyan>&gt;&gt;</font> return IDREF<font color=Cyan>)</font>
+<a name="line-622"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"IDREFS"</font> <font color=Cyan>&gt;&gt;</font> return IDREFS<font color=Cyan>)</font>
+<a name="line-623"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"ENTITY"</font> <font color=Cyan>&gt;&gt;</font> return ENTITY<font color=Cyan>)</font>
+<a name="line-624"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"ENTITIES"</font> <font color=Cyan>&gt;&gt;</font> return ENTITIES<font color=Cyan>)</font>
+<a name="line-625"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"NMTOKEN"</font> <font color=Cyan>&gt;&gt;</font> return NMTOKEN<font color=Cyan>)</font>
+<a name="line-626"></a>          <font color=Cyan>,</font> <font color=Cyan>(</font> word <font color=Magenta>"NMTOKENS"</font> <font color=Cyan>&gt;&gt;</font> return NMTOKENS<font color=Cyan>)</font>
+<a name="line-627"></a>          <font color=Red>]</font> <font color=Cyan>`onFail`</font>
+<a name="line-628"></a>    <font color=Green><u>do</u></font> <font color=Cyan>{</font> t <font color=Red>&lt;-</font> next
+<a name="line-629"></a>       <font color=Cyan>;</font> failP <font color=Cyan>(</font><font color=Magenta>"Expected one of"</font>
+<a name="line-630"></a>               <font color=Cyan>++</font><font color=Magenta>" (ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, NMTOKENS)"</font>
+<a name="line-631"></a>               <font color=Cyan>++</font><font color=Magenta>"\nbut got "</font><font color=Cyan>++</font>show t<font color=Cyan>)</font>
+<a name="line-632"></a>       <font color=Cyan>}</font>
+<a name="line-633"></a><font color=Blue>-- `adjustErr` (++"\nLooking for a tokenized type:\n\ </font>
+<a name="line-634"></a><font color=Blue>-- \    (ID, IDREF, IDREFS, ENTITY, ENTITIES, NMTOKEN, NMTOKENS)")</font>
+<a name="line-635"></a>
+<a name="line-636"></a><a name="enumeratedtype"></a><font color=Blue>enumeratedtype</font> <font color=Red>::</font> XParser EnumeratedType
+<a name="line-637"></a><font color=Blue>enumeratedtype</font> <font color=Red>=</font>
+<a name="line-638"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"NOTATION"</font><font color=Cyan>,</font>   notationtype <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> NotationType<font color=Cyan>)</font>
+<a name="line-639"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"enumerated"</font><font color=Cyan>,</font> enumeration <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> Enumeration<font color=Cyan>)</font>
+<a name="line-640"></a>           <font color=Red>]</font>
+<a name="line-641"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for an enumerated or NOTATION type,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-642"></a>
+<a name="line-643"></a><a name="notationtype"></a><font color=Blue>notationtype</font> <font color=Red>::</font> XParser NotationType
+<a name="line-644"></a><font color=Blue>notationtype</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-645"></a>    word <font color=Magenta>"NOTATION"</font>
+<a name="line-646"></a>    bracket <font color=Cyan>(</font>tok TokBraOpen<font color=Cyan>)</font> <font color=Cyan>(</font>blank <font color=Cyan>(</font>tok TokBraClose<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-647"></a>            <font color=Cyan>(</font>peRef name <font color=Cyan>`sepBy1`</font> peRef <font color=Cyan>(</font>tok TokPipe<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-648"></a>
+<a name="line-649"></a><a name="enumeration"></a><font color=Blue>enumeration</font> <font color=Red>::</font> XParser Enumeration
+<a name="line-650"></a><font color=Blue>enumeration</font> <font color=Red>=</font>
+<a name="line-651"></a>    bracket <font color=Cyan>(</font>tok TokBraOpen<font color=Cyan>)</font> <font color=Cyan>(</font>blank <font color=Cyan>(</font>tok TokBraClose<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-652"></a>            <font color=Cyan>(</font>peRef nmtoken <font color=Cyan>`sepBy1`</font> blank <font color=Cyan>(</font>peRef <font color=Cyan>(</font>tok TokPipe<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-653"></a>
+<a name="line-654"></a><a name="defaultdecl"></a><font color=Blue>defaultdecl</font> <font color=Red>::</font> XParser DefaultDecl
+<a name="line-655"></a><font color=Blue>defaultdecl</font> <font color=Red>=</font>
+<a name="line-656"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"REQUIRED"</font><font color=Cyan>,</font>  tok TokHash <font color=Cyan>&gt;&gt;</font> word <font color=Magenta>"REQUIRED"</font> <font color=Cyan>&gt;&gt;</font> return REQUIRED<font color=Cyan>)</font>
+<a name="line-657"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"IMPLIED"</font><font color=Cyan>,</font>   tok TokHash <font color=Cyan>&gt;&gt;</font> word <font color=Magenta>"IMPLIED"</font> <font color=Cyan>&gt;&gt;</font> return IMPLIED<font color=Cyan>)</font>
+<a name="line-658"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"FIXED"</font><font color=Cyan>,</font>     <font color=Green><u>do</u></font> f <font color=Red>&lt;-</font> maybe <font color=Cyan>(</font>tok TokHash <font color=Cyan>&gt;&gt;</font> word <font color=Magenta>"FIXED"</font>
+<a name="line-659"></a>                                                      <font color=Cyan>&gt;&gt;</font> return FIXED<font color=Cyan>)</font>
+<a name="line-660"></a>                              a <font color=Red>&lt;-</font> peRef attvalue
+<a name="line-661"></a>                              return <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font> <font color=Cyan>)</font>
+<a name="line-662"></a>           <font color=Red>]</font>
+<a name="line-663"></a>        <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for an attribute default decl,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-664"></a><font color=Blue>--      `adjustErr` (++"\nLooking for an attribute default decl:\n\ </font>
+<a name="line-665"></a><font color=Blue>-- \    (REQUIRED, IMPLIED, FIXED)")</font>
+<a name="line-666"></a>
+<a name="line-667"></a><a name="conditionalsect"></a><font color=Blue>conditionalsect</font> <font color=Red>::</font> XParser ConditionalSect
+<a name="line-668"></a><font color=Blue>conditionalsect</font> <font color=Red>=</font> oneOf'
+<a name="line-669"></a>    <font color=Red>[</font> <font color=Cyan>(</font> <font color=Magenta>"INCLUDE"</font>
+<a name="line-670"></a>      <font color=Cyan>,</font> <font color=Green><u>do</u></font> tok TokSectionOpen
+<a name="line-671"></a>           peRef <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection INCLUDEx<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-672"></a>           p <font color=Red>&lt;-</font> posn
+<a name="line-673"></a>           tok TokSqOpen <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing [ after INCLUDE"</font>
+<a name="line-674"></a>           i <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef extsubsetdecl<font color=Cyan>)</font>
+<a name="line-675"></a>           tok TokSectionClose
+<a name="line-676"></a>                   <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"missing ]]&gt; for INCLUDE section"</font>
+<a name="line-677"></a>                                     <font color=Cyan>++</font><font color=Magenta>"\n    begun at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
+<a name="line-678"></a>           return <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-679"></a>    <font color=Cyan>,</font> <font color=Cyan>(</font> <font color=Magenta>"IGNORE"</font>
+<a name="line-680"></a>      <font color=Cyan>,</font> <font color=Green><u>do</u></font> tok TokSectionOpen
+<a name="line-681"></a>           peRef <font color=Cyan>(</font>tok <font color=Cyan>(</font>TokSection IGNOREx<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-682"></a>           p <font color=Red>&lt;-</font> posn
+<a name="line-683"></a>           tok TokSqOpen <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"missing [ after IGNORE"</font>
+<a name="line-684"></a>           i <font color=Red>&lt;-</font> many newIgnore  <font color=Blue>-- many ignoresectcontents</font>
+<a name="line-685"></a>           tok TokSectionClose
+<a name="line-686"></a>                   <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"missing ]]&gt; for IGNORE section"</font>
+<a name="line-687"></a>                                     <font color=Cyan>++</font><font color=Magenta>"\n    begun at "</font><font color=Cyan>++</font>show p<font color=Cyan>)</font>
+<a name="line-688"></a>           return <font color=Cyan>(</font>IgnoreSect []<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-689"></a>    <font color=Red>]</font> <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"in a conditional section,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-690"></a>
+<a name="line-691"></a><a name="newIgnore"></a><font color=Blue>newIgnore</font> <font color=Red>::</font> XParser Ignore
+<a name="line-692"></a><font color=Blue>newIgnore</font> <font color=Red>=</font>
+<a name="line-693"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokSectionOpen
+<a name="line-694"></a>         many newIgnore <font color=Cyan>`debug`</font> <font color=Magenta>"IGNORING conditional section"</font>
+<a name="line-695"></a>         tok TokSectionClose
+<a name="line-696"></a>         return Ignore <font color=Cyan>`debug`</font> <font color=Magenta>"end of IGNORED conditional section"</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-697"></a>    <font color=Cyan>(</font> <font color=Green><u>do</u></font> t <font color=Red>&lt;-</font> nottok <font color=Red>[</font>TokSectionOpen<font color=Cyan>,</font>TokSectionClose<font color=Red>]</font>
+<a name="line-698"></a>         return Ignore  <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ignoring: "</font><font color=Cyan>++</font>show t<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-699"></a>
+<a name="line-700"></a><a name="ignoresectcontents"></a><font color=Blue>--- obsolete?</font>
+<a name="line-701"></a><font color=Blue>ignoresectcontents</font> <font color=Red>::</font> XParser IgnoreSectContents
+<a name="line-702"></a><font color=Blue>ignoresectcontents</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-703"></a>    i <font color=Red>&lt;-</font> ignore
+<a name="line-704"></a>    is <font color=Red>&lt;-</font> many <font color=Cyan>(</font><font color=Green><u>do</u></font> tok TokSectionOpen
+<a name="line-705"></a>                   ic <font color=Red>&lt;-</font> ignoresectcontents
+<a name="line-706"></a>                   tok TokSectionClose
+<a name="line-707"></a>                   ig <font color=Red>&lt;-</font> ignore
+<a name="line-708"></a>                   return <font color=Cyan>(</font>ic<font color=Cyan>,</font>ig<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-709"></a>    return <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>
+<a name="line-710"></a>
+<a name="line-711"></a><a name="ignore"></a><font color=Blue>ignore</font> <font color=Red>::</font> XParser Ignore
+<a name="line-712"></a><font color=Blue>ignore</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-713"></a>  is <font color=Red>&lt;-</font> many1 <font color=Cyan>(</font>nottok <font color=Red>[</font>TokSectionOpen<font color=Cyan>,</font>TokSectionClose<font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-714"></a>  return Ignore  <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"ignored all of: "</font><font color=Cyan>++</font>show is<font color=Cyan>)</font>
+<a name="line-715"></a><font color=Blue>----</font>
+<a name="line-716"></a>
+<a name="line-717"></a><a name="reference"></a><font color=Blue>-- | Return either a general entity reference, or a character reference.</font>
+<a name="line-718"></a><font color=Blue>reference</font> <font color=Red>::</font> XParser Reference
+<a name="line-719"></a><font color=Blue>reference</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-720"></a>    bracket <font color=Cyan>(</font>tok TokAmp<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSemi<font color=Cyan>)</font> <font color=Cyan>(</font>freetext <font color=Cyan>&gt;&gt;=</font> val<font color=Cyan>)</font>
+<a name="line-721"></a>  <font color=Green><u>where</u></font>
+<a name="line-722"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font><font color=Magenta>'x'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font> <font color=Red>|</font> all isHexDigit i
+<a name="line-723"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readHex <font color=Cyan>$</font> i
+<a name="line-724"></a>    val <font color=Cyan>(</font><font color=Magenta>'#'</font><font color=Red><b>:</b></font>i<font color=Cyan>)</font>     <font color=Red>|</font> all isDigit i
+<a name="line-725"></a>                    <font color=Red>=</font> return <font color=Cyan>.</font> RefChar <font color=Cyan>.</font> fst <font color=Cyan>.</font> head <font color=Cyan>.</font> readDec <font color=Cyan>$</font> i
+<a name="line-726"></a>    val name        <font color=Red>=</font> return <font color=Cyan>.</font> RefEntity <font color=Cyan>$</font> name
+<a name="line-727"></a>
+<a name="line-728"></a><font color=Blue>{- -- following is incorrect
+<a name="line-729"></a>reference =
+<a name="line-730"></a>    ( charref &gt;&gt;= return . RefChar) `onFail`
+<a name="line-731"></a>    ( entityref &gt;&gt;= return . RefEntity)
+<a name="line-732"></a>
+<a name="line-733"></a>entityref :: XParser EntityRef
+<a name="line-734"></a>entityref = do
+<a name="line-735"></a>    bracket (tok TokAmp) (tok TokSemi) name
+<a name="line-736"></a>
+<a name="line-737"></a>charref :: XParser CharRef
+<a name="line-738"></a>charref = do
+<a name="line-739"></a>    bracket (tok TokAmp) (tok TokSemi) (freetext &gt;&gt;= readCharVal)
+<a name="line-740"></a>  where
+<a name="line-741"></a>    readCharVal ('#':'x':i) = return . fst . head . readHex $ i
+<a name="line-742"></a>    readCharVal ('#':i)     = return . fst . head . readDec $ i
+<a name="line-743"></a>    readCharVal _           = mzero
+<a name="line-744"></a>-}</font>
+<a name="line-745"></a>
+<a name="line-746"></a><a name="pereference"></a><font color=Blue>pereference</font> <font color=Red>::</font> XParser PEReference
+<a name="line-747"></a><font color=Blue>pereference</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-748"></a>    myBracket <font color=Cyan>(</font>tok TokPercent<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokSemi<font color=Cyan>)</font> nmtoken
+<a name="line-749"></a>
+<a name="line-750"></a><a name="entitydecl"></a><font color=Blue>entitydecl</font> <font color=Red>::</font> XParser EntityDecl
+<a name="line-751"></a><font color=Blue>entitydecl</font> <font color=Red>=</font>
+<a name="line-752"></a>    <font color=Cyan>(</font> gedecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EntityGEDecl<font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-753"></a>    <font color=Cyan>(</font> pedecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EntityPEDecl<font color=Cyan>)</font>
+<a name="line-754"></a>
+<a name="line-755"></a><a name="gedecl"></a><font color=Blue>gedecl</font> <font color=Red>::</font> XParser GEDecl
+<a name="line-756"></a><font color=Blue>gedecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-757"></a>    tok TokSpecialOpen
+<a name="line-758"></a>    tok <font color=Cyan>(</font>TokSpecial ENTITYx<font color=Cyan>)</font>
+<a name="line-759"></a>    n <font color=Red>&lt;-</font> name
+<a name="line-760"></a>    e <font color=Red>&lt;-</font> entitydef <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in general entity defn "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-761"></a>    tok TokAnyClose <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating G ENTITY decl "</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
+<a name="line-762"></a>    stUpdate <font color=Cyan>(</font>addGE n e<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"added GE defn &amp;"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>
+<a name="line-763"></a>    return <font color=Cyan>(</font>GEDecl n e<font color=Cyan>)</font>
+<a name="line-764"></a>
+<a name="line-765"></a><a name="pedecl"></a><font color=Blue>pedecl</font> <font color=Red>::</font> XParser PEDecl
+<a name="line-766"></a><font color=Blue>pedecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-767"></a>    tok TokSpecialOpen
+<a name="line-768"></a>    tok <font color=Cyan>(</font>TokSpecial ENTITYx<font color=Cyan>)</font>
+<a name="line-769"></a>    tok TokPercent
+<a name="line-770"></a>    n <font color=Red>&lt;-</font> name
+<a name="line-771"></a>    e <font color=Red>&lt;-</font> pedef <font color=Cyan>`adjustErrBad`</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"in parameter entity defn "</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>",\n"</font><font color=Cyan>)</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-772"></a>    tok TokAnyClose <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating P ENTITY decl "</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
+<a name="line-773"></a>    stUpdate <font color=Cyan>(</font>addPE n e<font color=Cyan>)</font> <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"added PE defn %"</font><font color=Cyan>++</font>n<font color=Cyan>++</font><font color=Magenta>";\n"</font><font color=Cyan>++</font>show e<font color=Cyan>)</font>
+<a name="line-774"></a>    return <font color=Cyan>(</font>PEDecl n e<font color=Cyan>)</font>
+<a name="line-775"></a>
+<a name="line-776"></a><a name="entitydef"></a><font color=Blue>entitydef</font> <font color=Red>::</font> XParser EntityDef
+<a name="line-777"></a><font color=Blue>entitydef</font> <font color=Red>=</font>
+<a name="line-778"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"entityvalue"</font><font color=Cyan>,</font> entityvalue <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> DefEntityValue<font color=Cyan>)</font>
+<a name="line-779"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"external"</font><font color=Cyan>,</font>    <font color=Green><u>do</u></font> eid <font color=Red>&lt;-</font> externalid
+<a name="line-780"></a>                                ndd <font color=Red>&lt;-</font> maybe ndatadecl
+<a name="line-781"></a>                                return <font color=Cyan>(</font>DefExternalID eid ndd<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-782"></a>           <font color=Red>]</font>
+<a name="line-783"></a>
+<a name="line-784"></a><a name="pedef"></a><font color=Blue>pedef</font> <font color=Red>::</font> XParser PEDef
+<a name="line-785"></a><font color=Blue>pedef</font> <font color=Red>=</font>
+<a name="line-786"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"entityvalue"</font><font color=Cyan>,</font> entityvalue <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PEDefEntityValue<font color=Cyan>)</font>
+<a name="line-787"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"externalid"</font><font color=Cyan>,</font>  externalid  <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> PEDefExternalID<font color=Cyan>)</font>
+<a name="line-788"></a>           <font color=Red>]</font>
+<a name="line-789"></a>
+<a name="line-790"></a><a name="externalid"></a><font color=Blue>externalid</font> <font color=Red>::</font> XParser ExternalID
+<a name="line-791"></a><font color=Blue>externalid</font> <font color=Red>=</font>
+<a name="line-792"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"SYSTEM"</font><font color=Cyan>,</font> <font color=Green><u>do</u></font> word <font color=Magenta>"SYSTEM"</font>
+<a name="line-793"></a>                           s <font color=Red>&lt;-</font> systemliteral
+<a name="line-794"></a>                           return <font color=Cyan>(</font>SYSTEM s<font color=Cyan>)</font> <font color=Cyan>)</font>
+<a name="line-795"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"PUBLIC"</font><font color=Cyan>,</font> <font color=Green><u>do</u></font> word <font color=Magenta>"PUBLIC"</font>
+<a name="line-796"></a>                           p <font color=Red>&lt;-</font> pubidliteral
+<a name="line-797"></a>                           s <font color=Red>&lt;-</font> systemliteral
+<a name="line-798"></a>                           return <font color=Cyan>(</font>PUBLIC p s<font color=Cyan>)</font> <font color=Cyan>)</font>
+<a name="line-799"></a>           <font color=Red>]</font>
+<a name="line-800"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for an external id,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-801"></a>
+<a name="line-802"></a><a name="ndatadecl"></a><font color=Blue>ndatadecl</font> <font color=Red>::</font> XParser NDataDecl
+<a name="line-803"></a><font color=Blue>ndatadecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-804"></a>    word <font color=Magenta>"NDATA"</font>
+<a name="line-805"></a>    n <font color=Red>&lt;-</font> name
+<a name="line-806"></a>    return <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>
+<a name="line-807"></a>
+<a name="line-808"></a><a name="textdecl"></a><font color=Blue>textdecl</font> <font color=Red>::</font> XParser TextDecl
+<a name="line-809"></a><font color=Blue>textdecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-810"></a>    tok TokPIOpen
+<a name="line-811"></a>    <font color=Cyan>(</font>word <font color=Magenta>"xml"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"XML"</font><font color=Cyan>)</font>
+<a name="line-812"></a>    v <font color=Red>&lt;-</font> maybe versioninfo
+<a name="line-813"></a>    e <font color=Red>&lt;-</font> encodingdecl
+<a name="line-814"></a>    tok TokPIClose <font color=Cyan>`onFail`</font> failP <font color=Magenta>"expected ?&gt; terminating text decl"</font>
+<a name="line-815"></a>    return <font color=Cyan>(</font>TextDecl v e<font color=Cyan>)</font>
+<a name="line-816"></a>
+<a name="line-817"></a><a name="extparsedent"></a><font color=Blue>extparsedent</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>ExtParsedEnt Posn<font color=Cyan>)</font>
+<a name="line-818"></a><font color=Blue>extparsedent</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-819"></a>    t <font color=Red>&lt;-</font> maybe textdecl
+<a name="line-820"></a>    c <font color=Red>&lt;-</font> content
+<a name="line-821"></a>    return <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font>
+<a name="line-822"></a>
+<a name="line-823"></a><a name="extpe"></a><font color=Blue>extpe</font> <font color=Red>::</font> XParser ExtPE
+<a name="line-824"></a><font color=Blue>extpe</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-825"></a>    t <font color=Red>&lt;-</font> maybe textdecl
+<a name="line-826"></a>    e <font color=Red>&lt;-</font> many <font color=Cyan>(</font>peRef extsubsetdecl<font color=Cyan>)</font>
+<a name="line-827"></a>    return <font color=Cyan>(</font>ExtPE t e<font color=Cyan>)</font>
+<a name="line-828"></a>
+<a name="line-829"></a><a name="encodingdecl"></a><font color=Blue>encodingdecl</font> <font color=Red>::</font> XParser EncodingDecl
+<a name="line-830"></a><font color=Blue>encodingdecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-831"></a>    <font color=Cyan>(</font>word <font color=Magenta>"encoding"</font> <font color=Cyan>`onFail`</font> word <font color=Magenta>"ENCODING"</font><font color=Cyan>)</font>
+<a name="line-832"></a>    tok TokEqual <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"expected = in 'encoding' decl"</font>
+<a name="line-833"></a>    f <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-834"></a>    return <font color=Cyan>(</font>EncodingDecl f<font color=Cyan>)</font>
+<a name="line-835"></a>
+<a name="line-836"></a><a name="notationdecl"></a><font color=Blue>notationdecl</font> <font color=Red>::</font> XParser NotationDecl
+<a name="line-837"></a><font color=Blue>notationdecl</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-838"></a>    tok TokSpecialOpen
+<a name="line-839"></a>    tok <font color=Cyan>(</font>TokSpecial NOTATIONx<font color=Cyan>)</font>
+<a name="line-840"></a>    n <font color=Red>&lt;-</font> name
+<a name="line-841"></a>    e <font color=Red>&lt;-</font> either externalid publicid
+<a name="line-842"></a>    tok TokAnyClose <font color=Cyan>`onFail`</font> failBadP <font color=Cyan>(</font><font color=Magenta>"expected &gt; terminating NOTATION decl "</font><font color=Cyan>++</font>n<font color=Cyan>)</font>
+<a name="line-843"></a>    return <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>
+<a name="line-844"></a>
+<a name="line-845"></a><a name="publicid"></a><font color=Blue>publicid</font> <font color=Red>::</font> XParser PublicID
+<a name="line-846"></a><font color=Blue>publicid</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-847"></a>    word <font color=Magenta>"PUBLIC"</font>
+<a name="line-848"></a>    p <font color=Red>&lt;-</font> pubidliteral
+<a name="line-849"></a>    return <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>
+<a name="line-850"></a>
+<a name="line-851"></a><a name="entityvalue"></a><font color=Blue>entityvalue</font> <font color=Red>::</font> XParser EntityValue
+<a name="line-852"></a><font color=Blue>entityvalue</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-853"></a> <font color=Blue>-- evs &lt;- bracket (tok TokQuote) (tok TokQuote) (many (peRef ev))</font>
+<a name="line-854"></a>    tok TokQuote
+<a name="line-855"></a>    pn <font color=Red>&lt;-</font> posn
+<a name="line-856"></a>    evs <font color=Red>&lt;-</font> many ev
+<a name="line-857"></a>    tok TokQuote <font color=Cyan>`onFail`</font> failBadP <font color=Magenta>"expected quote to terminate entityvalue"</font>
+<a name="line-858"></a>    <font color=Blue>-- quoted text must be rescanned for possible PERefs</font>
+<a name="line-859"></a>    st <font color=Red>&lt;-</font> stGet
+<a name="line-860"></a> <font color=Blue>-- Prelude.either failBad (return . EntityValue) . fst3 $</font>
+<a name="line-861"></a>    return <font color=Cyan>.</font> EntityValue <font color=Cyan>.</font> fst3 <font color=Cyan>$</font>
+<a name="line-862"></a>                <font color=Cyan>(</font>runParser <font color=Cyan>(</font>many ev<font color=Cyan>)</font> st
+<a name="line-863"></a>                         <font color=Cyan>(</font>reLexEntityValue <font color=Cyan>(</font><font color=Red>\</font>s<font color=Red>-&gt;</font> stringify <font color=Cyan>(</font>lookupPE s st<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-864"></a>                                           pn
+<a name="line-865"></a>                                           <font color=Cyan>(</font>flattenEV <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-866"></a>  <font color=Green><u>where</u></font>
+<a name="line-867"></a>    stringify <font color=Cyan>(</font>Just <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> Just <font color=Cyan>(</font>flattenEV ev<font color=Cyan>)</font>
+<a name="line-868"></a>    stringify <font color=Green><u>_</u></font> <font color=Red>=</font> Nothing
+<a name="line-869"></a>
+<a name="line-870"></a><a name="ev"></a><font color=Blue>ev</font> <font color=Red>::</font> XParser EV
+<a name="line-871"></a><font color=Blue>ev</font> <font color=Red>=</font>
+<a name="line-872"></a>    oneOf' <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"string"</font><font color=Cyan>,</font>    <font color=Cyan>(</font>string<font color=Cyan>`onFail`</font>freetext<font color=Cyan>)</font> <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVString<font color=Cyan>)</font>
+<a name="line-873"></a>           <font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"reference"</font><font color=Cyan>,</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> EVRef<font color=Cyan>)</font>
+<a name="line-874"></a>           <font color=Red>]</font>
+<a name="line-875"></a>      <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Magenta>"looking for entity value,\n"</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-876"></a>
+<a name="line-877"></a><a name="attvalue"></a><font color=Blue>attvalue</font> <font color=Red>::</font> XParser AttValue
+<a name="line-878"></a><font color=Blue>attvalue</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-879"></a>    avs <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font>
+<a name="line-880"></a>                   <font color=Cyan>(</font>many <font color=Cyan>(</font>either freetext reference<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-881"></a>    return <font color=Cyan>(</font>AttValue avs<font color=Cyan>)</font>
+<a name="line-882"></a>
+<a name="line-883"></a><a name="systemliteral"></a><font color=Blue>systemliteral</font> <font color=Red>::</font> XParser SystemLiteral
+<a name="line-884"></a><font color=Blue>systemliteral</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-885"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-886"></a>    return <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>            <font color=Blue>-- note: refs &amp;...; not permitted</font>
+<a name="line-887"></a>
+<a name="line-888"></a><a name="pubidliteral"></a><font color=Blue>pubidliteral</font> <font color=Red>::</font> XParser PubidLiteral
+<a name="line-889"></a><font color=Blue>pubidliteral</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-890"></a>    s <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> <font color=Cyan>(</font>tok TokQuote<font color=Cyan>)</font> freetext
+<a name="line-891"></a>    return <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>             <font color=Blue>-- note: freetext is too liberal here</font>
+<a name="line-892"></a>
+<a name="line-893"></a><a name="chardata"></a><font color=Blue>-- | Return parsed freetext (i.e. until the next markup)</font>
+<a name="line-894"></a><font color=Blue>chardata</font> <font color=Red>::</font> XParser CharData
+<a name="line-895"></a><font color=Blue>chardata</font> <font color=Red>=</font> freetext
+<a name="line-896"></a>
+</pre>
+</body>
 </html>
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
@@ -1,79 +1,86 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | Define a position datatype for giving locations in error messages.</font>
-<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>Posn
-<a name="(line3)"></a>  <font color=Cyan>(</font>
-<a name="(line4)"></a>  <font color=Blue>-- * Position type</font>
-<a name="(line5)"></a>    Posn()
-<a name="(line6)"></a>  <font color=Blue>-- ** Constructors of a new position</font>
-<a name="(line7)"></a>  <font color=Cyan>,</font> posInNewCxt    <font color=Blue>-- :: String -&gt; Maybe Posn -&gt; Posn</font>
-<a name="(line8)"></a>  <font color=Cyan>,</font> noPos          <font color=Blue>-- :: Posn</font>
-<a name="(line9)"></a>  <font color=Blue>-- ** Strictifier</font>
-<a name="(line10)"></a>  <font color=Cyan>,</font> forcep
-<a name="(line11)"></a>  <font color=Blue>-- ** Modifiers</font>
-<a name="(line12)"></a>  <font color=Cyan>,</font> addcol<font color=Cyan>,</font> newline<font color=Cyan>,</font> tab<font color=Cyan>,</font> white
-<a name="(line13)"></a>  <font color=Blue>-- ** Accessors</font>
-<a name="(line14)"></a>  <font color=Cyan>,</font> posnFilename<font color=Cyan>,</font> posnLine<font color=Cyan>,</font> posnColumn
-<a name="(line15)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line16)"></a>
-<a name="(line17)"></a><font color=Green><u>import</u></font> Char
-<a name="(line18)"></a>
-<a name="(line19)"></a><a name="Posn"></a><font color=Blue>-- | Source positions contain a filename, line, column, and an</font>
-<a name="(line20)"></a><a name="Posn"></a><font color=Blue>--   inclusion point, which is itself another source position,</font>
-<a name="(line21)"></a><a name="Posn"></a><font color=Blue>--   recursively.</font>
-<a name="(line22)"></a><a name="Posn"></a><font color=Green><u>data</u></font> Posn <font color=Red>=</font> Pn String <font color=Cyan>!</font>Int <font color=Cyan>!</font>Int <font color=Cyan>(</font>Maybe Posn<font color=Cyan>)</font>
-<a name="(line23)"></a>        <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>)</font>
-<a name="(line24)"></a>
-<a name="(line25)"></a><a name="posnFilename"></a>posnFilename <font color=Red>::</font> Posn <font color=Red>-&gt;</font> FilePath
-<a name="(line26)"></a>posnFilename <font color=Cyan>(</font>Pn f <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> f
-<a name="(line27)"></a>
-<a name="(line28)"></a><a name="posnLine"></a>posnLine<font color=Cyan>,</font> posnColumn <font color=Red>::</font> Posn <font color=Red>-&gt;</font> Int
-<a name="(line29)"></a>posnLine   <font color=Cyan>(</font>Pn <font color=Green><u>_</u></font> x <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> x
-<a name="(line30)"></a><a name="posnColumn"></a>posnColumn <font color=Cyan>(</font>Pn <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> x <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> x
-<a name="(line31)"></a>
-<a name="(line32)"></a><a name="noPos"></a><font color=Blue>-- | Dummy value for generated data, where a true source position does</font>
-<a name="(line33)"></a><font color=Blue>--   not exist.</font>
-<a name="(line34)"></a>noPos <font color=Red>::</font> Posn
-<a name="(line35)"></a>noPos <font color=Red>=</font> Pn <font color=Magenta>"no recorded position"</font> <font color=Magenta>0</font> <font color=Magenta>0</font> Nothing
-<a name="(line36)"></a>
-<a name="(line37)"></a><a name="posInNewCxt"></a><font color=Blue>-- | @posInNewCxt name pos@ creates a new source position from an old one.</font>
-<a name="(line38)"></a><font color=Blue>--   It is used when opening a new file (e.g. a DTD inclusion), to denote</font>
-<a name="(line39)"></a><font color=Blue>--   the start of the file @name@, but retain the stacked information that</font>
-<a name="(line40)"></a><font color=Blue>--   it was included from the old @pos@.</font>
-<a name="(line41)"></a>posInNewCxt <font color=Red>::</font> String <font color=Red>-&gt;</font> Maybe Posn <font color=Red>-&gt;</font> Posn
-<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 <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>
-<a name="(line49)"></a>                                    Nothing <font color=Red>-&gt;</font> id
-<a name="(line50)"></a>                                    Just p  <font color=Red>-&gt;</font> showString <font color=Magenta>"\n    used by  "</font> <font color=Cyan>.</font>
-<a name="(line51)"></a>                                               shows p <font color=Cyan>)</font>
-<a name="(line52)"></a>
-<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 <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
-<a name="(line60)"></a>addcol n <font color=Cyan>(</font>Pn f r c i<font color=Cyan>)</font> <font color=Red>=</font> Pn f r <font color=Cyan>(</font>c<font color=Cyan>+</font>n<font color=Cyan>)</font> i
-<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 <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>
-<a name="(line68)"></a><font color=Blue>--   Precondition: @white c | isSpace c = True@</font>
-<a name="(line69)"></a>white <font color=Red>::</font> Char <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> Posn
-<a name="(line70)"></a>white <font color=Magenta>' '</font>  <font color=Red>=</font> addcol <font color=Magenta>1</font>
-<a name="(line71)"></a>white <font color=Magenta>'\n'</font> <font color=Red>=</font> newline
-<a name="(line72)"></a>white <font color=Magenta>'\r'</font> <font color=Red>=</font> id
-<a name="(line73)"></a>white <font color=Magenta>'\t'</font> <font color=Red>=</font> tab
-<a name="(line74)"></a>white <font color=Magenta>'\xa0'</font> <font color=Red>=</font> addcol <font color=Magenta>1</font>
-<a name="(line75)"></a>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Posn.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | Define a position datatype for giving locations in error messages.</font>
+<a name="line-2"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn
+<a name="line-3"></a>  <font color=Cyan>(</font>
+<a name="line-4"></a>  <font color=Blue>-- * Position type</font>
+<a name="line-5"></a>    Posn()
+<a name="line-6"></a>  <font color=Blue>-- ** Constructors of a new position</font>
+<a name="line-7"></a>  <font color=Cyan>,</font> posInNewCxt    <font color=Blue>-- :: String -&gt; Maybe Posn -&gt; Posn</font>
+<a name="line-8"></a>  <font color=Cyan>,</font> noPos          <font color=Blue>-- :: Posn</font>
+<a name="line-9"></a>  <font color=Blue>-- ** Strictifier</font>
+<a name="line-10"></a>  <font color=Cyan>,</font> forcep
+<a name="line-11"></a>  <font color=Blue>-- ** Modifiers</font>
+<a name="line-12"></a>  <font color=Cyan>,</font> addcol<font color=Cyan>,</font> newline<font color=Cyan>,</font> tab<font color=Cyan>,</font> white
+<a name="line-13"></a>  <font color=Blue>-- ** Accessors</font>
+<a name="line-14"></a>  <font color=Cyan>,</font> posnFilename<font color=Cyan>,</font> posnLine<font color=Cyan>,</font> posnColumn
+<a name="line-15"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-16"></a>
+<a name="line-17"></a><font color=Green><u>import</u></font> Char
+<a name="line-18"></a>
+<a name="line-19"></a><a name="Posn"></a><font color=Blue>-- | Source positions contain a filename, line, column, and an</font>
+<a name="line-20"></a><a name="Posn"></a><font color=Blue>--   inclusion point, which is itself another source position,</font>
+<a name="line-21"></a><a name="Posn"></a><font color=Blue>--   recursively.</font>
+<a name="line-22"></a><a name="Posn"></a><font color=Green><u>data</u></font> Posn <font color=Red>=</font> Pn String <font color=Cyan>!</font>Int <font color=Cyan>!</font>Int <font color=Cyan>(</font>Maybe Posn<font color=Cyan>)</font>
+<a name="line-23"></a>        <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>)</font>
+<a name="line-24"></a>
+<a name="line-25"></a><a name="posnFilename"></a><font color=Blue>posnFilename</font> <font color=Red>::</font> Posn <font color=Red>-&gt;</font> FilePath
+<a name="line-26"></a><font color=Blue>posnFilename</font> <font color=Cyan>(</font>Pn f <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> f
+<a name="line-27"></a>
+<a name="line-28"></a><a name="posnLine"></a><font color=Blue>posnLine</font><font color=Cyan>,</font> posnColumn <font color=Red>::</font> Posn <font color=Red>-&gt;</font> Int
+<a name="line-29"></a><font color=Blue>posnLine</font>   <font color=Cyan>(</font>Pn <font color=Green><u>_</u></font> x <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> x
+<a name="line-30"></a><a name="posnColumn"></a><font color=Blue>posnColumn</font> <font color=Cyan>(</font>Pn <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> x <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> x
+<a name="line-31"></a>
+<a name="line-32"></a><a name="noPos"></a><font color=Blue>-- | Dummy value for generated data, where a true source position does</font>
+<a name="line-33"></a><font color=Blue>--   not exist.</font>
+<a name="line-34"></a><font color=Blue>noPos</font> <font color=Red>::</font> Posn
+<a name="line-35"></a><font color=Blue>noPos</font> <font color=Red>=</font> Pn <font color=Magenta>"no recorded position"</font> <font color=Magenta>0</font> <font color=Magenta>0</font> Nothing
+<a name="line-36"></a>
+<a name="line-37"></a><a name="posInNewCxt"></a><font color=Blue>-- | @posInNewCxt name pos@ creates a new source position from an old one.</font>
+<a name="line-38"></a><font color=Blue>--   It is used when opening a new file (e.g. a DTD inclusion), to denote</font>
+<a name="line-39"></a><font color=Blue>--   the start of the file @name@, but retain the stacked information that</font>
+<a name="line-40"></a><font color=Blue>--   it was included from the old @pos@.</font>
+<a name="line-41"></a><font color=Blue>posInNewCxt</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> Maybe Posn <font color=Red>-&gt;</font> Posn
+<a name="line-42"></a><font color=Blue>posInNewCxt</font> name pos <font color=Red>=</font> Pn name <font color=Magenta>1</font> <font color=Magenta>1</font> pos
+<a name="line-43"></a>
+<a name="line-44"></a><font color=Green><u>instance</u></font> Show Posn <font color=Green><u>where</u></font>
+<a name="line-45"></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 <font color=Magenta>"file "</font> <font color=Cyan>.</font>
+<a name="line-46"></a>                                 showString f <font color=Cyan>.</font>
+<a name="line-47"></a>                                 showString <font color=Magenta>"  at line "</font> <font color=Cyan>.</font> shows l <font color=Cyan>.</font>
+<a name="line-48"></a>                                 showString <font color=Magenta>" col "</font> <font color=Cyan>.</font> shows c <font color=Cyan>.</font>
+<a name="line-49"></a>                                 <font color=Cyan>(</font> <font color=Green><u>case</u></font> i <font color=Green><u>of</u></font>
+<a name="line-50"></a>                                    Nothing <font color=Red>-&gt;</font> id
+<a name="line-51"></a>                                    Just p  <font color=Red>-&gt;</font> showString <font color=Magenta>"\n    used by  "</font> <font color=Cyan>.</font>
+<a name="line-52"></a>                                               shows p <font color=Cyan>)</font>
+<a name="line-53"></a>
+<a name="line-54"></a><a name="forcep"></a><font color=Blue>-- | Just used to strictify the internal values of a position, to avoid</font>
+<a name="line-55"></a><font color=Blue>--   space leaks.</font>
+<a name="line-56"></a><font color=Blue>forcep</font> <font color=Red>::</font> Posn <font color=Red>-&gt;</font> Int
+<a name="line-57"></a><font color=Blue>forcep</font> <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="line-58"></a>
+<a name="line-59"></a><a name="addcol"></a><font color=Blue>-- | Add n character positions to the given position.</font>
+<a name="line-60"></a><font color=Blue>addcol</font> <font color=Red>::</font> Int <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> Posn
+<a name="line-61"></a><font color=Blue>addcol</font> n <font color=Cyan>(</font>Pn f r c i<font color=Cyan>)</font> <font color=Red>=</font> Pn f r <font color=Cyan>(</font>c<font color=Cyan>+</font>n<font color=Cyan>)</font> i
+<a name="line-62"></a>
+<a name="line-63"></a><a name="newline"></a><font color=Blue>-- | Add a newline or tab to the given position.</font>
+<a name="line-64"></a><font color=Blue>newline</font><font color=Cyan>,</font> tab <font color=Red>::</font> Posn <font color=Red>-&gt;</font> Posn
+<a name="line-65"></a><font color=Blue>newline</font> <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="line-66"></a><a name="tab"></a><font color=Blue>tab</font>     <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="line-67"></a>
+<a name="line-68"></a><a name="white"></a><font color=Blue>-- | Add the given whitespace char to the given position.</font>
+<a name="line-69"></a><font color=Blue>--   Precondition: @white c | isSpace c = True@</font>
+<a name="line-70"></a><font color=Blue>white</font> <font color=Red>::</font> Char <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> Posn
+<a name="line-71"></a><font color=Blue>white</font> <font color=Magenta>' '</font>  <font color=Red>=</font> addcol <font color=Magenta>1</font>
+<a name="line-72"></a><font color=Blue>white</font> <font color=Magenta>'\n'</font> <font color=Red>=</font> newline
+<a name="line-73"></a><font color=Blue>white</font> <font color=Magenta>'\r'</font> <font color=Red>=</font> id
+<a name="line-74"></a><font color=Blue>white</font> <font color=Magenta>'\t'</font> <font color=Red>=</font> tab
+<a name="line-75"></a><font color=Blue>white</font> <font color=Magenta>'\xa0'</font> <font color=Red>=</font> addcol <font color=Magenta>1</font>
+<a name="line-76"></a>
 </pre>
+</body>
 </html>
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
@@ -1,302 +1,308 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | This is a pretty-printer for turning the internal representation</font>
-<a name="(line2)"></a><font color=Blue>--   of generic structured XML documents into the Doc type (which can</font>
-<a name="(line3)"></a><font color=Blue>--   later be rendered using Text.PrettyPrint.HughesPJ.render).</font>
-<a name="(line4)"></a><font color=Blue>--   Essentially there is one pp function for each type in</font>
-<a name="(line5)"></a><font color=Blue>--   Text.Xml.HaXml.Types, so you can pretty-print as much or as little</font>
-<a name="(line6)"></a><font color=Blue>--   of the document as you wish.</font>
-<a name="(line7)"></a>
-<a name="(line8)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty
-<a name="(line9)"></a>  <font color=Cyan>(</font>
-<a name="(line10)"></a>  <font color=Blue>-- * Pretty-print a whole document</font>
-<a name="(line11)"></a>    document
-<a name="(line12)"></a>  <font color=Blue>-- ** Just one content</font>
-<a name="(line13)"></a>  <font color=Cyan>,</font>   content
-<a name="(line14)"></a>  <font color=Blue>-- ** Just one tagged element</font>
-<a name="(line15)"></a>  <font color=Cyan>,</font>   element
-<a name="(line16)"></a>  <font color=Blue>-- * Pretty-print just a DTD</font>
-<a name="(line17)"></a>  <font color=Cyan>,</font> doctypedecl
-<a name="(line18)"></a>  <font color=Blue>-- ** The prolog</font>
-<a name="(line19)"></a>  <font color=Cyan>,</font>   prolog
-<a name="(line20)"></a>  <font color=Blue>-- ** A content particle description</font>
-<a name="(line21)"></a>  <font color=Cyan>,</font>   cp
-<a name="(line22)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line23)"></a>
-<a name="(line24)"></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="(line25)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
-<a name="(line26)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font>
-<a name="(line27)"></a><font color=Blue>--import Char (isSpace)</font>
-<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 <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>--peref p   = text "%" &lt;&gt; text p &lt;&gt; text ";"</font>
-<a name="(line40)"></a>
-<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><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
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Pretty.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | This is a pretty-printer for turning the internal representation</font>
+<a name="line-2"></a><font color=Blue>--   of generic structured XML documents into the Doc type (which can</font>
+<a name="line-3"></a><font color=Blue>--   later be rendered using Text.PrettyPrint.HughesPJ.render).</font>
+<a name="line-4"></a><font color=Blue>--   Essentially there is one pp function for each type in</font>
+<a name="line-5"></a><font color=Blue>--   Text.Xml.HaXml.Types, so you can pretty-print as much or as little</font>
+<a name="line-6"></a><font color=Blue>--   of the document as you wish.</font>
+<a name="line-7"></a>
+<a name="line-8"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty
+<a name="line-9"></a>  <font color=Cyan>(</font>
+<a name="line-10"></a>  <font color=Blue>-- * Pretty-print a whole document</font>
+<a name="line-11"></a>    document
+<a name="line-12"></a>  <font color=Blue>-- ** Just one content</font>
+<a name="line-13"></a>  <font color=Cyan>,</font>   content
+<a name="line-14"></a>  <font color=Blue>-- ** Just one tagged element</font>
+<a name="line-15"></a>  <font color=Cyan>,</font>   element
+<a name="line-16"></a>  <font color=Blue>-- * Pretty-print just a DTD</font>
+<a name="line-17"></a>  <font color=Cyan>,</font> doctypedecl
+<a name="line-18"></a>  <font color=Blue>-- ** The prolog</font>
+<a name="line-19"></a>  <font color=Cyan>,</font>   prolog
+<a name="line-20"></a>  <font color=Blue>-- ** A content particle description</font>
+<a name="line-21"></a>  <font color=Cyan>,</font>   cp
+<a name="line-22"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-23"></a>
+<a name="line-24"></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="line-25"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
+<a name="line-26"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font>
+<a name="line-27"></a><font color=Blue>--import Char (isSpace)</font>
+<a name="line-28"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ
+<a name="line-29"></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="line-30"></a>
+<a name="line-31"></a><a name="either"></a><font color=Blue>either</font> <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="line-32"></a><font color=Blue>either</font> 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="line-33"></a><font color=Blue>either</font> <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="line-34"></a>
+<a name="line-35"></a><a name="maybe"></a><font color=Blue>maybe</font> <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="line-36"></a><font color=Blue>maybe</font> <font color=Green><u>_</u></font> Nothing  <font color=Red>=</font> empty
+<a name="line-37"></a><font color=Blue>maybe</font> f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x
+<a name="line-38"></a>
+<a name="line-39"></a><font color=Blue>--peref p   = text "%" &lt;&gt; text p &lt;&gt; text ";"</font>
+<a name="line-40"></a>
+<a name="line-41"></a><font color=Blue>----</font>
+<a name="line-42"></a>
+<a name="line-43"></a><a name="document"></a><font color=Blue>document</font> <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Doc
+<a name="line-44"></a><a name="prolog"></a><font color=Blue>prolog</font>   <font color=Red>::</font> Prolog <font color=Red>-&gt;</font> Doc
+<a name="line-45"></a><a name="xmldecl"></a><font color=Blue>xmldecl</font>  <font color=Red>::</font> XMLDecl <font color=Red>-&gt;</font> Doc
+<a name="line-46"></a><a name="misc"></a><font color=Blue>misc</font>     <font color=Red>::</font> Misc <font color=Red>-&gt;</font> Doc
+<a name="line-47"></a><a name="sddecl"></a><font color=Blue>sddecl</font>   <font color=Red>::</font> Bool <font color=Red>-&gt;</font> Doc
+<a name="line-48"></a>
+<a name="line-49"></a><a name="doctypedecl"></a><font color=Blue>doctypedecl</font> <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Doc
+<a name="line-50"></a><a name="markupdecl"></a><font color=Blue>markupdecl</font>  <font color=Red>::</font> MarkupDecl <font color=Red>-&gt;</font> Doc
+<a name="line-51"></a><a name="extsubset"></a><font color=Blue>extsubset</font>   <font color=Red>::</font> ExtSubset <font color=Red>-&gt;</font> Doc
+<a name="line-52"></a><a name="extsubsetdecl"></a><font color=Blue>extsubsetdecl</font> <font color=Red>::</font> ExtSubsetDecl <font color=Red>-&gt;</font> Doc
+<a name="line-53"></a><a name="cp"></a><font color=Blue>cp</font>          <font color=Red>::</font> CP <font color=Red>-&gt;</font> Doc
+<a name="line-54"></a>
+<a name="line-55"></a><a name="element"></a><font color=Blue>element</font>   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> Doc
+<a name="line-56"></a><a name="attribute"></a><font color=Blue>attribute</font> <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> Doc                     <font color=Cyan>--etc</font>
+<a name="line-57"></a><a name="content"></a><font color=Blue>content</font>   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> Doc
+<a name="line-58"></a>
+<a name="line-59"></a><font color=Blue>----</font>
+<a name="line-60"></a>
+<a name="line-61"></a><font color=Blue>document</font> <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="line-62"></a><font color=Blue>prolog</font> <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="line-63"></a>                             vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="line-64"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>
+<a name="line-65"></a>                             vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>
+<a name="line-66"></a><font color=Blue>xmldecl</font> <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="line-67"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>
+<a name="line-68"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>
+<a name="line-69"></a>                             text <font color=Magenta>"?&gt;"</font>
+<a name="line-70"></a><font color=Blue>misc</font> <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="line-71"></a><font color=Blue>misc</font> <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="line-72"></a><font color=Blue>sddecl</font> sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>
+<a name="line-73"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>
+<a name="line-74"></a><font color=Blue>doctypedecl</font> <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="line-75"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="line-76"></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="line-77"></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="line-78"></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="line-79"></a>                                      maybe externalid eid
+<a name="line-80"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e
+<a name="line-81"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a
+<a name="line-82"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e
+<a name="line-83"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n
+<a name="line-84"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m
+<a name="line-85"></a><font color=Blue>-- markupdecl (MarkupPE p m)  = peref p</font>
+<a name="line-86"></a><font color=Blue>extsubset</font> <font color=Cyan>(</font>ExtSubset t ds<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan>$$</font>
+<a name="line-87"></a>                             vcat <font color=Cyan>(</font>map extsubsetdecl ds<font color=Cyan>)</font>
+<a name="line-88"></a><a name="extmarkupdecl"></a><font color=Blue>extmarkupdecl</font> <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font>      <font color=Red>=</font> markupdecl m
+<a name="line-89"></a><font color=Blue>extsubsetdecl</font> <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c
+<a name="line-90"></a><font color=Blue>-- extsubsetdecl (ExtPEReference p e)   = peref p</font>
+<a name="line-91"></a>
+<a name="line-92"></a><font color=Blue>element</font> <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="line-93"></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="line-94"></a><font color=Blue>element</font> 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="line-95"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>
+<a name="line-96"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>
+<a name="line-97"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>
+<a name="line-98"></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="line-99"></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="line-100"></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="line-101"></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="line-102"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c
+<a name="line-103"></a>
+<a name="line-104"></a><a name="isText"></a><font color=Blue>isText</font> <font color=Red>::</font> Content t <font color=Red>-&gt;</font> Bool
+<a name="line-105"></a><font color=Blue>isText</font> <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="line-106"></a><font color=Blue>isText</font> <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="line-107"></a><font color=Blue>isText</font> <font color=Green><u>_</u></font>               <font color=Red>=</font> False
+<a name="line-108"></a>
+<a name="line-109"></a><a name="carryelem"></a><font color=Blue>carryelem</font> <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="line-110"></a><a name="carrycontent"></a><font color=Blue>carrycontent</font> <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="line-111"></a><font color=Blue>carryelem</font> <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c
+<a name="line-112"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
+<a name="line-113"></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="line-114"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>
+<a name="line-115"></a><font color=Blue>carryelem</font> <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c
+<a name="line-116"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>
+<a name="line-117"></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="line-118"></a>                          <font color=Green><u>in</u></font>
+<a name="line-119"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
+<a name="line-120"></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="line-121"></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="line-122"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n
+<a name="line-123"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="line-124"></a><font color=Blue>carrycontent</font> <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="line-125"></a><font color=Blue>carrycontent</font> <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="line-126"></a><font color=Blue>carrycontent</font> <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="line-127"></a><font color=Blue>carrycontent</font> <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="line-128"></a><font color=Blue>carrycontent</font> <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="line-129"></a>
+<a name="line-130"></a><a name="carryscan"></a><font color=Blue>carryscan</font> <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="line-131"></a><font color=Blue>carryscan</font> <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="line-132"></a><font color=Blue>carryscan</font> 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="line-133"></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="line-134"></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="line-135"></a>
+<a name="line-136"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>
+<a name="line-137"></a><font color=Blue>--  | isText (head cs) =</font>
+<a name="line-138"></a><font color=Blue>--        ( start &lt;&gt;</font>
+<a name="line-139"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
+<a name="line-140"></a><font color=Blue>--        , text "&gt;")</font>
+<a name="line-141"></a><font color=Blue>--  | otherwise =</font>
+<a name="line-142"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>
+<a name="line-143"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
+<a name="line-144"></a><font color=Blue>--        , text "&gt;")</font>
+<a name="line-145"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>
+<a name="line-146"></a><font color=Blue>--</font>
+<a name="line-147"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>
+<a name="line-148"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>
+<a name="line-149"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>
+<a name="line-150"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>
+<a name="line-151"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>
+<a name="line-152"></a>
+<a name="line-153"></a>
+<a name="line-154"></a><font color=Blue>attribute</font> <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="line-155"></a><font color=Blue>content</font> <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e
+<a name="line-156"></a><font color=Blue>content</font> <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="line-157"></a><font color=Blue>content</font> <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="line-158"></a><font color=Blue>content</font> <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r
+<a name="line-159"></a><font color=Blue>content</font> <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m
+<a name="line-160"></a>
+<a name="line-161"></a><a name="elementdecl"></a><font color=Blue>elementdecl</font> <font color=Red>::</font> ElementDecl <font color=Red>-&gt;</font> Doc
+<a name="line-162"></a><font color=Blue>elementdecl</font> <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="line-163"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="line-164"></a><a name="contentspec"></a><font color=Blue>contentspec</font> <font color=Red>::</font> ContentSpec <font color=Red>-&gt;</font> Doc
+<a name="line-165"></a><font color=Blue>contentspec</font> EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>
+<a name="line-166"></a><font color=Blue>contentspec</font> ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>
+<a name="line-167"></a><font color=Blue>contentspec</font> <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m
+<a name="line-168"></a><font color=Blue>contentspec</font> <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c
+<a name="line-169"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>
+<a name="line-170"></a><font color=Blue>cp</font> <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="line-171"></a><font color=Blue>cp</font> <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="line-172"></a>                           modifier m
+<a name="line-173"></a><font color=Blue>cp</font> <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="line-174"></a>                           modifier m
+<a name="line-175"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>
+<a name="line-176"></a><font color=Blue>modifier</font> <font color=Red>::</font> Modifier <font color=Red>-&gt;</font> Doc
+<a name="line-177"></a><font color=Blue>modifier</font> None          <font color=Red>=</font> empty
+<a name="line-178"></a><font color=Blue>modifier</font> Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>
+<a name="line-179"></a><font color=Blue>modifier</font> Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>
+<a name="line-180"></a><font color=Blue>modifier</font> Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>
+<a name="line-181"></a><a name="mixed"></a><font color=Blue>mixed</font> <font color=Red>::</font> Mixed <font color=Red>-&gt;</font> Doc
+<a name="line-182"></a><font color=Blue>mixed</font>  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>
+<a name="line-183"></a><font color=Blue>mixed</font> <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="line-184"></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="line-185"></a>                         text <font color=Magenta>")*"</font>
+<a name="line-186"></a>
+<a name="line-187"></a><a name="attlistdecl"></a><font color=Blue>attlistdecl</font> <font color=Red>::</font> AttListDecl <font color=Red>-&gt;</font> Doc
+<a name="line-188"></a><font color=Blue>attlistdecl</font> <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="line-189"></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="line-190"></a><a name="attdef"></a><font color=Blue>attdef</font> <font color=Red>::</font> AttDef <font color=Red>-&gt;</font> Doc
+<a name="line-191"></a><font color=Blue>attdef</font> <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="line-192"></a><a name="atttype"></a><font color=Blue>atttype</font> <font color=Red>::</font> AttType <font color=Red>-&gt;</font> Doc
+<a name="line-193"></a><font color=Blue>atttype</font>  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>
+<a name="line-194"></a><font color=Blue>atttype</font> <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t
+<a name="line-195"></a><font color=Blue>atttype</font> <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t
+<a name="line-196"></a><a name="tokenizedtype"></a><font color=Blue>tokenizedtype</font> <font color=Red>::</font> TokenizedType <font color=Red>-&gt;</font> Doc
+<a name="line-197"></a><font color=Blue>tokenizedtype</font> ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>
+<a name="line-198"></a><font color=Blue>tokenizedtype</font> IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>
+<a name="line-199"></a><font color=Blue>tokenizedtype</font> IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>
+<a name="line-200"></a><font color=Blue>tokenizedtype</font> ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>
+<a name="line-201"></a><font color=Blue>tokenizedtype</font> ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>
+<a name="line-202"></a><font color=Blue>tokenizedtype</font> NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>
+<a name="line-203"></a><font color=Blue>tokenizedtype</font> NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>
+<a name="line-204"></a><a name="enumeratedtype"></a><font color=Blue>enumeratedtype</font> <font color=Red>::</font> EnumeratedType <font color=Red>-&gt;</font> Doc
+<a name="line-205"></a><font color=Blue>enumeratedtype</font> <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n
+<a name="line-206"></a><font color=Blue>enumeratedtype</font> <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e
+<a name="line-207"></a><a name="notationtype"></a><font color=Blue>notationtype</font> <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> Doc
+<a name="line-208"></a><font color=Blue>notationtype</font> ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="line-209"></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="line-210"></a><a name="enumeration"></a><font color=Blue>enumeration</font> <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> Doc
+<a name="line-211"></a><font color=Blue>enumeration</font> 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="line-212"></a><a name="defaultdecl"></a><font color=Blue>defaultdecl</font> <font color=Red>::</font> DefaultDecl <font color=Red>-&gt;</font> Doc
+<a name="line-213"></a><font color=Blue>defaultdecl</font>  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>
+<a name="line-214"></a><font color=Blue>defaultdecl</font>  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>
+<a name="line-215"></a><font color=Blue>defaultdecl</font> <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="line-216"></a><a name="conditionalsect"></a><font color=Blue>conditionalsect</font> <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="line-217"></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="line-218"></a><font color=Blue>conditionalsect</font> <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="line-219"></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="line-220"></a><a name="ignore"></a><font color=Blue>ignore</font> <font color=Cyan>(</font>Ignore<font color=Cyan>)</font>                <font color=Red>=</font> empty
+<a name="line-221"></a><a name="ignoresectcontents"></a><font color=Blue>ignoresectcontents</font> <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>
+<a name="line-222"></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="line-223"></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="line-224"></a>                                                   ignoresectcontents ics <font color=Cyan>&lt;+&gt;</font>
+<a name="line-225"></a>                                                   text <font color=Magenta>"]]&gt;"</font> <font color=Cyan>&lt;+&gt;</font> ignore i
+<a name="line-226"></a><a name="reference"></a><font color=Blue>reference</font> <font color=Red>::</font> Reference <font color=Red>-&gt;</font> Doc
+<a name="line-227"></a><font color=Blue>reference</font> <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er
+<a name="line-228"></a><font color=Blue>reference</font> <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr
+<a name="line-229"></a><a name="entityref"></a><font color=Blue>entityref</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> Doc
+<a name="line-230"></a><font color=Blue>entityref</font> 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="line-231"></a><a name="charref"></a><font color=Blue>charref</font> <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="line-232"></a><font color=Blue>charref</font> 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="line-233"></a><a name="entitydecl"></a><font color=Blue>entitydecl</font> <font color=Red>::</font> EntityDecl <font color=Red>-&gt;</font> Doc
+<a name="line-234"></a><font color=Blue>entitydecl</font> <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d
+<a name="line-235"></a><font color=Blue>entitydecl</font> <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d
+<a name="line-236"></a><a name="gedecl"></a><font color=Blue>gedecl</font> <font color=Red>::</font> GEDecl <font color=Red>-&gt;</font> Doc
+<a name="line-237"></a><font color=Blue>gedecl</font> <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="line-238"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="line-239"></a><a name="pedecl"></a><font color=Blue>pedecl</font> <font color=Red>::</font> PEDecl <font color=Red>-&gt;</font> Doc
+<a name="line-240"></a><font color=Blue>pedecl</font> <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="line-241"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="line-242"></a><a name="entitydef"></a><font color=Blue>entitydef</font> <font color=Red>::</font> EntityDef <font color=Red>-&gt;</font> Doc
+<a name="line-243"></a><font color=Blue>entitydef</font> <font color=Cyan>(</font>DefEntityValue ew<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ew
+<a name="line-244"></a><font color=Blue>entitydef</font> <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="line-245"></a><a name="pedef"></a><font color=Blue>pedef</font> <font color=Red>::</font> PEDef <font color=Red>-&gt;</font> Doc
+<a name="line-246"></a><font color=Blue>pedef</font> <font color=Cyan>(</font>PEDefEntityValue ew<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ew
+<a name="line-247"></a><font color=Blue>pedef</font> <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid
+<a name="line-248"></a><a name="externalid"></a><font color=Blue>externalid</font> <font color=Red>::</font> ExternalID <font color=Red>-&gt;</font> Doc
+<a name="line-249"></a><font color=Blue>externalid</font> <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="line-250"></a><font color=Blue>externalid</font> <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="line-251"></a>                                 systemliteral sl
+<a name="line-252"></a><a name="ndatadecl"></a><font color=Blue>ndatadecl</font> <font color=Red>::</font> NDataDecl <font color=Red>-&gt;</font> Doc
+<a name="line-253"></a><font color=Blue>ndatadecl</font> <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="line-254"></a><a name="textdecl"></a><font color=Blue>textdecl</font> <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="line-255"></a>                                 encodingdecl ed <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"?&gt;"</font>
+<a name="line-256"></a><a name="extparsedent"></a><font color=Blue>extparsedent</font> <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="line-257"></a><a name="extpe"></a><font color=Blue>extpe</font> <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="line-258"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl esd<font color=Cyan>)</font>
+<a name="line-259"></a><a name="notationdecl"></a><font color=Blue>notationdecl</font> <font color=Red>::</font> NotationDecl <font color=Red>-&gt;</font> Doc
+<a name="line-260"></a><font color=Blue>notationdecl</font> <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="line-261"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>
+<a name="line-262"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="line-263"></a><a name="publicid"></a><font color=Blue>publicid</font> <font color=Red>::</font> PublicID <font color=Red>-&gt;</font> Doc
+<a name="line-264"></a><font color=Blue>publicid</font> <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="line-265"></a><a name="encodingdecl"></a><font color=Blue>encodingdecl</font> <font color=Red>::</font> EncodingDecl <font color=Red>-&gt;</font> Doc
+<a name="line-266"></a><font color=Blue>encodingdecl</font> <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="line-267"></a><a name="nmtoken"></a><font color=Blue>nmtoken</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> Doc
+<a name="line-268"></a><font color=Blue>nmtoken</font> s                      <font color=Red>=</font> text s
+<a name="line-269"></a><a name="attvalue"></a><font color=Blue>attvalue</font> <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> Doc
+<a name="line-270"></a><font color=Blue>attvalue</font> <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="line-271"></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="line-272"></a>                                 text <font color=Magenta>"\""</font>
+<a name="line-273"></a><a name="entityvalue"></a><font color=Blue>entityvalue</font> <font color=Red>::</font> EntityValue <font color=Red>-&gt;</font> Doc
+<a name="line-274"></a><font color=Blue>entityvalue</font> <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>
+<a name="line-275"></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="line-276"></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="line-277"></a><a name="ev"></a><font color=Blue>ev</font> <font color=Red>::</font> EV <font color=Red>-&gt;</font> Doc
+<a name="line-278"></a><font color=Blue>ev</font> <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s
+<a name="line-279"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>
+<a name="line-280"></a><font color=Blue>ev</font> <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r
+<a name="line-281"></a><a name="pubidliteral"></a><font color=Blue>pubidliteral</font> <font color=Red>::</font> PubidLiteral <font color=Red>-&gt;</font> Doc
+<a name="line-282"></a><font color=Blue>pubidliteral</font> <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>
+<a name="line-283"></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="line-284"></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="line-285"></a><a name="systemliteral"></a><font color=Blue>systemliteral</font> <font color=Red>::</font> SystemLiteral <font color=Red>-&gt;</font> Doc
+<a name="line-286"></a><font color=Blue>systemliteral</font> <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>
+<a name="line-287"></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="line-288"></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="line-289"></a><a name="chardata"></a><font color=Blue>chardata</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> Doc
+<a name="line-290"></a><font color=Blue>chardata</font> s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s
+<a name="line-291"></a><a name="cdsect"></a><font color=Blue>cdsect</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> Doc
+<a name="line-292"></a><font color=Blue>cdsect</font> 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="line-293"></a>
+<a name="line-294"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>
+<a name="line-295"></a><font color=Blue>containsDoubleQuote</font> <font color=Red>::</font> <font color=Red>[</font>EV<font color=Red>]</font> <font color=Red>-&gt;</font> Bool
+<a name="line-296"></a><font color=Blue>containsDoubleQuote</font> evs <font color=Red>=</font> any csq evs
+<a name="line-297"></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="line-298"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False
 </pre>
+</body>
 </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
@@ -1,97 +1,103 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | A streaming XML parser, using a method known as SAX. SAX isn't really a</font>
-<a name="(line2)"></a><font color=Blue>--   standard, but an implementation, so it's just an \"SAX-like\" parser.</font>
-<a name="(line3)"></a><font color=Blue>--   This module allows you parse an XML document without having to evaluate</font>
-<a name="(line4)"></a><font color=Blue>--   it as a whole. This is needed for protocols like jabber, which use xml</font>
-<a name="(line5)"></a><font color=Blue>--   streams for communication.</font>
-<a name="(line6)"></a>
-<a name="(line7)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>SAX
-<a name="(line8)"></a>	<font color=Cyan>(</font> SaxElement<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line9)"></a>	<font color=Cyan>,</font> saxParse
-<a name="(line10)"></a>	<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line11)"></a>
-<a name="(line12)"></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="(line13)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse
-<a name="(line14)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Lex
-<a name="(line15)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly<font color=Cyan>.</font>NoLeak<font color=Cyan>.</font>State
-<a name="(line16)"></a>
-<a name="(line17)"></a><a name="SaxElement"></a><font color=Green><u>data</u></font> SaxElement
-<a name="(line18)"></a>	<font color=Red>=</font> SaxDocTypeDecl DocTypeDecl
-<a name="(line19)"></a>		<font color=Blue>-- ^ A doctype declaration occured(\&lt;!DOCTYPE\&gt;)</font>
-<a name="(line20)"></a>	<font color=Red>|</font> SaxProcessingInstruction ProcessingInstruction
-<a name="(line21)"></a>		<font color=Blue>-- ^ A processing instruction occured (\&lt;??\&gt;)</font>
-<a name="(line22)"></a>	<font color=Red>|</font> SaxComment String		<font color=Blue>-- ^ A comment occured (\&lt;!-- --\&gt;)</font>
-<a name="(line23)"></a>	<font color=Red>|</font> SaxElementOpen Name <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Blue>-- ^ An element was opened (\&lt;\&gt;)</font>
-<a name="(line24)"></a>	<font color=Red>|</font> SaxElementClose Name		<font color=Blue>-- ^ An element was closed (\&lt;\/\&gt;)</font>
-<a name="(line25)"></a>	<font color=Red>|</font> SaxElementTag Name <font color=Red>[</font>Attribute<font color=Red>]</font>
-<a name="(line26)"></a>		<font color=Blue>-- ^ An element without content occured (\&lt;\/\&gt;)</font>
-<a name="(line27)"></a>	<font color=Red>|</font> SaxCharData CharData		<font color=Blue>-- ^ Some string data occured</font>
-<a name="(line28)"></a>	<font color=Red>|</font> SaxReference Reference	<font color=Blue>-- ^ A reference occured</font>
-<a name="(line29)"></a>
-<a name="(line30)"></a><a name="saxParse"></a><font color=Blue>-- | @saxParse file content@ takes a filename and the string content of that</font>
-<a name="(line31)"></a><font color=Blue>--   file and generates a stream of @SaxElement@s. If an error occurs, the</font>
-<a name="(line32)"></a><font color=Blue>--   parsing stops and a string is returned using the @Maybe@ type.</font>
-<a name="(line33)"></a>saxParse <font color=Red>::</font> String <font color=Blue>-- ^ The filename</font>
-<a name="(line34)"></a>	 <font color=Red>-&gt;</font> String <font color=Blue>-- ^ The content of the file</font>
-<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 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>
-<a name="(line43)"></a>parseStream p state toks <font color=Red>=</font> <font color=Green><u>case</u></font> runParser p state toks <font color=Green><u>of</u></font>
-<a name="(line44)"></a>	<font color=Cyan>(</font>Left err<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>-&gt;</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>Just err<font color=Cyan>)</font>
-<a name="(line45)"></a>	<font color=Cyan>(</font>Right res<font color=Cyan>,</font> nstate<font color=Cyan>,</font> rest<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>res<font color=Red><b>:</b></font>moreres<font color=Cyan>,</font> err<font color=Cyan>)</font>
-<a name="(line46)"></a>            <font color=Green><u>where</u></font> <font color=Cyan>(</font>moreres<font color=Cyan>,</font>err<font color=Cyan>)</font> <font color=Red>=</font> parseStream p nstate rest
-<a name="(line47)"></a>
-<a name="(line48)"></a><a name="sax"></a>sax <font color=Red>::</font> XParser SaxElement
-<a name="(line49)"></a>sax <font color=Red>=</font> oneOf <font color=Red>[</font> saxelementopen
-<a name="(line50)"></a>            <font color=Cyan>,</font> saxelementclose
-<a name="(line51)"></a>            <font color=Cyan>,</font> saxprocessinginstruction
-<a name="(line52)"></a>            <font color=Cyan>,</font> saxcomment
-<a name="(line53)"></a>            <font color=Cyan>,</font> saxdoctypedecl
-<a name="(line54)"></a>            <font color=Cyan>,</font> saxreference
-<a name="(line55)"></a>            <font color=Cyan>,</font> saxchardata
-<a name="(line56)"></a>            <font color=Red>]</font>
-<a name="(line57)"></a>	<font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Cyan>(</font><font color=Magenta>"\nLooking for a SAX event:\n"</font>
-<a name="(line58)"></a>               <font color=Cyan>++</font><font color=Magenta>"  elem-open, elem-close, PI, comment, DTD, ref, or chardata"</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line59)"></a>
-<a name="(line60)"></a><a name="saxelementopen"></a>saxelementopen <font color=Red>::</font> XParser SaxElement
-<a name="(line61)"></a>saxelementopen <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line62)"></a>	tok TokAnyOpen
-<a name="(line63)"></a>	<font color=Cyan>(</font>ElemTag n <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> elemtag
-<a name="(line64)"></a>	<font color=Cyan>(</font><font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokEndClose
-<a name="(line65)"></a>	      return <font color=Cyan>(</font>SaxElementTag n <font color=Green><u>as</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
-<a name="(line66)"></a>	 <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokAnyClose
-<a name="(line67)"></a>	      return <font color=Cyan>(</font>SaxElementOpen n <font color=Green><u>as</u></font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line68)"></a>	 <font color=Cyan>`onFail`</font> fail <font color=Magenta>"missing &gt; or /&gt; in element tag"</font><font color=Cyan>)</font>
-<a name="(line69)"></a>
-<a name="(line70)"></a><a name="saxelementclose"></a>saxelementclose <font color=Red>::</font> XParser SaxElement
-<a name="(line71)"></a>saxelementclose <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line72)"></a>	tok TokEndOpen
-<a name="(line73)"></a>	n <font color=Red>&lt;-</font> name
-<a name="(line74)"></a>	tok TokAnyClose
-<a name="(line75)"></a>	return <font color=Cyan>(</font>SaxElementClose n<font color=Cyan>)</font>
-<a name="(line76)"></a>
-<a name="(line77)"></a><a name="saxcomment"></a>saxcomment <font color=Red>::</font> XParser SaxElement
-<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="(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="(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
-<a name="(line91)"></a>
-<a name="(line92)"></a><a name="saxprocessinginstruction"></a>saxprocessinginstruction <font color=Red>::</font> XParser SaxElement
-<a name="(line93)"></a>saxprocessinginstruction <font color=Red>=</font> fmap SaxProcessingInstruction processinginstruction
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/SAX.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | A streaming XML parser, using a method known as SAX. SAX isn't really a</font>
+<a name="line-2"></a><font color=Blue>--   standard, but an implementation, so it's just an \"SAX-like\" parser.</font>
+<a name="line-3"></a><font color=Blue>--   This module allows you parse an XML document without having to evaluate</font>
+<a name="line-4"></a><font color=Blue>--   it as a whole. This is needed for protocols like jabber, which use xml</font>
+<a name="line-5"></a><font color=Blue>--   streams for communication.</font>
+<a name="line-6"></a>
+<a name="line-7"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>SAX
+<a name="line-8"></a>	<font color=Cyan>(</font> SaxElement<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-9"></a>	<font color=Cyan>,</font> saxParse
+<a name="line-10"></a>	<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-11"></a>
+<a name="line-12"></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="line-13"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse
+<a name="line-14"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Lex
+<a name="line-15"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly<font color=Cyan>.</font>NoLeak<font color=Cyan>.</font>State
+<a name="line-16"></a>
+<a name="line-17"></a><a name="SaxElement"></a><font color=Green><u>data</u></font> SaxElement
+<a name="line-18"></a>	<font color=Red>=</font> SaxDocTypeDecl DocTypeDecl
+<a name="line-19"></a>		<font color=Blue>-- ^ A doctype declaration occured(\&lt;!DOCTYPE\&gt;)</font>
+<a name="line-20"></a>	<font color=Red>|</font> SaxProcessingInstruction ProcessingInstruction
+<a name="line-21"></a>		<font color=Blue>-- ^ A processing instruction occured (\&lt;??\&gt;)</font>
+<a name="line-22"></a>	<font color=Red>|</font> SaxComment String		<font color=Blue>-- ^ A comment occured (\&lt;!-- --\&gt;)</font>
+<a name="line-23"></a>	<font color=Red>|</font> SaxElementOpen Name <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Blue>-- ^ An element was opened (\&lt;\&gt;)</font>
+<a name="line-24"></a>	<font color=Red>|</font> SaxElementClose Name		<font color=Blue>-- ^ An element was closed (\&lt;\/\&gt;)</font>
+<a name="line-25"></a>	<font color=Red>|</font> SaxElementTag Name <font color=Red>[</font>Attribute<font color=Red>]</font>
+<a name="line-26"></a>		<font color=Blue>-- ^ An element without content occured (\&lt;\/\&gt;)</font>
+<a name="line-27"></a>	<font color=Red>|</font> SaxCharData CharData		<font color=Blue>-- ^ Some string data occured</font>
+<a name="line-28"></a>	<font color=Red>|</font> SaxReference Reference	<font color=Blue>-- ^ A reference occured</font>
+<a name="line-29"></a>
+<a name="line-30"></a><a name="saxParse"></a><font color=Blue>-- | @saxParse file content@ takes a filename and the string content of that</font>
+<a name="line-31"></a><font color=Blue>--   file and generates a stream of @SaxElement@s. If an error occurs, the</font>
+<a name="line-32"></a><font color=Blue>--   parsing stops and a string is returned using the @Maybe@ type.</font>
+<a name="line-33"></a><font color=Blue>saxParse</font> <font color=Red>::</font> String <font color=Blue>-- ^ The filename</font>
+<a name="line-34"></a>	 <font color=Red>-&gt;</font> String <font color=Blue>-- ^ The content of the file</font>
+<a name="line-35"></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="line-36"></a>		<font color=Blue>-- ^ A tuple of the parsed elements and @Nothing@, if no</font>
+<a name="line-37"></a>		<font color=Blue>--   error occured, or @Just@ @String@ if an error occured.</font>
+<a name="line-38"></a><font color=Blue>saxParse</font> file cntnt <font color=Red>=</font> parseStream sax emptySTs
+<a name="line-39"></a>                                    <font color=Cyan>(</font>xmlLex file cntnt<font color=Cyan>)</font>
+<a name="line-40"></a>
+<a name="line-41"></a><a name="parseStream"></a><font color=Blue>parseStream</font> <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="line-42"></a><font color=Blue>parseStream</font> <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>
+<a name="line-43"></a><font color=Blue>parseStream</font> p state toks <font color=Red>=</font> <font color=Green><u>case</u></font> runParser p state toks <font color=Green><u>of</u></font>
+<a name="line-44"></a>	<font color=Cyan>(</font>Left err<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>-&gt;</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>Just err<font color=Cyan>)</font>
+<a name="line-45"></a>	<font color=Cyan>(</font>Right res<font color=Cyan>,</font> nstate<font color=Cyan>,</font> rest<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>res<font color=Red><b>:</b></font>moreres<font color=Cyan>,</font> err<font color=Cyan>)</font>
+<a name="line-46"></a>            <font color=Green><u>where</u></font> <font color=Cyan>(</font>moreres<font color=Cyan>,</font>err<font color=Cyan>)</font> <font color=Red>=</font> parseStream p nstate rest
+<a name="line-47"></a>
+<a name="line-48"></a><a name="sax"></a><font color=Blue>sax</font> <font color=Red>::</font> XParser SaxElement
+<a name="line-49"></a><font color=Blue>sax</font> <font color=Red>=</font> oneOf <font color=Red>[</font> saxelementopen
+<a name="line-50"></a>            <font color=Cyan>,</font> saxelementclose
+<a name="line-51"></a>            <font color=Cyan>,</font> saxprocessinginstruction
+<a name="line-52"></a>            <font color=Cyan>,</font> saxcomment
+<a name="line-53"></a>            <font color=Cyan>,</font> saxdoctypedecl
+<a name="line-54"></a>            <font color=Cyan>,</font> saxreference
+<a name="line-55"></a>            <font color=Cyan>,</font> saxchardata
+<a name="line-56"></a>            <font color=Red>]</font>
+<a name="line-57"></a>	<font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Cyan>(</font><font color=Magenta>"\nLooking for a SAX event:\n"</font>
+<a name="line-58"></a>               <font color=Cyan>++</font><font color=Magenta>"  elem-open, elem-close, PI, comment, DTD, ref, or chardata"</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-59"></a>
+<a name="line-60"></a><a name="saxelementopen"></a><font color=Blue>saxelementopen</font> <font color=Red>::</font> XParser SaxElement
+<a name="line-61"></a><font color=Blue>saxelementopen</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-62"></a>	tok TokAnyOpen
+<a name="line-63"></a>	<font color=Cyan>(</font>ElemTag n <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> elemtag
+<a name="line-64"></a>	<font color=Cyan>(</font><font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokEndClose
+<a name="line-65"></a>	      return <font color=Cyan>(</font>SaxElementTag n <font color=Green><u>as</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`onFail`</font>
+<a name="line-66"></a>	 <font color=Cyan>(</font> <font color=Green><u>do</u></font> tok TokAnyClose
+<a name="line-67"></a>	      return <font color=Cyan>(</font>SaxElementOpen n <font color=Green><u>as</u></font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-68"></a>	 <font color=Cyan>`onFail`</font> fail <font color=Magenta>"missing &gt; or /&gt; in element tag"</font><font color=Cyan>)</font>
+<a name="line-69"></a>
+<a name="line-70"></a><a name="saxelementclose"></a><font color=Blue>saxelementclose</font> <font color=Red>::</font> XParser SaxElement
+<a name="line-71"></a><font color=Blue>saxelementclose</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-72"></a>	tok TokEndOpen
+<a name="line-73"></a>	n <font color=Red>&lt;-</font> name
+<a name="line-74"></a>	tok TokAnyClose
+<a name="line-75"></a>	return <font color=Cyan>(</font>SaxElementClose n<font color=Cyan>)</font>
+<a name="line-76"></a>
+<a name="line-77"></a><a name="saxcomment"></a><font color=Blue>saxcomment</font> <font color=Red>::</font> XParser SaxElement
+<a name="line-78"></a><font color=Blue>saxcomment</font> <font color=Red>=</font> comment <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxComment
+<a name="line-79"></a>
+<a name="line-80"></a><a name="saxchardata"></a><font color=Blue>saxchardata</font> <font color=Red>::</font> XParser SaxElement
+<a name="line-81"></a><font color=Blue>saxchardata</font> <font color=Red>=</font>
+<a name="line-82"></a>  <font color=Cyan>(</font>cdsect <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxCharData<font color=Cyan>)</font>
+<a name="line-83"></a>  <font color=Cyan>`onFail`</font>
+<a name="line-84"></a>  <font color=Cyan>(</font>chardata <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxCharData<font color=Cyan>)</font>
+<a name="line-85"></a>
+<a name="line-86"></a><a name="saxreference"></a><font color=Blue>saxreference</font> <font color=Red>::</font> XParser SaxElement
+<a name="line-87"></a><font color=Blue>saxreference</font> <font color=Red>=</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxReference
+<a name="line-88"></a>
+<a name="line-89"></a><a name="saxdoctypedecl"></a><font color=Blue>saxdoctypedecl</font> <font color=Red>::</font> XParser SaxElement
+<a name="line-90"></a><font color=Blue>saxdoctypedecl</font> <font color=Red>=</font> doctypedecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxDocTypeDecl
+<a name="line-91"></a>
+<a name="line-92"></a><a name="saxprocessinginstruction"></a><font color=Blue>saxprocessinginstruction</font> <font color=Red>::</font> XParser SaxElement
+<a name="line-93"></a><font color=Blue>saxprocessinginstruction</font> <font color=Red>=</font> fmap SaxProcessingInstruction processinginstruction
 </pre>
+</body>
 </html>
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,331 +1,337 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<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="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="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>
-<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>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/ShowXmlLazy.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></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="line-2"></a>
+<a name="line-3"></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="line-4"></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="line-5"></a>
+<a name="line-6"></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="line-7"></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="line-8"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>
+<a name="line-9"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List
+<a name="line-10"></a>
+<a name="line-11"></a><a name="showXmlLazy"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (without DTD).</font>
+<a name="line-12"></a><font color=Blue>showXmlLazy</font> <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="line-13"></a><font color=Blue>showXmlLazy</font> dtd x <font color=Red>=</font>
+<a name="line-14"></a>    <font color=Green><u>case</u></font> X<font color=Cyan>.</font>toContents x <font color=Green><u>of</u></font>
+<a name="line-15"></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="line-16"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Magenta>""</font>
+<a name="line-17"></a>
+<a name="line-18"></a>
+<a name="line-19"></a><a name="toXmlLazy"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (with or without DTD).</font>
+<a name="line-20"></a><font color=Blue>toXmlLazy</font> <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="line-21"></a><font color=Blue>toXmlLazy</font> dtd value <font color=Red>=</font>
+<a name="line-22"></a>    <font color=Green><u>let</u></font> ht <font color=Red>=</font> toHType value <font color=Green><u>in</u></font>
+<a name="line-23"></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="line-24"></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="line-25"></a>             emptyST
+<a name="line-26"></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="line-27"></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="line-28"></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="line-29"></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="line-30"></a>             []
+<a name="line-31"></a>
+<a name="line-32"></a>
+<a name="line-33"></a>
+<a name="line-34"></a>
+<a name="line-35"></a><a name="Doc"></a><font color=Green><u>type</u></font> Doc <font color=Red>=</font> String
+<a name="line-36"></a><a name="empty"></a><font color=Blue>empty</font> <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-37"></a><font color=Blue>empty</font> <font color=Red>=</font> <font color=Magenta>""</font>
+<a name="line-38"></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="line-39"></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="line-40"></a><a name="vcat"></a><font color=Blue>vcat</font> <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="line-41"></a><font color=Blue>vcat</font> a <font color=Red>=</font> foldr <font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> [] a
+<a name="line-42"></a><a name="hcat"></a><font color=Blue>hcat</font> <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="line-43"></a><font color=Blue>hcat</font> <font color=Red>=</font> concat
+<a name="line-44"></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="line-45"></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="line-46"></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="line-47"></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="line-48"></a><a name="fsep"></a><font color=Blue>fsep</font> <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="line-49"></a><font color=Blue>fsep</font> <font color=Red>=</font> vcat
+<a name="line-50"></a><a name="text"></a><font color=Blue>text</font> <font color=Red>::</font> t <font color=Red>-&gt;</font> t
+<a name="line-51"></a><font color=Blue>text</font> string <font color=Red>=</font> string
+<a name="line-52"></a><a name="parens"></a><font color=Blue>parens</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>
+<a name="line-53"></a><font color=Blue>parens</font> string <font color=Red>=</font> <font color=Magenta>"("</font><font color=Cyan>++</font>string<font color=Cyan>++</font><font color=Magenta>")"</font>
+<a name="line-54"></a><a name="nest"></a><font color=Blue>nest</font> <font color=Red>::</font> t <font color=Red>-&gt;</font> t1 <font color=Red>-&gt;</font> t1
+<a name="line-55"></a><font color=Blue>nest</font> <font color=Green><u>_</u></font> string <font color=Red>=</font> string
+<a name="line-56"></a>
+<a name="line-57"></a>
+<a name="line-58"></a>
+<a name="line-59"></a><a name="either"></a><font color=Blue>either</font> <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="line-60"></a><font color=Blue>either</font> 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="line-61"></a><font color=Blue>either</font> <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="line-62"></a>
+<a name="line-63"></a><a name="maybe"></a><font color=Blue>maybe</font> <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="line-64"></a><font color=Blue>maybe</font> <font color=Green><u>_</u></font> Nothing  <font color=Red>=</font> empty
+<a name="line-65"></a><font color=Blue>maybe</font> f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x
+<a name="line-66"></a>
+<a name="line-67"></a><font color=Blue>--peref p   = text "%" &lt;&gt; text p &lt;&gt; text ";"</font>
+<a name="line-68"></a>
+<a name="line-69"></a><font color=Blue>----</font>
+<a name="line-70"></a>
+<a name="line-71"></a><a name="document"></a><font color=Blue>document</font> <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Doc
+<a name="line-72"></a><a name="prolog"></a><font color=Blue>prolog</font>   <font color=Red>::</font> Prolog <font color=Red>-&gt;</font> Doc
+<a name="line-73"></a><a name="xmldecl"></a><font color=Blue>xmldecl</font>  <font color=Red>::</font> XMLDecl <font color=Red>-&gt;</font> Doc
+<a name="line-74"></a><a name="misc"></a><font color=Blue>misc</font>     <font color=Red>::</font> Misc <font color=Red>-&gt;</font> Doc
+<a name="line-75"></a><a name="sddecl"></a><font color=Blue>sddecl</font>   <font color=Red>::</font> Bool <font color=Red>-&gt;</font> Doc
+<a name="line-76"></a>
+<a name="line-77"></a><a name="doctypedecl"></a><font color=Blue>doctypedecl</font> <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Doc
+<a name="line-78"></a><a name="markupdecl"></a><font color=Blue>markupdecl</font>  <font color=Red>::</font> MarkupDecl <font color=Red>-&gt;</font> Doc
+<a name="line-79"></a><a name="cp"></a><font color=Blue>-- extsubset   :: ExtSubset -&gt; Doc</font>
+<a name="line-80"></a><font color=Blue>-- extsubsetdecl :: ExtSubsetDecl -&gt; Doc</font>
+<a name="line-81"></a><font color=Blue>cp</font>          <font color=Red>::</font> CP <font color=Red>-&gt;</font> Doc
+<a name="line-82"></a>
+<a name="line-83"></a><a name="element"></a><font color=Blue>element</font>   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> Doc
+<a name="line-84"></a><a name="attribute"></a><font color=Blue>attribute</font> <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> Doc                     <font color=Cyan>--etc</font>
+<a name="line-85"></a><a name="content"></a><font color=Blue>content</font>   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> Doc
+<a name="line-86"></a>
+<a name="line-87"></a><font color=Blue>----</font>
+<a name="line-88"></a>
+<a name="line-89"></a><font color=Blue>document</font> <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="line-90"></a><font color=Blue>prolog</font> <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="line-91"></a>                             vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>
+<a name="line-92"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>
+<a name="line-93"></a>                             vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>
+<a name="line-94"></a><font color=Blue>xmldecl</font> <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="line-95"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>
+<a name="line-96"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>
+<a name="line-97"></a>                             text <font color=Magenta>"?&gt;"</font>
+<a name="line-98"></a><font color=Blue>misc</font> <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="line-99"></a><font color=Blue>misc</font> <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="line-100"></a><font color=Blue>sddecl</font> sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>
+<a name="line-101"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>
+<a name="line-102"></a><font color=Blue>doctypedecl</font> <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="line-103"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="line-104"></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="line-105"></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="line-106"></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="line-107"></a>                                      maybe externalid eid
+<a name="line-108"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e
+<a name="line-109"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a
+<a name="line-110"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e
+<a name="line-111"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n
+<a name="line-112"></a><font color=Blue>markupdecl</font> <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m
+<a name="line-113"></a><font color=Blue>--markupdecl (MarkupPE p m)  = peref p</font>
+<a name="line-114"></a><font color=Blue>-- _ (ExtSubset t ds) = maybe textdecl t $$</font>
+<a name="line-115"></a><font color=Blue>--                              vcat (map extsubsetdecl ds)</font>
+<a name="line-116"></a><font color=Blue>-- _ (ExtMarkupDecl m)      = markupdecl m</font>
+<a name="line-117"></a><font color=Blue>-- extsubsetdecl (ExtConditionalSect c) = conditionalsect c</font>
+<a name="line-118"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e)   = peref p</font>
+<a name="line-119"></a>
+<a name="line-120"></a><font color=Blue>element</font> <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="line-121"></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="line-122"></a><font color=Blue>element</font> 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="line-123"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>
+<a name="line-124"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>
+<a name="line-125"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>
+<a name="line-126"></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="line-127"></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="line-128"></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="line-129"></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="line-130"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c
+<a name="line-131"></a>
+<a name="line-132"></a><a name="isText"></a><font color=Blue>isText</font> <font color=Red>::</font> Content t <font color=Red>-&gt;</font> Bool
+<a name="line-133"></a><font color=Blue>isText</font> <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="line-134"></a><font color=Blue>isText</font> <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="line-135"></a><font color=Blue>isText</font> <font color=Green><u>_</u></font>               <font color=Red>=</font> False
+<a name="line-136"></a>
+<a name="line-137"></a><a name="carryelem"></a><font color=Blue>carryelem</font> <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c
+<a name="line-138"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
+<a name="line-139"></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="line-140"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>
+<a name="line-141"></a><font color=Blue>carryelem</font> <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c
+<a name="line-142"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>
+<a name="line-143"></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="line-144"></a>                          <font color=Green><u>in</u></font>
+<a name="line-145"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>
+<a name="line-146"></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="line-147"></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="line-148"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n
+<a name="line-149"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>
+<a name="line-150"></a><a name="carrycontent"></a><font color=Blue>carrycontent</font> <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="line-151"></a><font color=Blue>carryelem</font> <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="line-152"></a><font color=Blue>carrycontent</font> <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="line-153"></a><font color=Blue>carrycontent</font> <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="line-154"></a><font color=Blue>carrycontent</font> <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="line-155"></a><font color=Blue>carrycontent</font> <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="line-156"></a><font color=Blue>carrycontent</font> <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="line-157"></a>
+<a name="line-158"></a><a name="carryscan"></a><font color=Blue>carryscan</font> <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="line-159"></a><font color=Blue>carryscan</font> <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="line-160"></a><font color=Blue>carryscan</font> 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="line-161"></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="line-162"></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="line-163"></a>
+<a name="line-164"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>
+<a name="line-165"></a><font color=Blue>--  | isText (head cs) =</font>
+<a name="line-166"></a><font color=Blue>--        ( start &lt;&gt;</font>
+<a name="line-167"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
+<a name="line-168"></a><font color=Blue>--        , text "&gt;")</font>
+<a name="line-169"></a><font color=Blue>--  | otherwise =</font>
+<a name="line-170"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>
+<a name="line-171"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>
+<a name="line-172"></a><font color=Blue>--        , text "&gt;")</font>
+<a name="line-173"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>
+<a name="line-174"></a><font color=Blue>--</font>
+<a name="line-175"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>
+<a name="line-176"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>
+<a name="line-177"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>
+<a name="line-178"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>
+<a name="line-179"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>
+<a name="line-180"></a>
+<a name="line-181"></a>
+<a name="line-182"></a><font color=Blue>attribute</font> <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="line-183"></a><font color=Blue>content</font> <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e
+<a name="line-184"></a><font color=Blue>content</font> <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="line-185"></a><font color=Blue>content</font> <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="line-186"></a><font color=Blue>content</font> <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r
+<a name="line-187"></a><font color=Blue>content</font> <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m
+<a name="line-188"></a>
+<a name="line-189"></a><a name="elementdecl"></a><font color=Blue>elementdecl</font> <font color=Red>::</font> ElementDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-190"></a><font color=Blue>elementdecl</font> <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="line-191"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>
+<a name="line-192"></a><a name="contentspec"></a><font color=Blue>contentspec</font> <font color=Red>::</font> ContentSpec <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-193"></a><font color=Blue>contentspec</font> EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>
+<a name="line-194"></a><font color=Blue>contentspec</font> ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>
+<a name="line-195"></a><font color=Blue>contentspec</font> <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m
+<a name="line-196"></a><font color=Blue>contentspec</font> <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c
+<a name="line-197"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>
+<a name="line-198"></a><font color=Blue>cp</font> <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="line-199"></a><font color=Blue>cp</font> <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="line-200"></a>                           modifier m
+<a name="line-201"></a><font color=Blue>cp</font> <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="line-202"></a>                           modifier m
+<a name="line-203"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>
+<a name="line-204"></a><font color=Blue>modifier</font> <font color=Red>::</font> Modifier <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-205"></a><font color=Blue>modifier</font> None          <font color=Red>=</font> empty
+<a name="line-206"></a><font color=Blue>modifier</font> Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>
+<a name="line-207"></a><font color=Blue>modifier</font> Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>
+<a name="line-208"></a><font color=Blue>modifier</font> Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>
+<a name="line-209"></a><a name="mixed"></a><font color=Blue>mixed</font> <font color=Red>::</font> Mixed <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-210"></a><font color=Blue>mixed</font>  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>
+<a name="line-211"></a><font color=Blue>mixed</font> <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="line-212"></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="line-213"></a>                         text <font color=Magenta>")*"</font>
+<a name="line-214"></a>
+<a name="line-215"></a><a name="attlistdecl"></a><font color=Blue>attlistdecl</font> <font color=Red>::</font> AttListDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-216"></a><font color=Blue>attlistdecl</font> <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="line-217"></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="line-218"></a><a name="attdef"></a><font color=Blue>attdef</font> <font color=Red>::</font> AttDef <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-219"></a><font color=Blue>attdef</font> <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="line-220"></a><a name="atttype"></a><font color=Blue>atttype</font> <font color=Red>::</font> AttType <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-221"></a><font color=Blue>atttype</font>  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>
+<a name="line-222"></a><font color=Blue>atttype</font> <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t
+<a name="line-223"></a><font color=Blue>atttype</font> <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t
+<a name="line-224"></a><a name="tokenizedtype"></a><font color=Blue>tokenizedtype</font> <font color=Red>::</font> TokenizedType <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-225"></a><font color=Blue>tokenizedtype</font> ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>
+<a name="line-226"></a><font color=Blue>tokenizedtype</font> IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>
+<a name="line-227"></a><font color=Blue>tokenizedtype</font> IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>
+<a name="line-228"></a><font color=Blue>tokenizedtype</font> ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>
+<a name="line-229"></a><font color=Blue>tokenizedtype</font> ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>
+<a name="line-230"></a><font color=Blue>tokenizedtype</font> NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>
+<a name="line-231"></a><font color=Blue>tokenizedtype</font> NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>
+<a name="line-232"></a><a name="enumeratedtype"></a><font color=Blue>enumeratedtype</font> <font color=Red>::</font> EnumeratedType <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-233"></a><font color=Blue>enumeratedtype</font> <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n
+<a name="line-234"></a><font color=Blue>enumeratedtype</font> <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e
+<a name="line-235"></a><a name="notationtype"></a><font color=Blue>notationtype</font> <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="line-236"></a><font color=Blue>notationtype</font> ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>
+<a name="line-237"></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="line-238"></a><a name="enumeration"></a><font color=Blue>enumeration</font> <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="line-239"></a><font color=Blue>enumeration</font> 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="line-240"></a><a name="defaultdecl"></a><font color=Blue>defaultdecl</font> <font color=Red>::</font> DefaultDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-241"></a><font color=Blue>defaultdecl</font>  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>
+<a name="line-242"></a><font color=Blue>defaultdecl</font>  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>
+<a name="line-243"></a><font color=Blue>defaultdecl</font> <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="line-244"></a><a name="reference"></a><font color=Blue>-- _ (IncludeSect i)= text "&lt;![INCLUDE [" &lt;+&gt;</font>
+<a name="line-245"></a><font color=Blue>--                                  vcat (map extsubsetdecl i) &lt;+&gt; text "]]&gt;"</font>
+<a name="line-246"></a><font color=Blue>-- conditionalsect (IgnoreSect i) = text "&lt;![IGNORE [" &lt;+&gt;</font>
+<a name="line-247"></a><font color=Blue>--                                  fsep (map ignoresectcontents i) &lt;+&gt; text "]]&gt;"</font>
+<a name="line-248"></a><font color=Blue>-- _ (Ignore)                = empty</font>
+<a name="line-249"></a><font color=Blue>-- _ (IgnoreSectContents i is)</font>
+<a name="line-250"></a><font color=Blue>--                                = ignore i &lt;+&gt; vcat (map internal is)</font>
+<a name="line-251"></a><font color=Blue>--                           where internal (ics,i) = text "&lt;![[" &lt;+&gt;</font>
+<a name="line-252"></a><font color=Blue>--                                                    ignoresectcontents ics &lt;+&gt;</font>
+<a name="line-253"></a><font color=Blue>--                                                    text "]]&gt;" &lt;+&gt; ignore i</font>
+<a name="line-254"></a><font color=Blue>reference</font> <font color=Red>::</font> Reference <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-255"></a><font color=Blue>reference</font> <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er
+<a name="line-256"></a><font color=Blue>reference</font> <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr
+<a name="line-257"></a><a name="entityref"></a><font color=Blue>entityref</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>
+<a name="line-258"></a><font color=Blue>entityref</font> 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="line-259"></a><a name="charref"></a><font color=Blue>charref</font> <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="line-260"></a><font color=Blue>charref</font> 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="line-261"></a><a name="entitydecl"></a><font color=Blue>entitydecl</font> <font color=Red>::</font> EntityDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-262"></a><font color=Blue>entitydecl</font> <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d
+<a name="line-263"></a><font color=Blue>entitydecl</font> <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d
+<a name="line-264"></a><a name="gedecl"></a><font color=Blue>gedecl</font> <font color=Red>::</font> GEDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-265"></a><font color=Blue>gedecl</font> <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="line-266"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="line-267"></a><a name="pedecl"></a><font color=Blue>pedecl</font> <font color=Red>::</font> PEDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-268"></a><font color=Blue>pedecl</font> <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="line-269"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="line-270"></a><a name="entitydef"></a><font color=Blue>entitydef</font> <font color=Red>::</font> EntityDef <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-271"></a><font color=Blue>entitydef</font> <font color=Cyan>(</font>DefEntityValue ew<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ew
+<a name="line-272"></a><font color=Blue>entitydef</font> <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="line-273"></a><a name="pedef"></a><font color=Blue>pedef</font> <font color=Red>::</font> PEDef <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-274"></a><font color=Blue>pedef</font> <font color=Cyan>(</font>PEDefEntityValue ew<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ew
+<a name="line-275"></a><font color=Blue>pedef</font> <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid
+<a name="line-276"></a><a name="externalid"></a><font color=Blue>externalid</font> <font color=Red>::</font> ExternalID <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-277"></a><font color=Blue>externalid</font> <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="line-278"></a><font color=Blue>externalid</font> <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="line-279"></a>                                 systemliteral sl
+<a name="line-280"></a><a name="ndatadecl"></a><font color=Blue>ndatadecl</font> <font color=Red>::</font> NDataDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-281"></a><font color=Blue>ndatadecl</font> <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="line-282"></a><a name="notationdecl"></a><font color=Blue>-- _ (TextDecl vi ed)      = text "&lt;?xml" &lt;+&gt; maybe text vi &lt;+&gt;</font>
+<a name="line-283"></a><font color=Blue>--                                  encodingdecl ed &lt;&gt; text "?&gt;"</font>
+<a name="line-284"></a><font color=Blue>-- _ (ExtParsedEnt t c)= maybe textdecl t &lt;+&gt; content c</font>
+<a name="line-285"></a><font color=Blue>-- _ (ExtPE t esd)            = maybe textdecl t &lt;+&gt;</font>
+<a name="line-286"></a><font color=Blue>--                                  vcat (map extsubsetdecl esd)</font>
+<a name="line-287"></a><font color=Blue>notationdecl</font> <font color=Red>::</font> NotationDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-288"></a><font color=Blue>notationdecl</font> <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="line-289"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>
+<a name="line-290"></a>                                 text <font color=Magenta>"&gt;"</font>
+<a name="line-291"></a><a name="publicid"></a><font color=Blue>publicid</font> <font color=Red>::</font> PublicID <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-292"></a><font color=Blue>publicid</font> <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="line-293"></a><a name="encodingdecl"></a><font color=Blue>encodingdecl</font> <font color=Red>::</font> EncodingDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-294"></a><font color=Blue>encodingdecl</font> <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="line-295"></a><a name="nmtoken"></a><font color=Blue>nmtoken</font> <font color=Red>::</font> t <font color=Red>-&gt;</font> t
+<a name="line-296"></a><font color=Blue>nmtoken</font> s                      <font color=Red>=</font> text s
+<a name="line-297"></a><a name="attvalue"></a><font color=Blue>attvalue</font> <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-298"></a><font color=Blue>attvalue</font> <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="line-299"></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="line-300"></a>                                 text <font color=Magenta>"\""</font>
+<a name="line-301"></a><a name="entityvalue"></a><font color=Blue>entityvalue</font> <font color=Red>::</font> EntityValue <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-302"></a><font color=Blue>entityvalue</font> <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>
+<a name="line-303"></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="line-304"></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="line-305"></a><a name="ev"></a><font color=Blue>ev</font> <font color=Red>::</font> EV <font color=Red>-&gt;</font> String
+<a name="line-306"></a><font color=Blue>ev</font> <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s
+<a name="line-307"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>
+<a name="line-308"></a><font color=Blue>ev</font> <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r
+<a name="line-309"></a><a name="pubidliteral"></a><font color=Blue>pubidliteral</font> <font color=Red>::</font> PubidLiteral <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-310"></a><font color=Blue>pubidliteral</font> <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>
+<a name="line-311"></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="line-312"></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="line-313"></a><a name="systemliteral"></a><font color=Blue>systemliteral</font> <font color=Red>::</font> SystemLiteral <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>
+<a name="line-314"></a><font color=Blue>systemliteral</font> <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>
+<a name="line-315"></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="line-316"></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="line-317"></a><a name="chardata"></a><font color=Blue>chardata</font> <font color=Red>::</font> t <font color=Red>-&gt;</font> t
+<a name="line-318"></a><font color=Blue>chardata</font> s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s
+<a name="line-319"></a><a name="cdsect"></a><font color=Blue>cdsect</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>
+<a name="line-320"></a><font color=Blue>cdsect</font> 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="line-321"></a>
+<a name="line-322"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>
+<a name="line-323"></a><font color=Blue>containsDoubleQuote</font> <font color=Red>::</font> <font color=Red>[</font>EV<font color=Red>]</font> <font color=Red>-&gt;</font> Bool
+<a name="line-324"></a><font color=Blue>containsDoubleQuote</font> evs <font color=Red>=</font> any csq evs
+<a name="line-325"></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="line-326"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False
+<a name="line-327"></a>
 </pre>
+</body>
 </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
@@ -1,224 +1,300 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<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>TypeMapping
-<a name="(line2)"></a>  <font color=Cyan>(</font>
-<a name="(line3)"></a>  <font color=Blue>-- * A class to get an explicit type representation for any value</font>
-<a name="(line4)"></a>    HTypeable<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>	<font color=Blue>-- sole method, toHType</font>
-<a name="(line5)"></a>  <font color=Blue>-- * Explicit representation of Haskell datatype information</font>
-<a name="(line6)"></a>  <font color=Cyan>,</font> HType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>		<font color=Blue>-- instance of Eq, Show</font>
-<a name="(line7)"></a>  <font color=Cyan>,</font> Constr<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>		<font color=Blue>-- instance of Eq, Show</font>
-<a name="(line8)"></a>  <font color=Blue>-- * Helper functions to extract type info as strings</font>
-<a name="(line9)"></a>  <font color=Cyan>,</font> showHType		<font color=Blue>-- :: HType -&gt; ShowS</font>
-<a name="(line10)"></a>  <font color=Cyan>,</font> showConstr		<font color=Blue>-- :: Int -&gt; HType -&gt; String</font>
-<a name="(line11)"></a>  <font color=Blue>-- * Conversion from Haskell datatype to DTD</font>
-<a name="(line12)"></a>  <font color=Cyan>,</font> toDTD
-<a name="(line13)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line14)"></a>
-<a name="(line15)"></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="(line16)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List <font color=Cyan>(</font>partition<font color=Cyan>,</font> intersperse<font color=Cyan>)</font>
-<a name="(line17)"></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="(line18)"></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="(line19)"></a>
-<a name="(line20)"></a>
-<a name="(line21)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line22)"></a>        <font color=Blue>-- idea: in DrIFT,</font>
-<a name="(line23)"></a>        <font color=Blue>--      named field == primitive type, becomes an attribute</font>
-<a name="(line24)"></a>        <font color=Blue>--      named field == single-constructor type, renames the tag</font>
-<a name="(line25)"></a>        <font color=Blue>--      named field == multi-constructor type, as normal</font>
-<a name="(line26)"></a>        <font color=Blue>-- if prefix of all named fields is roughly typename, delete it</font>
-<a name="(line27)"></a>
-<a name="(line28)"></a><a name="HTypeable"></a><font color=Blue>-- | @HTypeable@ promises that we can create an explicit representation of</font>
-<a name="(line29)"></a><a name="HTypeable"></a><font color=Blue>--   of the type of any value.</font>
-<a name="(line30)"></a><a name="HTypeable"></a><font color=Green><u>class</u></font> HTypeable a <font color=Green><u>where</u></font>
-<a name="(line31)"></a>    toHType <font color=Red>::</font> a <font color=Red>-&gt;</font> HType
-<a name="(line32)"></a>
-<a name="(line33)"></a><a name="HType"></a><font color=Blue>-- | A concrete representation of any Haskell type.</font>
-<a name="(line34)"></a><a name="HType"></a><font color=Green><u>data</u></font> HType <font color=Red>=</font>
-<a name="(line35)"></a>      Maybe HType
-<a name="(line36)"></a>    <font color=Red>|</font> List HType
-<a name="(line37)"></a>    <font color=Red>|</font> Tuple <font color=Red>[</font>HType<font color=Red>]</font>
-<a name="(line38)"></a>    <font color=Red>|</font> Prim String String        <font color=Blue>-- ^ separate Haskell name and XML name</font>
-<a name="(line39)"></a>    <font color=Red>|</font> String
-<a name="(line40)"></a>    <font color=Red>|</font> Defined String <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>[</font>Constr<font color=Red>]</font>
-<a name="(line41)"></a>	<font color=Blue>-- ^ A user-defined type has a name, a sequence of type variables,</font>
-<a name="(line42)"></a>	<font color=Blue>--   and a set of constructors.  (The variables might already be</font>
-<a name="(line43)"></a>	<font color=Blue>--   instantiated to actual types.)</font>
-<a name="(line44)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Show<font color=Cyan>)</font>
-<a name="(line45)"></a>
-<a name="(line46)"></a><font color=Green><u>instance</u></font> Eq HType <font color=Green><u>where</u></font>
-<a name="(line47)"></a>    <font color=Cyan>(</font>Maybe x<font color=Cyan>)</font>  <font color=Cyan>==</font> <font color=Cyan>(</font>Maybe y<font color=Cyan>)</font>  <font color=Red>=</font>  x<font color=Cyan>==</font>y
-<a name="(line48)"></a>    <font color=Cyan>(</font>List x<font color=Cyan>)</font>   <font color=Cyan>==</font> <font color=Cyan>(</font>List y<font color=Cyan>)</font>   <font color=Red>=</font>  x<font color=Cyan>==</font>y
-<a name="(line49)"></a>    <font color=Cyan>(</font>Tuple xs<font color=Cyan>)</font> <font color=Cyan>==</font> <font color=Cyan>(</font>Tuple ys<font color=Cyan>)</font> <font color=Red>=</font>  xs<font color=Cyan>==</font>ys
-<a name="(line50)"></a>    <font color=Cyan>(</font>Prim x <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>==</font> <font color=Cyan>(</font>Prim y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>  x<font color=Cyan>==</font>y
-<a name="(line51)"></a>    String     <font color=Cyan>==</font> String     <font color=Red>=</font>  True
-<a name="(line52)"></a>    <font color=Cyan>(</font>Defined n xs <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>==</font> <font color=Cyan>(</font>Defined m ys <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font>  n<font color=Cyan>==</font>m 	<font color=Blue>-- &amp;&amp; xs==ys</font>
-<a name="(line53)"></a>    <font color=Green><u>_</u></font>          <font color=Cyan>==</font> <font color=Green><u>_</u></font>          <font color=Red>=</font>  False
-<a name="(line54)"></a>
-<a name="(line55)"></a><a name="Constr"></a><font color=Blue>-- | A concrete representation of any user-defined Haskell constructor.</font>
-<a name="(line56)"></a><a name="Constr"></a><font color=Blue>--   The constructor has a name, and a sequence of component types.  The</font>
-<a name="(line57)"></a><a name="Constr"></a><font color=Blue>--   first sequence of types represents the minimum set of free type</font>
-<a name="(line58)"></a><a name="Constr"></a><font color=Blue>--   variables occurring in the (second) list of real component types.</font>
-<a name="(line59)"></a><a name="Constr"></a><font color=Blue>--   If there are fieldnames, they are contained in the final list, and</font>
-<a name="(line60)"></a><a name="Constr"></a><font color=Blue>--   correspond one-to-one with the component types.</font>
-<a name="(line61)"></a><a name="Constr"></a><font color=Green><u>data</u></font> Constr <font color=Red>=</font> Constr String <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>[</font>HType<font color=Red>]</font> <font color=Blue>-- (Maybe [String])</font>
-<a name="(line62)"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
-<a name="(line63)"></a>
-<a name="(line64)"></a><a name="showConstr"></a><font color=Blue>-- | Project the n'th constructor from an HType and convert it to a string</font>
-<a name="(line65)"></a><font color=Blue>--   suitable for an XML tagname.</font>
-<a name="(line66)"></a>showConstr <font color=Red>::</font> Int <font color=Red>-&gt;</font> HType <font color=Red>-&gt;</font> String
-<a name="(line67)"></a>showConstr n <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font> flatConstr <font color=Cyan>(</font>cs<font color=Cyan>!!</font>n<font color=Cyan>)</font> <font color=Magenta>""</font>
-<a name="(line68)"></a>showConstr n <font color=Green><u>_</u></font> <font color=Red>=</font> error <font color=Magenta>"no constructors for builtin types"</font>
-<a name="(line69)"></a>
-<a name="(line70)"></a><font color=Blue>------------------------------------------------------------------------</font>
-<a name="(line71)"></a><font color=Blue>-- Some instances</font>
-<a name="(line72)"></a><font color=Green><u>instance</u></font> HTypeable Bool <font color=Green><u>where</u></font>
-<a name="(line73)"></a>    toHType   <font color=Green><u>_</u></font>    <font color=Red>=</font> Prim <font color=Magenta>"Bool"</font> <font color=Magenta>"bool"</font>
-<a name="(line74)"></a><font color=Green><u>instance</u></font> HTypeable Int <font color=Green><u>where</u></font>
-<a name="(line75)"></a>    toHType   <font color=Green><u>_</u></font>    <font color=Red>=</font> Prim <font color=Magenta>"Int"</font> <font color=Magenta>"int"</font>
-<a name="(line76)"></a><font color=Green><u>instance</u></font> HTypeable Integer <font color=Green><u>where</u></font>
-<a name="(line77)"></a>    toHType   <font color=Green><u>_</u></font>    <font color=Red>=</font> Prim <font color=Magenta>"Integer"</font> <font color=Magenta>"integer"</font>
-<a name="(line78)"></a><font color=Green><u>instance</u></font> HTypeable Float <font color=Green><u>where</u></font>
-<a name="(line79)"></a>    toHType   <font color=Green><u>_</u></font>    <font color=Red>=</font> Prim <font color=Magenta>"Float"</font> <font color=Magenta>"float"</font>
-<a name="(line80)"></a><font color=Green><u>instance</u></font> HTypeable Double <font color=Green><u>where</u></font>
-<a name="(line81)"></a>    toHType   <font color=Green><u>_</u></font>    <font color=Red>=</font> Prim <font color=Magenta>"Double"</font> <font color=Magenta>"double"</font>
-<a name="(line82)"></a><font color=Green><u>instance</u></font> HTypeable Char <font color=Green><u>where</u></font>
-<a name="(line83)"></a>    toHType   <font color=Green><u>_</u></font>    <font color=Red>=</font> Prim <font color=Magenta>"Char"</font> <font color=Magenta>"char"</font>
-<a name="(line84)"></a>
-<a name="(line85)"></a><font color=Green><u>instance</u></font> HTypeable () <font color=Green><u>where</u></font>
-<a name="(line86)"></a>    toHType <font color=Green><u>_</u></font>      <font color=Red>=</font> Prim <font color=Magenta>"unit"</font> <font color=Magenta>"unit"</font>
-<a name="(line87)"></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>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line88)"></a>    toHType p      <font color=Red>=</font> Tuple <font color=Red>[</font>toHType a<font color=Cyan>,</font> toHType b<font color=Red>]</font>
-<a name="(line89)"></a>                   <font color=Green><u>where</u></font>  <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Red>=</font> p
-<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> 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="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="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>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/TypeMapping.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><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="line-2"></a>  <font color=Cyan>(</font>
+<a name="line-3"></a>  <font color=Blue>-- * A class to get an explicit type representation for any value</font>
+<a name="line-4"></a>    HTypeable<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>	<font color=Blue>-- sole method, toHType</font>
+<a name="line-5"></a>  <font color=Blue>-- * Explicit representation of Haskell datatype information</font>
+<a name="line-6"></a>  <font color=Cyan>,</font> HType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>		<font color=Blue>-- instance of Eq, Show</font>
+<a name="line-7"></a>  <font color=Cyan>,</font> Constr<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>		<font color=Blue>-- instance of Eq, Show</font>
+<a name="line-8"></a>  <font color=Blue>-- * Helper functions to extract type info as strings</font>
+<a name="line-9"></a>  <font color=Cyan>,</font> showHType		<font color=Blue>-- :: HType -&gt; ShowS</font>
+<a name="line-10"></a>  <font color=Cyan>,</font> showConstr		<font color=Blue>-- :: Int -&gt; HType -&gt; String</font>
+<a name="line-11"></a>  <font color=Blue>-- * Conversion from Haskell datatype to DTD</font>
+<a name="line-12"></a>  <font color=Cyan>,</font> toDTD
+<a name="line-13"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-14"></a>
+<a name="line-15"></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="line-16"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List <font color=Cyan>(</font>partition<font color=Cyan>,</font> intersperse<font color=Cyan>)</font>
+<a name="line-17"></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="line-18"></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="line-19"></a>
+<a name="line-20"></a>
+<a name="line-21"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-22"></a>        <font color=Blue>-- idea: in DrIFT,</font>
+<a name="line-23"></a>        <font color=Blue>--      named field == primitive type, becomes an attribute</font>
+<a name="line-24"></a>        <font color=Blue>--      named field == single-constructor type, renames the tag</font>
+<a name="line-25"></a>        <font color=Blue>--      named field == multi-constructor type, as normal</font>
+<a name="line-26"></a>        <font color=Blue>-- if prefix of all named fields is roughly typename, delete it</font>
+<a name="line-27"></a>
+<a name="line-28"></a><a name="HTypeable"></a><font color=Blue>-- | @HTypeable@ promises that we can create an explicit representation of</font>
+<a name="line-29"></a><a name="HTypeable"></a><font color=Blue>--   of the type of any value.</font>
+<a name="line-30"></a><a name="HTypeable"></a><font color=Green><u>class</u></font> HTypeable a <font color=Green><u>where</u></font>
+<a name="line-31"></a>    toHType <font color=Red>::</font> a <font color=Red>-&gt;</font> HType
+<a name="line-32"></a>
+<a name="line-33"></a><a name="HType"></a><font color=Blue>-- | A concrete representation of any Haskell type.</font>
+<a name="line-34"></a><a name="HType"></a><font color=Green><u>data</u></font> HType <font color=Red>=</font>
+<a name="line-35"></a>      Maybe HType
+<a name="line-36"></a>    <font color=Red>|</font> List HType
+<a name="line-37"></a>    <font color=Red>|</font> Tuple <font color=Red>[</font>HType<font color=Red>]</font>
+<a name="line-38"></a>    <font color=Red>|</font> Prim String String        <font color=Blue>-- ^ separate Haskell name and XML name</font>
+<a name="line-39"></a>    <font color=Red>|</font> String
+<a name="line-40"></a>    <font color=Red>|</font> Defined String <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>[</font>Constr<font color=Red>]</font>
+<a name="line-41"></a>	<font color=Blue>-- ^ A user-defined type has a name, a sequence of type variables,</font>
+<a name="line-42"></a>	<font color=Blue>--   and a set of constructors.  (The variables might already be</font>
+<a name="line-43"></a>	<font color=Blue>--   instantiated to actual types.)</font>
+<a name="line-44"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Show<font color=Cyan>)</font>
+<a name="line-45"></a>
+<a name="line-46"></a><font color=Green><u>instance</u></font> Eq HType <font color=Green><u>where</u></font>
+<a name="line-47"></a>    <font color=Cyan>(</font>Maybe x<font color=Cyan>)</font>  <font color=Cyan>==</font> <font color=Cyan>(</font>Maybe y<font color=Cyan>)</font>  <font color=Red>=</font>  x<font color=Cyan>==</font>y
+<a name="line-48"></a>    <font color=Cyan>(</font>List x<font color=Cyan>)</font>   <font color=Cyan>==</font> <font color=Cyan>(</font>List y<font color=Cyan>)</font>   <font color=Red>=</font>  x<font color=Cyan>==</font>y
+<a name="line-49"></a>    <font color=Cyan>(</font>Tuple xs<font color=Cyan>)</font> <font color=Cyan>==</font> <font color=Cyan>(</font>Tuple ys<font color=Cyan>)</font> <font color=Red>=</font>  xs<font color=Cyan>==</font>ys
+<a name="line-50"></a>    <font color=Cyan>(</font>Prim x <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>==</font> <font color=Cyan>(</font>Prim y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>  x<font color=Cyan>==</font>y
+<a name="line-51"></a>    String     <font color=Cyan>==</font> String     <font color=Red>=</font>  True
+<a name="line-52"></a>    <font color=Cyan>(</font>Defined n xs <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>==</font> <font color=Cyan>(</font>Defined m ys <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font>  n<font color=Cyan>==</font>m 	<font color=Blue>-- &amp;&amp; xs==ys</font>
+<a name="line-53"></a>    <font color=Green><u>_</u></font>          <font color=Cyan>==</font> <font color=Green><u>_</u></font>          <font color=Red>=</font>  False
+<a name="line-54"></a>
+<a name="line-55"></a><a name="Constr"></a><font color=Blue>-- | A concrete representation of any user-defined Haskell constructor.</font>
+<a name="line-56"></a><a name="Constr"></a><font color=Blue>--   The constructor has a name, and a sequence of component types.  The</font>
+<a name="line-57"></a><a name="Constr"></a><font color=Blue>--   first sequence of types represents the minimum set of free type</font>
+<a name="line-58"></a><a name="Constr"></a><font color=Blue>--   variables occurring in the (second) list of real component types.</font>
+<a name="line-59"></a><a name="Constr"></a><font color=Blue>--   If there are fieldnames, they are contained in the final list, and</font>
+<a name="line-60"></a><a name="Constr"></a><font color=Blue>--   correspond one-to-one with the component types.</font>
+<a name="line-61"></a><a name="Constr"></a><font color=Green><u>data</u></font> Constr <font color=Red>=</font> Constr String <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>[</font>HType<font color=Red>]</font> <font color=Blue>-- (Maybe [String])</font>
+<a name="line-62"></a>    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-63"></a>
+<a name="line-64"></a><a name="showConstr"></a><font color=Blue>-- | Project the n'th constructor from an HType and convert it to a string</font>
+<a name="line-65"></a><font color=Blue>--   suitable for an XML tagname.</font>
+<a name="line-66"></a><font color=Blue>showConstr</font> <font color=Red>::</font> Int <font color=Red>-&gt;</font> HType <font color=Red>-&gt;</font> String
+<a name="line-67"></a><font color=Blue>showConstr</font> n <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font> flatConstr <font color=Cyan>(</font>cs<font color=Cyan>!!</font>n<font color=Cyan>)</font> <font color=Magenta>""</font>
+<a name="line-68"></a><font color=Blue>showConstr</font> n <font color=Green><u>_</u></font> <font color=Red>=</font> error <font color=Magenta>"no constructors for builtin types"</font>
+<a name="line-69"></a>
+<a name="line-70"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-71"></a><font color=Blue>-- Some instances</font>
+<a name="line-72"></a><font color=Green><u>instance</u></font> HTypeable Bool <font color=Green><u>where</u></font>
+<a name="line-73"></a>    toHType   <font color=Green><u>_</u></font>    <font color=Red>=</font> Prim <font color=Magenta>"Bool"</font> <font color=Magenta>"bool"</font>
+<a name="line-74"></a><font color=Green><u>instance</u></font> HTypeable Int <font color=Green><u>where</u></font>
+<a name="line-75"></a>    toHType   <font color=Green><u>_</u></font>    <font color=Red>=</font> Prim <font color=Magenta>"Int"</font> <font color=Magenta>"int"</font>
+<a name="line-76"></a><font color=Green><u>instance</u></font> HTypeable Integer <font color=Green><u>where</u></font>
+<a name="line-77"></a>    toHType   <font color=Green><u>_</u></font>    <font color=Red>=</font> Prim <font color=Magenta>"Integer"</font> <font color=Magenta>"integer"</font>
+<a name="line-78"></a><font color=Green><u>instance</u></font> HTypeable Float <font color=Green><u>where</u></font>
+<a name="line-79"></a>    toHType   <font color=Green><u>_</u></font>    <font color=Red>=</font> Prim <font color=Magenta>"Float"</font> <font color=Magenta>"float"</font>
+<a name="line-80"></a><font color=Green><u>instance</u></font> HTypeable Double <font color=Green><u>where</u></font>
+<a name="line-81"></a>    toHType   <font color=Green><u>_</u></font>    <font color=Red>=</font> Prim <font color=Magenta>"Double"</font> <font color=Magenta>"double"</font>
+<a name="line-82"></a><font color=Green><u>instance</u></font> HTypeable Char <font color=Green><u>where</u></font>
+<a name="line-83"></a>    toHType   <font color=Green><u>_</u></font>    <font color=Red>=</font> Prim <font color=Magenta>"Char"</font> <font color=Magenta>"char"</font>
+<a name="line-84"></a>
+<a name="line-85"></a><font color=Green><u>instance</u></font> HTypeable () <font color=Green><u>where</u></font>
+<a name="line-86"></a>    toHType <font color=Green><u>_</u></font>      <font color=Red>=</font> Prim <font color=Magenta>"unit"</font> <font color=Magenta>"unit"</font>
+<a name="line-87"></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>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-88"></a>    toHType p      <font color=Red>=</font> Tuple <font color=Red>[</font>toHType a<font color=Cyan>,</font> toHType b<font color=Red>]</font>
+<a name="line-89"></a>                   <font color=Green><u>where</u></font>  <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Red>=</font> p
+<a name="line-90"></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="line-91"></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="line-92"></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="line-93"></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="line-94"></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="line-95"></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="line-96"></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="line-97"></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="line-98"></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="line-99"></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="line-100"></a>                           <font color=Cyan>,</font> toHType e <font color=Red>]</font>
+<a name="line-101"></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="line-102"></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="line-103"></a>         <font color=Cyan>,</font> HTypeable f<font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-104"></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="line-105"></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="line-106"></a>                           <font color=Cyan>,</font> toHType e<font color=Cyan>,</font> toHType f <font color=Red>]</font>
+<a name="line-107"></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="line-108"></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="line-109"></a>         <font color=Cyan>,</font> HTypeable f<font color=Cyan>,</font> HTypeable g<font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-110"></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>g<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-111"></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="line-112"></a>                           <font color=Cyan>,</font> toHType e<font color=Cyan>,</font> toHType f<font color=Cyan>,</font> toHType g <font color=Red>]</font>
+<a name="line-113"></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>g<font color=Cyan>)</font> <font color=Red>=</font> p
+<a name="line-114"></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="line-115"></a>         <font color=Cyan>,</font> HTypeable f<font color=Cyan>,</font> HTypeable g<font color=Cyan>,</font> HTypeable h<font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-116"></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>g<font color=Cyan>,</font>h<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-117"></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="line-118"></a>                           <font color=Cyan>,</font> toHType e<font color=Cyan>,</font> toHType f<font color=Cyan>,</font> toHType g<font color=Cyan>,</font> toHType h <font color=Red>]</font>
+<a name="line-119"></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>g<font color=Cyan>,</font>h<font color=Cyan>)</font> <font color=Red>=</font> p
+<a name="line-120"></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="line-121"></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> <font color=Red>=&gt;</font>
+<a name="line-122"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-123"></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="line-124"></a>                           <font color=Cyan>,</font> toHType e<font color=Cyan>,</font> toHType f<font color=Cyan>,</font> toHType g<font color=Cyan>,</font> toHType h
+<a name="line-125"></a>                           <font color=Cyan>,</font> toHType i <font color=Red>]</font>
+<a name="line-126"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Red>=</font> p
+<a name="line-127"></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="line-128"></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> <font color=Red>=&gt;</font>
+<a name="line-129"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-130"></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="line-131"></a>                           <font color=Cyan>,</font> toHType e<font color=Cyan>,</font> toHType f<font color=Cyan>,</font> toHType g<font color=Cyan>,</font> toHType h
+<a name="line-132"></a>                           <font color=Cyan>,</font> toHType i<font color=Cyan>,</font> toHType j <font color=Red>]</font>
+<a name="line-133"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>)</font> <font color=Red>=</font> p
+<a name="line-134"></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="line-135"></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="line-136"></a>         <font color=Cyan>,</font> HTypeable k<font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-137"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-138"></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="line-139"></a>                           <font color=Cyan>,</font> toHType e<font color=Cyan>,</font> toHType f<font color=Cyan>,</font> toHType g<font color=Cyan>,</font> toHType h
+<a name="line-140"></a>                           <font color=Cyan>,</font> toHType i<font color=Cyan>,</font> toHType j<font color=Cyan>,</font> toHType k <font color=Red>]</font>
+<a name="line-141"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>)</font> <font color=Red>=</font> p
+<a name="line-142"></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="line-143"></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="line-144"></a>         <font color=Cyan>,</font> HTypeable k<font color=Cyan>,</font> HTypeable l<font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-145"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-146"></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="line-147"></a>                           <font color=Cyan>,</font> toHType e<font color=Cyan>,</font> toHType f<font color=Cyan>,</font> toHType g<font color=Cyan>,</font> toHType h
+<a name="line-148"></a>                           <font color=Cyan>,</font> toHType i<font color=Cyan>,</font> toHType j<font color=Cyan>,</font> toHType k<font color=Cyan>,</font> toHType l <font color=Red>]</font>
+<a name="line-149"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>)</font> <font color=Red>=</font> p
+<a name="line-150"></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="line-151"></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="line-152"></a>         <font color=Cyan>,</font> HTypeable k<font color=Cyan>,</font> HTypeable l<font color=Cyan>,</font> HTypeable m<font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-153"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-154"></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="line-155"></a>                           <font color=Cyan>,</font> toHType e<font color=Cyan>,</font> toHType f<font color=Cyan>,</font> toHType g<font color=Cyan>,</font> toHType h
+<a name="line-156"></a>                           <font color=Cyan>,</font> toHType i<font color=Cyan>,</font> toHType j<font color=Cyan>,</font> toHType k<font color=Cyan>,</font> toHType l
+<a name="line-157"></a>                           <font color=Cyan>,</font> toHType m <font color=Red>]</font>
+<a name="line-158"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>)</font> <font color=Red>=</font> p
+<a name="line-159"></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="line-160"></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="line-161"></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> <font color=Red>=&gt;</font>
+<a name="line-162"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>,</font>n<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-163"></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="line-164"></a>                           <font color=Cyan>,</font> toHType e<font color=Cyan>,</font> toHType f<font color=Cyan>,</font> toHType g<font color=Cyan>,</font> toHType h
+<a name="line-165"></a>                           <font color=Cyan>,</font> toHType i<font color=Cyan>,</font> toHType j<font color=Cyan>,</font> toHType k<font color=Cyan>,</font> toHType l
+<a name="line-166"></a>                           <font color=Cyan>,</font> toHType m<font color=Cyan>,</font> toHType n <font color=Red>]</font>
+<a name="line-167"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>,</font>n<font color=Cyan>)</font> <font color=Red>=</font> p
+<a name="line-168"></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="line-169"></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="line-170"></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> <font color=Red>=&gt;</font>
+<a name="line-171"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>,</font>n<font color=Cyan>,</font>o<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-172"></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="line-173"></a>                           <font color=Cyan>,</font> toHType e<font color=Cyan>,</font> toHType f<font color=Cyan>,</font> toHType g<font color=Cyan>,</font> toHType h
+<a name="line-174"></a>                           <font color=Cyan>,</font> toHType i<font color=Cyan>,</font> toHType j<font color=Cyan>,</font> toHType k<font color=Cyan>,</font> toHType l
+<a name="line-175"></a>                           <font color=Cyan>,</font> toHType m<font color=Cyan>,</font> toHType n<font color=Cyan>,</font> toHType o <font color=Red>]</font>
+<a name="line-176"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>,</font>n<font color=Cyan>,</font>o<font color=Cyan>)</font> <font color=Red>=</font> p
+<a name="line-177"></a>
+<a name="line-178"></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="line-179"></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="line-180"></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="line-181"></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="line-182"></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="line-183"></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="line-184"></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="line-185"></a>                         <font color=Cyan>(</font>Right y<font color=Cyan>)</font> <font color=Red>=</font> m
+<a name="line-186"></a>                         hx <font color=Red>=</font> toHType x
+<a name="line-187"></a>                         hy <font color=Red>=</font> toHType y
+<a name="line-188"></a>
+<a name="line-189"></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="line-190"></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="line-191"></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="line-192"></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="line-193"></a>
+<a name="line-194"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-195"></a>
+<a name="line-196"></a><a name="toDTD"></a><font color=Blue>-- | 'toDTD' converts a concrete representation of the Haskell type of</font>
+<a name="line-197"></a><font color=Blue>--   a value (obtained by the method 'toHType') into a real DocTypeDecl.</font>
+<a name="line-198"></a><font color=Blue>--   It ensures that PERefs are defined before they are used, and that no</font>
+<a name="line-199"></a><font color=Blue>--   element or attribute-list is declared more than once.</font>
+<a name="line-200"></a><font color=Blue>toDTD</font> <font color=Red>::</font> HType <font color=Red>-&gt;</font> DocTypeDecl
+<a name="line-201"></a><font color=Blue>toDTD</font> ht <font color=Red>=</font>
+<a name="line-202"></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="line-203"></a>  <font color=Green><u>where</u></font>
+<a name="line-204"></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="line-205"></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="line-206"></a>                                             f <font color=Cyan>(</font>Entity <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True
+<a name="line-207"></a>                                             f <font color=Green><u>_</u></font> <font color=Red>=</font> False
+<a name="line-208"></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="line-209"></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="line-210"></a>    c0 <font color=Red>=</font> False
+<a name="line-211"></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="line-212"></a>    <font color=Blue>-- toplevel?   history    history   remainingwork     result</font>
+<a name="line-213"></a>    h2d c history chist []       <font color=Red>=</font> []
+<a name="line-214"></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="line-215"></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="line-216"></a>      <font color=Green><u>else</u></font>
+<a name="line-217"></a>        <font color=Green><u>case</u></font> ht <font color=Green><u>of</u></font>
+<a name="line-218"></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="line-219"></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="line-220"></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="line-221"></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="line-222"></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="line-223"></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="line-224"></a>          Defined s <font color=Green><u>_</u></font> cs <font color=Red>-&gt;</font>
+<a name="line-225"></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="line-226"></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="line-227"></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="line-228"></a>    declelem ht <font color=Red>=</font>
+<a name="line-229"></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="line-230"></a>    decltopelem ht <font color=Red>=</font>    <font color=Blue>-- hack to avoid peref at toplevel</font>
+<a name="line-231"></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="line-232"></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="line-233"></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="line-234"></a>      concatMap <font color=Cyan>(</font>declConstr chist<font color=Cyan>)</font> cs
+<a name="line-235"></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="line-236"></a>    declConstr chist c<font color=Red>@</font><font color=Cyan>(</font>Constr s fv hts<font color=Cyan>)</font>
+<a name="line-237"></a>      <font color=Red>|</font> c <font color=Cyan>`notElem`</font> chist <font color=Red>=</font>
+<a name="line-238"></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="line-239"></a>      <font color=Red>|</font> otherwise <font color=Red>=</font> [] 
+<a name="line-240"></a>    declprim <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-241"></a>      <font color=Red>[</font> Element <font color=Cyan>(</font>ElementDecl t EMPTY<font color=Cyan>)</font>
+<a name="line-242"></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="line-243"></a>    declstring <font color=Red>=</font>
+<a name="line-244"></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="line-245"></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="line-246"></a>
+<a name="line-247"></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="line-248"></a><a name="b"></a><font color=Blue>b</font> <font color=Cyan>?</font> f <font color=Red>|</font> b     <font color=Red>=</font> f
+<a name="line-249"></a>      <font color=Red>|</font> not b <font color=Red>=</font> id
+<a name="line-250"></a>
+<a name="line-251"></a><a name="showHType"></a><font color=Blue>-- Flatten an HType to a String suitable for an XML tagname.</font>
+<a name="line-252"></a><font color=Blue>showHType</font> <font color=Red>::</font> HType <font color=Red>-&gt;</font> ShowS
+<a name="line-253"></a><font color=Blue>showHType</font> <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="line-254"></a><font color=Blue>showHType</font> <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="line-255"></a><font color=Blue>showHType</font> <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="line-256"></a>                        <font color=Cyan>.</font> showChar <font color=Magenta>'-'</font>
+<a name="line-257"></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="line-258"></a>                                                  <font color=Cyan>(</font>map showHType hts<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-259"></a><font color=Blue>showHType</font> <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font>  <font color=Red>=</font> showString t
+<a name="line-260"></a><font color=Blue>showHType</font> String      <font color=Red>=</font> showString <font color=Magenta>"string"</font>
+<a name="line-261"></a><font color=Blue>showHType</font> <font color=Cyan>(</font>Defined s fv <font color=Green><u>_</u></font><font color=Cyan>)</font>
+<a name="line-262"></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="line-263"></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="line-264"></a>                                                    <font color=Cyan>(</font>map showHType fv<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-265"></a>
+<a name="line-266"></a><a name="flatConstr"></a><font color=Blue>flatConstr</font> <font color=Red>::</font> Constr <font color=Red>-&gt;</font> ShowS
+<a name="line-267"></a><font color=Blue>flatConstr</font> <font color=Cyan>(</font>Constr s fv <font color=Green><u>_</u></font><font color=Cyan>)</font>
+<a name="line-268"></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="line-269"></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="line-270"></a>
+<a name="line-271"></a><a name="outerHtExpr"></a><font color=Blue>outerHtExpr</font> <font color=Red>::</font> HType <font color=Red>-&gt;</font> CP
+<a name="line-272"></a><font color=Blue>outerHtExpr</font> <font color=Cyan>(</font>Maybe ht<font color=Cyan>)</font>      <font color=Red>=</font> innerHtExpr ht Query
+<a name="line-273"></a><font color=Blue>outerHtExpr</font> <font color=Cyan>(</font>List ht<font color=Cyan>)</font>       <font color=Red>=</font> innerHtExpr ht Star
+<a name="line-274"></a><font color=Blue>outerHtExpr</font> <font color=Cyan>(</font>Defined s fv cs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-275"></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="line-276"></a><font color=Blue>outerHtExpr</font> ht              <font color=Red>=</font> innerHtExpr ht None
+<a name="line-277"></a>
+<a name="line-278"></a><a name="innerHtExpr"></a><font color=Blue>innerHtExpr</font> <font color=Red>::</font> HType <font color=Red>-&gt;</font> Modifier <font color=Red>-&gt;</font> CP
+<a name="line-279"></a><font color=Blue>innerHtExpr</font> <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font>  m <font color=Red>=</font> TagName t m
+<a name="line-280"></a><font color=Blue>innerHtExpr</font> <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="line-281"></a><font color=Blue>innerHtExpr</font> 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="line-282"></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="line-283"></a>                                                        <font color=Blue>--  ***HACK!!!***</font>
+<a name="line-284"></a><font color=Blue>innerHtExpr</font> ht m <font color=Red>=</font> TagName <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> m
+<a name="line-285"></a>
+<a name="line-286"></a><a name="constrHtExpr"></a><font color=Blue>constrHtExpr</font> <font color=Red>::</font> Constr <font color=Red>-&gt;</font> CP
+<a name="line-287"></a><font color=Blue>constrHtExpr</font> <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="line-288"></a><font color=Blue>constrHtExpr</font> <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="line-289"></a>
+<a name="line-290"></a><font color=Blue>------------------------------------------------------------------------</font>
 </pre>
+</body>
 </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
@@ -1,296 +1,302 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>{- |
-<a name="(line2)"></a>   This module defines an internal (generic) representation for XML
-<a name="(line3)"></a>   documents including their DTDs.
-<a name="(line4)"></a>
-<a name="(line5)"></a>   History:
-<a name="(line6)"></a>   The original module was derived by hand from the XML specification,
-<a name="(line7)"></a>   following the grammar precisely.  Then we simplified the types,
-<a name="(line8)"></a>   removing layers of indirection and redundancy, and generally making
-<a name="(line9)"></a>   things easier to work with.  Then we allowed PEReferences to be
-<a name="(line10)"></a>   ubiquitous, by removing them from the types and resolving all
-<a name="(line11)"></a>   PE references at parse-time.  Finally, we added a per-document
-<a name="(line12)"></a>   symbol table for GEReferences, and a whitespace-significance flag
-<a name="(line13)"></a>   for plaintext.
-<a name="(line14)"></a>-}</font>
-<a name="(line15)"></a>
-<a name="(line16)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
-<a name="(line17)"></a>  <font color=Cyan>(</font>
-<a name="(line18)"></a>  <font color=Blue>-- * A simple symbol table mapping strings (references) to values.</font>
-<a name="(line19)"></a>    SymTab
-<a name="(line20)"></a>  <font color=Blue>-- ** Symbol table operations</font>
-<a name="(line21)"></a>  <font color=Cyan>,</font> emptyST
-<a name="(line22)"></a>  <font color=Cyan>,</font> addST
-<a name="(line23)"></a>  <font color=Cyan>,</font> lookupST
-<a name="(line24)"></a>
-<a name="(line25)"></a>  <font color=Blue>-- * XML Types</font>
-<a name="(line26)"></a>  <font color=Blue>-- ** The top-level document container</font>
-<a name="(line27)"></a>  <font color=Cyan>,</font> Document<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line28)"></a>
-<a name="(line29)"></a>  <font color=Blue>-- ** The main document content</font>
-<a name="(line30)"></a>  <font color=Cyan>,</font> Element<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line31)"></a>  <font color=Cyan>,</font> ElemTag<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line32)"></a>  <font color=Cyan>,</font> Content<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line33)"></a>  <font color=Cyan>,</font> Attribute
-<a name="(line34)"></a>  <font color=Cyan>,</font> AttValue<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line35)"></a>  <font color=Cyan>,</font> info
-<a name="(line36)"></a>
-<a name="(line37)"></a>  <font color=Blue>-- ** Administrative parts of the document</font>
-<a name="(line38)"></a>  <font color=Cyan>,</font> Prolog<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line39)"></a>  <font color=Cyan>,</font> XMLDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line40)"></a>  <font color=Cyan>,</font> Misc<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line41)"></a>  <font color=Cyan>,</font> ProcessingInstruction
-<a name="(line42)"></a>  <font color=Cyan>,</font> SDDecl
-<a name="(line43)"></a>  <font color=Cyan>,</font> VersionInfo
-<a name="(line44)"></a>  <font color=Cyan>,</font> Comment
-<a name="(line45)"></a>  <font color=Cyan>,</font> PITarget
-<a name="(line46)"></a>
-<a name="(line47)"></a>  <font color=Blue>-- ** The DTD</font>
-<a name="(line48)"></a>  <font color=Blue>-- *** content model</font>
-<a name="(line49)"></a>  <font color=Cyan>,</font> DocTypeDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line50)"></a>  <font color=Cyan>,</font> MarkupDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line51)"></a>  <font color=Cyan>,</font> ExtSubset<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line52)"></a>  <font color=Cyan>,</font> ExtSubsetDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line53)"></a>  <font color=Cyan>,</font> ElementDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line54)"></a>  <font color=Cyan>,</font> ContentSpec<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line55)"></a>  <font color=Cyan>,</font> CP<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line56)"></a>  <font color=Cyan>,</font> Modifier<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line57)"></a>  <font color=Cyan>,</font> Mixed<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line58)"></a>
-<a name="(line59)"></a>  <font color=Blue>-- *** attribute model</font>
-<a name="(line60)"></a>  <font color=Cyan>,</font> AttListDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line61)"></a>  <font color=Cyan>,</font> AttDef<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line62)"></a>  <font color=Cyan>,</font> AttType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line63)"></a>  <font color=Cyan>,</font> TokenizedType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line64)"></a>  <font color=Cyan>,</font> EnumeratedType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line65)"></a>  <font color=Cyan>,</font> NotationType
-<a name="(line66)"></a>  <font color=Cyan>,</font> Enumeration
-<a name="(line67)"></a>  <font color=Cyan>,</font> DefaultDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line68)"></a>  <font color=Cyan>,</font> FIXED<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line69)"></a>
-<a name="(line70)"></a>  <font color=Blue>-- *** conditional sections</font>
-<a name="(line71)"></a>  <font color=Cyan>,</font> ConditionalSect<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line72)"></a>  <font color=Cyan>,</font> IncludeSect
-<a name="(line73)"></a>  <font color=Cyan>,</font> IgnoreSect
-<a name="(line74)"></a>  <font color=Cyan>,</font> Ignore<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line75)"></a>  <font color=Cyan>,</font> IgnoreSectContents<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line76)"></a>
-<a name="(line77)"></a>  <font color=Blue>-- ** References</font>
-<a name="(line78)"></a>  <font color=Cyan>,</font> Reference<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line79)"></a>  <font color=Cyan>,</font> EntityRef
-<a name="(line80)"></a>  <font color=Cyan>,</font> CharRef
-<a name="(line81)"></a>  <font color=Cyan>,</font> PEReference
-<a name="(line82)"></a>
-<a name="(line83)"></a>  <font color=Blue>-- ** Entities</font>
-<a name="(line84)"></a>  <font color=Cyan>,</font> EntityDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line85)"></a>  <font color=Cyan>,</font> GEDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line86)"></a>  <font color=Cyan>,</font> PEDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line87)"></a>  <font color=Cyan>,</font> EntityDef<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line88)"></a>  <font color=Cyan>,</font> PEDef<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line89)"></a>  <font color=Cyan>,</font> ExternalID<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line90)"></a>  <font color=Cyan>,</font> NDataDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line91)"></a>  <font color=Cyan>,</font> TextDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line92)"></a>  <font color=Cyan>,</font> ExtParsedEnt<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line93)"></a>  <font color=Cyan>,</font> ExtPE<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line94)"></a>  <font color=Cyan>,</font> NotationDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line95)"></a>  <font color=Cyan>,</font> PublicID<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line96)"></a>  <font color=Cyan>,</font> EncodingDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line97)"></a>  <font color=Cyan>,</font> EntityValue<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line98)"></a>  <font color=Cyan>,</font> EV<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line99)"></a>  <font color=Cyan>,</font> PubidLiteral<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line100)"></a>  <font color=Cyan>,</font> SystemLiteral<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line101)"></a>
-<a name="(line102)"></a>  <font color=Blue>-- ** Basic value types</font>
-<a name="(line103)"></a>  <font color=Cyan>,</font> Name
-<a name="(line104)"></a>  <font color=Cyan>,</font> Names
-<a name="(line105)"></a>  <font color=Cyan>,</font> NmToken
-<a name="(line106)"></a>  <font color=Cyan>,</font> NmTokens
-<a name="(line107)"></a>  <font color=Cyan>,</font> CharData
-<a name="(line108)"></a>  <font color=Cyan>,</font> CDSect
-<a name="(line109)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line110)"></a>
-<a name="(line111)"></a>
-<a name="(line112)"></a><font color=Blue>{- A simple symbol table for storing macros whilst parsing. -}</font>
-<a name="(line113)"></a>
-<a name="(line114)"></a><a name="SymTab"></a><font color=Green><u>type</u></font> SymTab a <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font>a<font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line115)"></a>
-<a name="(line116)"></a><a name="emptyST"></a>emptyST <font color=Red>::</font> SymTab a
-<a name="(line117)"></a>emptyST  <font color=Red>=</font> []
-<a name="(line118)"></a>
-<a name="(line119)"></a><a name="addST"></a>addST <font color=Red>::</font> String <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> SymTab a <font color=Red>-&gt;</font> SymTab a
-<a name="(line120)"></a>addST n v <font color=Red>=</font> <font color=Cyan>(</font><font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font><font color=Red><b>:</b></font><font color=Cyan>)</font>
-<a name="(line121)"></a>
-<a name="(line122)"></a><a name="lookupST"></a>lookupST <font color=Red>::</font> String <font color=Red>-&gt;</font> SymTab a <font color=Red>-&gt;</font> Maybe a
-<a name="(line123)"></a>lookupST <font color=Red>=</font> lookup
-<a name="(line124)"></a>
-<a name="(line125)"></a>
-<a name="(line126)"></a>
-<a name="(line127)"></a><font color=Blue>{- XML types start here -}</font>
-<a name="(line128)"></a>
-<a name="(line129)"></a><a name="Document"></a><font color=Blue>-- | The symbol table stored in a document holds all its general entity</font>
-<a name="(line130)"></a><a name="Document"></a><font color=Blue>--   reference definitions.</font>
-<a name="(line131)"></a><a name="Document"></a><font color=Green><u>data</u></font> Document i <font color=Red>=</font> Document Prolog <font color=Cyan>(</font>SymTab EntityDef<font color=Cyan>)</font> <font color=Cyan>(</font>Element i<font color=Cyan>)</font> <font color=Red>[</font>Misc<font color=Red>]</font>
-<a name="(line132)"></a>                  <font color=Green><u>deriving</u></font> Eq
-<a name="(line133)"></a><a name="Prolog"></a><font color=Green><u>data</u></font> Prolog     <font color=Red>=</font> Prolog <font color=Cyan>(</font>Maybe XMLDecl<font color=Cyan>)</font> <font color=Red>[</font>Misc<font color=Red>]</font> <font color=Cyan>(</font>Maybe DocTypeDecl<font color=Cyan>)</font> <font color=Red>[</font>Misc<font color=Red>]</font>
-<a name="(line134)"></a>                  <font color=Green><u>deriving</u></font> Eq
-<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="(line139)"></a>                <font color=Green><u>deriving</u></font> Eq
-<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="(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
-<a name="(line150)"></a>                 <font color=Red>|</font> AttList  AttListDecl
-<a name="(line151)"></a>                 <font color=Red>|</font> Entity   EntityDecl
-<a name="(line152)"></a>                 <font color=Red>|</font> Notation NotationDecl
-<a name="(line153)"></a>                 <font color=Red>|</font> MarkupMisc Misc
-<a name="(line154)"></a>                 <font color=Green><u>deriving</u></font> Eq
-<a name="(line155)"></a>
-<a name="(line156)"></a><a name="ExtSubset"></a><font color=Green><u>data</u></font> ExtSubset     <font color=Red>=</font> ExtSubset <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="(line157)"></a><a name="ExtSubsetDecl"></a><font color=Green><u>data</u></font> ExtSubsetDecl <font color=Red>=</font> ExtMarkupDecl MarkupDecl
-<a name="(line158)"></a>                   <font color=Red>|</font> ExtConditionalSect ConditionalSect
-<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="(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="(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="(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
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Types.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>{- |
+<a name="line-2"></a>   This module defines an internal (generic) representation for XML
+<a name="line-3"></a>   documents including their DTDs.
+<a name="line-4"></a>
+<a name="line-5"></a>   History:
+<a name="line-6"></a>   The original module was derived by hand from the XML specification,
+<a name="line-7"></a>   following the grammar precisely.  Then we simplified the types,
+<a name="line-8"></a>   removing layers of indirection and redundancy, and generally making
+<a name="line-9"></a>   things easier to work with.  Then we allowed PEReferences to be
+<a name="line-10"></a>   ubiquitous, by removing them from the types and resolving all
+<a name="line-11"></a>   PE references at parse-time.  Finally, we added a per-document
+<a name="line-12"></a>   symbol table for GEReferences, and a whitespace-significance flag
+<a name="line-13"></a>   for plaintext.
+<a name="line-14"></a>-}</font>
+<a name="line-15"></a>
+<a name="line-16"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types
+<a name="line-17"></a>  <font color=Cyan>(</font>
+<a name="line-18"></a>  <font color=Blue>-- * A simple symbol table mapping strings (references) to values.</font>
+<a name="line-19"></a>    SymTab
+<a name="line-20"></a>  <font color=Blue>-- ** Symbol table operations</font>
+<a name="line-21"></a>  <font color=Cyan>,</font> emptyST
+<a name="line-22"></a>  <font color=Cyan>,</font> addST
+<a name="line-23"></a>  <font color=Cyan>,</font> lookupST
+<a name="line-24"></a>
+<a name="line-25"></a>  <font color=Blue>-- * XML Types</font>
+<a name="line-26"></a>  <font color=Blue>-- ** The top-level document container</font>
+<a name="line-27"></a>  <font color=Cyan>,</font> Document<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-28"></a>
+<a name="line-29"></a>  <font color=Blue>-- ** The main document content</font>
+<a name="line-30"></a>  <font color=Cyan>,</font> Element<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-31"></a>  <font color=Cyan>,</font> ElemTag<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-32"></a>  <font color=Cyan>,</font> Content<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-33"></a>  <font color=Cyan>,</font> Attribute
+<a name="line-34"></a>  <font color=Cyan>,</font> AttValue<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-35"></a>  <font color=Cyan>,</font> info
+<a name="line-36"></a>
+<a name="line-37"></a>  <font color=Blue>-- ** Administrative parts of the document</font>
+<a name="line-38"></a>  <font color=Cyan>,</font> Prolog<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-39"></a>  <font color=Cyan>,</font> XMLDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-40"></a>  <font color=Cyan>,</font> Misc<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-41"></a>  <font color=Cyan>,</font> ProcessingInstruction
+<a name="line-42"></a>  <font color=Cyan>,</font> SDDecl
+<a name="line-43"></a>  <font color=Cyan>,</font> VersionInfo
+<a name="line-44"></a>  <font color=Cyan>,</font> Comment
+<a name="line-45"></a>  <font color=Cyan>,</font> PITarget
+<a name="line-46"></a>
+<a name="line-47"></a>  <font color=Blue>-- ** The DTD</font>
+<a name="line-48"></a>  <font color=Blue>-- *** content model</font>
+<a name="line-49"></a>  <font color=Cyan>,</font> DocTypeDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-50"></a>  <font color=Cyan>,</font> MarkupDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-51"></a>  <font color=Cyan>,</font> ExtSubset<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-52"></a>  <font color=Cyan>,</font> ExtSubsetDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-53"></a>  <font color=Cyan>,</font> ElementDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-54"></a>  <font color=Cyan>,</font> ContentSpec<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-55"></a>  <font color=Cyan>,</font> CP<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-56"></a>  <font color=Cyan>,</font> Modifier<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-57"></a>  <font color=Cyan>,</font> Mixed<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-58"></a>
+<a name="line-59"></a>  <font color=Blue>-- *** attribute model</font>
+<a name="line-60"></a>  <font color=Cyan>,</font> AttListDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-61"></a>  <font color=Cyan>,</font> AttDef<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-62"></a>  <font color=Cyan>,</font> AttType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-63"></a>  <font color=Cyan>,</font> TokenizedType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-64"></a>  <font color=Cyan>,</font> EnumeratedType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-65"></a>  <font color=Cyan>,</font> NotationType
+<a name="line-66"></a>  <font color=Cyan>,</font> Enumeration
+<a name="line-67"></a>  <font color=Cyan>,</font> DefaultDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-68"></a>  <font color=Cyan>,</font> FIXED<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-69"></a>
+<a name="line-70"></a>  <font color=Blue>-- *** conditional sections</font>
+<a name="line-71"></a>  <font color=Cyan>,</font> ConditionalSect<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-72"></a>  <font color=Cyan>,</font> IncludeSect
+<a name="line-73"></a>  <font color=Cyan>,</font> IgnoreSect
+<a name="line-74"></a>  <font color=Cyan>,</font> Ignore<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-75"></a>  <font color=Cyan>,</font> IgnoreSectContents<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-76"></a>
+<a name="line-77"></a>  <font color=Blue>-- ** References</font>
+<a name="line-78"></a>  <font color=Cyan>,</font> Reference<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-79"></a>  <font color=Cyan>,</font> EntityRef
+<a name="line-80"></a>  <font color=Cyan>,</font> CharRef
+<a name="line-81"></a>  <font color=Cyan>,</font> PEReference
+<a name="line-82"></a>
+<a name="line-83"></a>  <font color=Blue>-- ** Entities</font>
+<a name="line-84"></a>  <font color=Cyan>,</font> EntityDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-85"></a>  <font color=Cyan>,</font> GEDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-86"></a>  <font color=Cyan>,</font> PEDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-87"></a>  <font color=Cyan>,</font> EntityDef<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-88"></a>  <font color=Cyan>,</font> PEDef<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-89"></a>  <font color=Cyan>,</font> ExternalID<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-90"></a>  <font color=Cyan>,</font> NDataDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-91"></a>  <font color=Cyan>,</font> TextDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-92"></a>  <font color=Cyan>,</font> ExtParsedEnt<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-93"></a>  <font color=Cyan>,</font> ExtPE<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-94"></a>  <font color=Cyan>,</font> NotationDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-95"></a>  <font color=Cyan>,</font> PublicID<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-96"></a>  <font color=Cyan>,</font> EncodingDecl<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-97"></a>  <font color=Cyan>,</font> EntityValue<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-98"></a>  <font color=Cyan>,</font> EV<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-99"></a>  <font color=Cyan>,</font> PubidLiteral<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-100"></a>  <font color=Cyan>,</font> SystemLiteral<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-101"></a>
+<a name="line-102"></a>  <font color=Blue>-- ** Basic value types</font>
+<a name="line-103"></a>  <font color=Cyan>,</font> Name
+<a name="line-104"></a>  <font color=Cyan>,</font> Names
+<a name="line-105"></a>  <font color=Cyan>,</font> NmToken
+<a name="line-106"></a>  <font color=Cyan>,</font> NmTokens
+<a name="line-107"></a>  <font color=Cyan>,</font> CharData
+<a name="line-108"></a>  <font color=Cyan>,</font> CDSect
+<a name="line-109"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-110"></a>
+<a name="line-111"></a>
+<a name="line-112"></a><font color=Blue>{- A simple symbol table for storing macros whilst parsing. -}</font>
+<a name="line-113"></a>
+<a name="line-114"></a><a name="SymTab"></a><font color=Green><u>type</u></font> SymTab a <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font>a<font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-115"></a>
+<a name="line-116"></a><a name="emptyST"></a><font color=Blue>emptyST</font> <font color=Red>::</font> SymTab a
+<a name="line-117"></a><font color=Blue>emptyST</font>  <font color=Red>=</font> []
+<a name="line-118"></a>
+<a name="line-119"></a><a name="addST"></a><font color=Blue>addST</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> SymTab a <font color=Red>-&gt;</font> SymTab a
+<a name="line-120"></a><font color=Blue>addST</font> n v <font color=Red>=</font> <font color=Cyan>(</font><font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font><font color=Red><b>:</b></font><font color=Cyan>)</font>
+<a name="line-121"></a>
+<a name="line-122"></a><a name="lookupST"></a><font color=Blue>lookupST</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> SymTab a <font color=Red>-&gt;</font> Maybe a
+<a name="line-123"></a><font color=Blue>lookupST</font> <font color=Red>=</font> lookup
+<a name="line-124"></a>
+<a name="line-125"></a>
+<a name="line-126"></a>
+<a name="line-127"></a><font color=Blue>{- XML types start here -}</font>
+<a name="line-128"></a>
+<a name="line-129"></a><a name="Document"></a><font color=Blue>-- | The symbol table stored in a document holds all its general entity</font>
+<a name="line-130"></a><a name="Document"></a><font color=Blue>--   reference definitions.</font>
+<a name="line-131"></a><a name="Document"></a><font color=Green><u>data</u></font> Document i <font color=Red>=</font> Document Prolog <font color=Cyan>(</font>SymTab EntityDef<font color=Cyan>)</font> <font color=Cyan>(</font>Element i<font color=Cyan>)</font> <font color=Red>[</font>Misc<font color=Red>]</font>
+<a name="line-132"></a>                  <font color=Green><u>deriving</u></font> Eq
+<a name="line-133"></a><a name="Prolog"></a><font color=Green><u>data</u></font> Prolog     <font color=Red>=</font> Prolog <font color=Cyan>(</font>Maybe XMLDecl<font color=Cyan>)</font> <font color=Red>[</font>Misc<font color=Red>]</font> <font color=Cyan>(</font>Maybe DocTypeDecl<font color=Cyan>)</font> <font color=Red>[</font>Misc<font color=Red>]</font>
+<a name="line-134"></a>                  <font color=Green><u>deriving</u></font> Eq
+<a name="line-135"></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="line-136"></a>                  <font color=Green><u>deriving</u></font> Eq
+<a name="line-137"></a><a name="Misc"></a><font color=Green><u>data</u></font> Misc       <font color=Red>=</font> Comment Comment
+<a name="line-138"></a>                <font color=Red>|</font> PI ProcessingInstruction
+<a name="line-139"></a>                <font color=Green><u>deriving</u></font> Eq
+<a name="line-140"></a>
+<a name="line-141"></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="line-142"></a>
+<a name="line-143"></a><a name="SDDecl"></a><font color=Green><u>type</u></font> SDDecl      <font color=Red>=</font> Bool
+<a name="line-144"></a><a name="VersionInfo"></a><font color=Green><u>type</u></font> VersionInfo <font color=Red>=</font> String
+<a name="line-145"></a><a name="Comment"></a><font color=Green><u>type</u></font> Comment     <font color=Red>=</font> String
+<a name="line-146"></a><a name="PITarget"></a><font color=Green><u>type</u></font> PITarget    <font color=Red>=</font> String
+<a name="line-147"></a>
+<a name="line-148"></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="line-149"></a><a name="MarkupDecl"></a><font color=Green><u>data</u></font> MarkupDecl  <font color=Red>=</font> Element  ElementDecl
+<a name="line-150"></a>                 <font color=Red>|</font> AttList  AttListDecl
+<a name="line-151"></a>                 <font color=Red>|</font> Entity   EntityDecl
+<a name="line-152"></a>                 <font color=Red>|</font> Notation NotationDecl
+<a name="line-153"></a>                 <font color=Red>|</font> MarkupMisc Misc
+<a name="line-154"></a>                 <font color=Green><u>deriving</u></font> Eq
+<a name="line-155"></a>
+<a name="line-156"></a><a name="ExtSubset"></a><font color=Green><u>data</u></font> ExtSubset     <font color=Red>=</font> ExtSubset <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="line-157"></a><a name="ExtSubsetDecl"></a><font color=Green><u>data</u></font> ExtSubsetDecl <font color=Red>=</font> ExtMarkupDecl MarkupDecl
+<a name="line-158"></a>                   <font color=Red>|</font> ExtConditionalSect ConditionalSect
+<a name="line-159"></a>                   <font color=Green><u>deriving</u></font> Eq
+<a name="line-160"></a>
+<a name="line-161"></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="line-162"></a>                                        <font color=Blue>--  intermediate for parsing</font>
+<a name="line-163"></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="line-164"></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="line-165"></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="line-166"></a>               <font color=Red>|</font> CString Bool CharData i
+<a name="line-167"></a>                        <font color=Blue>-- ^ bool is whether whitespace is significant</font>
+<a name="line-168"></a>               <font color=Red>|</font> CRef Reference i
+<a name="line-169"></a>               <font color=Red>|</font> CMisc Misc i
+<a name="line-170"></a>               <font color=Green><u>deriving</u></font> Eq
+<a name="line-171"></a>
+<a name="line-172"></a><a name="info"></a><font color=Blue>info</font> <font color=Red>::</font> Content t <font color=Red>-&gt;</font> t
+<a name="line-173"></a><font color=Blue>info</font> <font color=Cyan>(</font>CElem <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i
+<a name="line-174"></a><font color=Blue>info</font> <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="line-175"></a><font color=Blue>info</font> <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i
+<a name="line-176"></a><font color=Blue>info</font> <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i
+<a name="line-177"></a>
+<a name="line-178"></a><font color=Green><u>instance</u></font> Functor Document <font color=Green><u>where</u></font>
+<a name="line-179"></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="line-180"></a><font color=Green><u>instance</u></font> Functor Element <font color=Green><u>where</u></font>
+<a name="line-181"></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="line-182"></a><font color=Green><u>instance</u></font> Functor Content <font color=Green><u>where</u></font>
+<a name="line-183"></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="line-184"></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="line-185"></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="line-186"></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="line-187"></a>
+<a name="line-188"></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="line-189"></a><a name="ContentSpec"></a><font color=Green><u>data</u></font> ContentSpec <font color=Red>=</font> EMPTY
+<a name="line-190"></a>                 <font color=Red>|</font> ANY
+<a name="line-191"></a>                 <font color=Red>|</font> Mixed Mixed
+<a name="line-192"></a>                 <font color=Red>|</font> ContentSpec CP
+<a name="line-193"></a>                 <font color=Green><u>deriving</u></font> Eq
+<a name="line-194"></a><a name="CP"></a><font color=Blue>-- FIXME: What is TagName here? Seems to be in disagreement with XML spec.</font>
+<a name="line-195"></a><a name="CP"></a><font color=Green><u>data</u></font> CP <font color=Red>=</font> TagName Name Modifier
+<a name="line-196"></a>        <font color=Red>|</font> Choice <font color=Red>[</font>CP<font color=Red>]</font> Modifier
+<a name="line-197"></a>        <font color=Red>|</font> Seq <font color=Red>[</font>CP<font color=Red>]</font> Modifier
+<a name="line-198"></a>        <font color=Green><u>deriving</u></font> Eq
+<a name="line-199"></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="line-200"></a>              <font color=Red>|</font> Query <font color=Blue>-- ^ Zero Or One</font>
+<a name="line-201"></a>              <font color=Red>|</font> Star  <font color=Blue>-- ^ Zero Or More</font>
+<a name="line-202"></a>              <font color=Red>|</font> Plus  <font color=Blue>-- ^ One Or More</font>
+<a name="line-203"></a>              <font color=Green><u>deriving</u></font> Eq
+<a name="line-204"></a><a name="Mixed"></a><font color=Green><u>data</u></font> Mixed <font color=Red>=</font> PCDATA
+<a name="line-205"></a>           <font color=Red>|</font> PCDATAplus <font color=Red>[</font>Name<font color=Red>]</font>
+<a name="line-206"></a>           <font color=Green><u>deriving</u></font> Eq
+<a name="line-207"></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="line-208"></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="line-209"></a><a name="AttType"></a><font color=Green><u>data</u></font> AttType     <font color=Red>=</font> StringType
+<a name="line-210"></a>                 <font color=Red>|</font> TokenizedType TokenizedType
+<a name="line-211"></a>                 <font color=Red>|</font> EnumeratedType EnumeratedType
+<a name="line-212"></a>                 <font color=Green><u>deriving</u></font> Eq
+<a name="line-213"></a><a name="TokenizedType"></a><font color=Green><u>data</u></font> TokenizedType <font color=Red>=</font> ID
+<a name="line-214"></a>                   <font color=Red>|</font> IDREF
+<a name="line-215"></a>                   <font color=Red>|</font> IDREFS
+<a name="line-216"></a>                   <font color=Red>|</font> ENTITY
+<a name="line-217"></a>                   <font color=Red>|</font> ENTITIES
+<a name="line-218"></a>                   <font color=Red>|</font> NMTOKEN
+<a name="line-219"></a>                   <font color=Red>|</font> NMTOKENS
+<a name="line-220"></a>                   <font color=Green><u>deriving</u></font> Eq
+<a name="line-221"></a><a name="EnumeratedType"></a><font color=Green><u>data</u></font> EnumeratedType <font color=Red>=</font> NotationType NotationType
+<a name="line-222"></a>                    <font color=Red>|</font> Enumeration Enumeration
+<a name="line-223"></a>                    <font color=Green><u>deriving</u></font> Eq
+<a name="line-224"></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="line-225"></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="line-226"></a><a name="DefaultDecl"></a><font color=Green><u>data</u></font> DefaultDecl    <font color=Red>=</font> REQUIRED
+<a name="line-227"></a>                    <font color=Red>|</font> IMPLIED
+<a name="line-228"></a>                    <font color=Red>|</font> DefaultTo AttValue <font color=Cyan>(</font>Maybe FIXED<font color=Cyan>)</font>
+<a name="line-229"></a>                    <font color=Green><u>deriving</u></font> Eq
+<a name="line-230"></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="line-231"></a>
+<a name="line-232"></a><a name="ConditionalSect"></a><font color=Green><u>data</u></font> ConditionalSect <font color=Red>=</font> IncludeSect IncludeSect
+<a name="line-233"></a>                     <font color=Red>|</font> IgnoreSect IgnoreSect
+<a name="line-234"></a>                     <font color=Green><u>deriving</u></font> Eq
+<a name="line-235"></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="line-236"></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="line-237"></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="line-238"></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="line-239"></a>
+<a name="line-240"></a><a name="Reference"></a><font color=Green><u>data</u></font> Reference    <font color=Red>=</font> RefEntity EntityRef
+<a name="line-241"></a>                  <font color=Red>|</font> RefChar CharRef
+<a name="line-242"></a>                  <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>
+<a name="line-243"></a><a name="EntityRef"></a><font color=Green><u>type</u></font> EntityRef    <font color=Red>=</font> Name
+<a name="line-244"></a><a name="CharRef"></a><font color=Green><u>type</u></font> CharRef      <font color=Red>=</font> Int
+<a name="line-245"></a><a name="PEReference"></a><font color=Green><u>type</u></font> PEReference  <font color=Red>=</font> Name
+<a name="line-246"></a>
+<a name="line-247"></a><a name="EntityDecl"></a><font color=Green><u>data</u></font> EntityDecl   <font color=Red>=</font> EntityGEDecl GEDecl
+<a name="line-248"></a>                  <font color=Red>|</font> EntityPEDecl PEDecl
+<a name="line-249"></a>                  <font color=Green><u>deriving</u></font> Eq
+<a name="line-250"></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="line-251"></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="line-252"></a><a name="EntityDef"></a><font color=Green><u>data</u></font> EntityDef    <font color=Red>=</font> DefEntityValue EntityValue
+<a name="line-253"></a>                  <font color=Red>|</font> DefExternalID ExternalID <font color=Cyan>(</font>Maybe NDataDecl<font color=Cyan>)</font>
+<a name="line-254"></a>                  <font color=Green><u>deriving</u></font> Eq
+<a name="line-255"></a><a name="PEDef"></a><font color=Green><u>data</u></font> PEDef        <font color=Red>=</font> PEDefEntityValue EntityValue
+<a name="line-256"></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="line-257"></a><a name="ExternalID"></a><font color=Green><u>data</u></font> ExternalID   <font color=Red>=</font> SYSTEM SystemLiteral
+<a name="line-258"></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="line-259"></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="line-260"></a>
+<a name="line-261"></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="line-262"></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="line-263"></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="line-264"></a>
+<a name="line-265"></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="line-266"></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="line-267"></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="line-268"></a>
+<a name="line-269"></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="line-270"></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="line-271"></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="line-272"></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="line-273"></a>
+<a name="line-274"></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="line-275"></a><font color=Green><u>instance</u></font> Show AttValue <font color=Green><u>where</u></font>
+<a name="line-276"></a>  show <font color=Cyan>(</font>AttValue v<font color=Cyan>)</font> <font color=Red>=</font> concatMap decode v
+<a name="line-277"></a>    <font color=Green><u>where</u></font>
+<a name="line-278"></a>      decode <font color=Cyan>(</font>Left  w<font color=Cyan>)</font>               <font color=Red>=</font> w
+<a name="line-279"></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="line-280"></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="line-281"></a>
+<a name="line-282"></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="line-283"></a><a name="EV"></a><font color=Green><u>data</u></font> EV <font color=Red>=</font> EVString String
+<a name="line-284"></a> <font color=Blue>--  -- | EVPERef PEReference</font>
+<a name="line-285"></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="line-286"></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="line-287"></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="line-288"></a><a name="CharData"></a><font color=Green><u>type</u></font> CharData         <font color=Red>=</font> String
+<a name="line-289"></a><a name="CDSect"></a><font color=Green><u>type</u></font> CDSect           <font color=Red>=</font> CharData
+<a name="line-290"></a>
+<a name="line-291"></a><font color=Green><u>instance</u></font> Eq ElemTag <font color=Green><u>where</u></font>
+<a name="line-292"></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>
+</body>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Util.html b/docs/HaXml/src/Text/XML/HaXml/Util.html
--- a/docs/HaXml/src/Text/XML/HaXml/Util.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Util.html
@@ -1,45 +1,51 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>{- |
-<a name="(line2)"></a> - Only a shmall module containing some helper functions to extract xml content
-<a name="(line3)"></a> - I would have added this to Types but I've put it into an additional module
-<a name="(line4)"></a> - to avoid circular references (Verbatim &lt;-&gt; Types)
-<a name="(line5)"></a>-}</font>
-<a name="(line6)"></a>
-<a name="(line7)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Util
-<a name="(line8)"></a>  <font color=Cyan>(</font>
-<a name="(line9)"></a>  <font color=Blue>-- ** utility functions to access XML content</font>
-<a name="(line10)"></a>    docContent
-<a name="(line11)"></a>  <font color=Cyan>,</font> contentElem
-<a name="(line12)"></a>  <font color=Cyan>,</font> attrs
-<a name="(line13)"></a>  <font color=Cyan>,</font> tagTextContent
-<a name="(line14)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line15)"></a>
-<a name="(line16)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn
-<a name="(line17)"></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="(line18)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim
-<a name="(line19)"></a>
-<a name="(line20)"></a><a name="docContent"></a><font color=Blue>-- get the main element of the document so that you can apply CFilters directly</font>
-<a name="(line21)"></a><font color=Blue>-- i is typically (posInNewCxt "filename" Nothing) </font>
-<a name="(line22)"></a>docContent <font color=Red>::</font> i <font color=Red>-&gt;</font> Document i <font color=Red>-&gt;</font> Content i
-<a name="(line23)"></a>docContent i <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> e <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> CElem e i
-<a name="(line24)"></a>
-<a name="(line25)"></a><a name="contentElem"></a><font color=Blue>-- if you know that your CFilter returns a tag your can use this function to get the tag Element </font>
-<a name="(line26)"></a>contentElem <font color=Red>::</font>  Content i <font color=Red>-&gt;</font> Element i
-<a name="(line27)"></a>contentElem <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> e
-<a name="(line28)"></a>contentElem <font color=Green><u>_</u></font> <font color=Red>=</font> error <font color=Magenta>"content is not a CElem"</font>
-<a name="(line29)"></a><a name="attrs"></a>attrs <font color=Red>::</font> Element i <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font>
-<a name="(line30)"></a>attrs <font color=Cyan>(</font> Elem <font color=Green><u>_</u></font> attrs <font color=Green><u>_</u></font> <font color=Cyan>)</font> <font color=Red>=</font> attrs
-<a name="(line31)"></a><a name="tagTextContent"></a>tagTextContent <font color=Cyan>(</font><font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> concatMap verbatim cs 
-<a name="(line32)"></a>
-<a name="(line33)"></a><font color=Blue>{-
-<a name="(line34)"></a>  now you can extract an attribute quite easily:
-<a name="(line35)"></a>    let doc = "&lt;xml&gt;&lt;a&gt;&lt;b a=\"x\"&gt;content&lt;/b&gt;&lt;/a&gt;&lt;/xml&gt;"
-<a name="(line36)"></a>    let b = head $ xtract id "a/b" $ docContent (posInNewCxt filename Nothing) $ xmlParse filename doc
-<a name="(line37)"></a>    putStrLn $ "attr a of tag b" ++ (show $ lookup "a" $  attrs $ contentElem b)
-<a name="(line38)"></a>    putStrLn $ "text content of b :" ++ tagTextContent b
-<a name="(line39)"></a>  still (too) much code IMHO
-<a name="(line40)"></a>-}</font>
-<a name="(line41)"></a>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Util.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>{- |
+<a name="line-2"></a> - Only a shmall module containing some helper functions to extract xml content
+<a name="line-3"></a> - I would have added this to Types but I've put it into an additional module
+<a name="line-4"></a> - to avoid circular references (Verbatim &lt;-&gt; Types)
+<a name="line-5"></a>-}</font>
+<a name="line-6"></a>
+<a name="line-7"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Util
+<a name="line-8"></a>  <font color=Cyan>(</font>
+<a name="line-9"></a>  <font color=Blue>-- ** utility functions to access XML content</font>
+<a name="line-10"></a>    docContent
+<a name="line-11"></a>  <font color=Cyan>,</font> contentElem
+<a name="line-12"></a>  <font color=Cyan>,</font> attrs
+<a name="line-13"></a>  <font color=Cyan>,</font> tagTextContent
+<a name="line-14"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-15"></a>
+<a name="line-16"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn
+<a name="line-17"></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="line-18"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim
+<a name="line-19"></a>
+<a name="line-20"></a><a name="docContent"></a><font color=Blue>-- get the main element of the document so that you can apply CFilters directly</font>
+<a name="line-21"></a><font color=Blue>-- i is typically (posInNewCxt "filename" Nothing) </font>
+<a name="line-22"></a><font color=Blue>docContent</font> <font color=Red>::</font> i <font color=Red>-&gt;</font> Document i <font color=Red>-&gt;</font> Content i
+<a name="line-23"></a><font color=Blue>docContent</font> i <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> e <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> CElem e i
+<a name="line-24"></a>
+<a name="line-25"></a><a name="contentElem"></a><font color=Blue>-- if you know that your CFilter returns a tag your can use this function to get the tag Element </font>
+<a name="line-26"></a><font color=Blue>contentElem</font> <font color=Red>::</font>  Content i <font color=Red>-&gt;</font> Element i
+<a name="line-27"></a><font color=Blue>contentElem</font> <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> e
+<a name="line-28"></a><font color=Blue>contentElem</font> <font color=Green><u>_</u></font> <font color=Red>=</font> error <font color=Magenta>"content is not a CElem"</font>
+<a name="line-29"></a><a name="attrs"></a><font color=Blue>attrs</font> <font color=Red>::</font> Element i <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font>
+<a name="line-30"></a><font color=Blue>attrs</font> <font color=Cyan>(</font> Elem <font color=Green><u>_</u></font> attrs <font color=Green><u>_</u></font> <font color=Cyan>)</font> <font color=Red>=</font> attrs
+<a name="line-31"></a><a name="tagTextContent"></a><font color=Blue>tagTextContent</font> <font color=Cyan>(</font><font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> concatMap verbatim cs 
+<a name="line-32"></a>
+<a name="line-33"></a><font color=Blue>{-
+<a name="line-34"></a>  now you can extract an attribute quite easily:
+<a name="line-35"></a>    let doc = "&lt;xml&gt;&lt;a&gt;&lt;b a=\"x\"&gt;content&lt;/b&gt;&lt;/a&gt;&lt;/xml&gt;"
+<a name="line-36"></a>    let b = head $ xtract id "a/b" $ docContent (posInNewCxt filename Nothing) $ xmlParse filename doc
+<a name="line-37"></a>    putStrLn $ "attr a of tag b" ++ (show $ lookup "a" $  attrs $ contentElem b)
+<a name="line-38"></a>    putStrLn $ "text content of b :" ++ tagTextContent b
+<a name="line-39"></a>  still (too) much code IMHO
+<a name="line-40"></a>-}</font>
+<a name="line-41"></a>
 </pre>
+</body>
 </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
@@ -1,276 +1,282 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | Validate a document against a dtd.</font>
-<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>Validate
-<a name="(line3)"></a>  <font color=Cyan>(</font> validate
-<a name="(line4)"></a>  <font color=Cyan>,</font> partialValidate
-<a name="(line5)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line6)"></a>
-<a name="(line7)"></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="(line8)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators <font color=Cyan>(</font>multi<font color=Cyan>,</font>tag<font color=Cyan>,</font>iffind<font color=Cyan>,</font>literal<font color=Cyan>,</font>none<font color=Cyan>,</font>o<font color=Cyan>)</font>
-<a name="(line9)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent <font color=Cyan>(</font>attr2str<font color=Cyan>)</font>
-<a name="(line10)"></a><font color=Green><u>import</u></font> Maybe <font color=Cyan>(</font>fromMaybe<font color=Cyan>,</font>isNothing<font color=Cyan>,</font>fromJust<font color=Cyan>)</font>
-<a name="(line11)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>,</font>nub<font color=Cyan>,</font><font color=Cyan>(</font><font color=Cyan>\\</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line12)"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>isSpace<font color=Cyan>)</font>
-<a name="(line13)"></a>
-<a name="(line14)"></a><font color=Magenta><em>#if __GLASGOW_HASKELL__ &gt;= 604 || __NHC__ &gt;= 118 || defined(__HUGS__)</em></font>
-<a name="(line15)"></a><font color=Blue>-- emulate older finite map interface using Data.Map, if it is available</font>
-<a name="(line16)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Data<font color=Cyan>.</font>Map <font color=Green><u>as</u></font> Map
-<a name="(line17)"></a><a name="FiniteMap"></a><font color=Green><u>type</u></font> FiniteMap a b <font color=Red>=</font> Map<font color=Cyan>.</font>Map a b
-<a name="(line18)"></a><a name="listToFM"></a>listToFM <font color=Red>::</font> Ord a <font color=Red>=&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> FiniteMap a b
-<a name="(line19)"></a>listToFM <font color=Red>=</font> Map<font color=Cyan>.</font>fromList
-<a name="(line20)"></a><a name="lookupFM"></a>lookupFM <font color=Red>::</font> Ord a <font color=Red>=&gt;</font> FiniteMap a b <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Maybe b
-<a name="(line21)"></a>lookupFM <font color=Red>=</font> flip Map<font color=Cyan>.</font>lookup
-<a name="(line22)"></a><font color=Magenta><em>#elif __GLASGOW_HASKELL__ &gt;= 504 || __NHC__ &gt; 114</em></font>
-<a name="(line23)"></a><font color=Blue>-- real finite map, if it is available</font>
-<a name="(line24)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>FiniteMap
-<a name="(line25)"></a><font color=Magenta><em>#else</em></font>
-<a name="(line26)"></a><a name="FiniteMap"></a><font color=Blue>-- otherwise, a very simple and inefficient implementation of a finite map</font>
-<a name="(line27)"></a><a name="FiniteMap"></a><font color=Green><u>type</u></font> FiniteMap a b <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line28)"></a>listToFM <font color=Red>::</font> Eq a <font color=Red>=&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> FiniteMap a b
-<a name="(line29)"></a>listToFM <font color=Red>=</font> id
-<a name="(line30)"></a>lookupFM <font color=Red>::</font> Eq a <font color=Red>=&gt;</font> FiniteMap a b <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Maybe b
-<a name="(line31)"></a>lookupFM fm k <font color=Red>=</font> lookup k fm
-<a name="(line32)"></a><font color=Magenta><em>#endif</em></font>
-<a name="(line33)"></a>
-<a name="(line34)"></a><a name="SimpleDTD"></a><font color=Blue>-- gather appropriate information out of the DTD</font>
-<a name="(line35)"></a><a name="SimpleDTD"></a><font color=Green><u>data</u></font> SimpleDTD <font color=Red>=</font> SimpleDTD
-<a name="(line36)"></a>    <font color=Cyan>{</font> elements   <font color=Red>::</font> FiniteMap Name ContentSpec	<font color=Blue>-- content model of elem</font>
-<a name="(line37)"></a>    <font color=Cyan>,</font> attributes <font color=Red>::</font> FiniteMap <font color=Cyan>(</font>Name<font color=Cyan>,</font>Name<font color=Cyan>)</font> AttType <font color=Blue>-- type of (elem,attr)</font>
-<a name="(line38)"></a>    <font color=Cyan>,</font> required   <font color=Red>::</font> FiniteMap Name <font color=Red>[</font>Name<font color=Red>]</font>	<font color=Blue>-- required attributes of elem</font>
-<a name="(line39)"></a>    <font color=Cyan>,</font> ids        <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font>Name<font color=Cyan>)</font><font color=Red>]</font>	<font color=Blue>-- all (element,attr) with ID type</font>
-<a name="(line40)"></a>    <font color=Cyan>,</font> idrefs     <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font>Name<font color=Cyan>)</font><font color=Red>]</font>	<font color=Blue>-- all (element,attr) with IDREF type</font>
-<a name="(line41)"></a>    <font color=Cyan>}</font>
-<a name="(line42)"></a>
-<a name="(line43)"></a><a name="simplifyDTD"></a>simplifyDTD <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> SimpleDTD
-<a name="(line44)"></a>simplifyDTD <font color=Cyan>(</font>DTD <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> decls<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line45)"></a>    SimpleDTD
-<a name="(line46)"></a>      <font color=Cyan>{</font> elements   <font color=Red>=</font> listToFM <font color=Red>[</font> <font color=Cyan>(</font>name<font color=Cyan>,</font>content<font color=Cyan>)</font>
-<a name="(line47)"></a>                              <font color=Red>|</font> Element <font color=Cyan>(</font>ElementDecl name content<font color=Cyan>)</font> <font color=Red>&lt;-</font> decls <font color=Red>]</font>
-<a name="(line48)"></a>      <font color=Cyan>,</font> attributes <font color=Red>=</font> listToFM <font color=Red>[</font> <font color=Cyan>(</font><font color=Cyan>(</font>elem<font color=Cyan>,</font>attr<font color=Cyan>)</font><font color=Cyan>,</font>typ<font color=Cyan>)</font>
-<a name="(line49)"></a>                              <font color=Red>|</font> AttList <font color=Cyan>(</font>AttListDecl elem attdefs<font color=Cyan>)</font> <font color=Red>&lt;-</font> decls
-<a name="(line50)"></a>                              <font color=Cyan>,</font> AttDef attr typ <font color=Green><u>_</u></font> <font color=Red>&lt;-</font> attdefs <font color=Red>]</font>
-<a name="(line51)"></a>      <font color=Cyan>,</font> required   <font color=Red>=</font> listToFM <font color=Red>[</font> <font color=Cyan>(</font>elem<font color=Cyan>,</font> <font color=Red>[</font> attr
-<a name="(line52)"></a>                                       <font color=Red>|</font> AttDef attr <font color=Green><u>_</u></font> REQUIRED <font color=Red>&lt;-</font> attdefs <font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line53)"></a>                              <font color=Red>|</font> AttList <font color=Cyan>(</font>AttListDecl elem attdefs<font color=Cyan>)</font> <font color=Red>&lt;-</font> decls <font color=Red>]</font>
-<a name="(line54)"></a>      <font color=Cyan>,</font> ids        <font color=Red>=</font> <font color=Red>[</font> <font color=Cyan>(</font>elem<font color=Cyan>,</font>attr<font color=Cyan>)</font>
-<a name="(line55)"></a>                     <font color=Red>|</font> Element <font color=Cyan>(</font>ElementDecl elem <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> decls
-<a name="(line56)"></a>                     <font color=Cyan>,</font> AttList <font color=Cyan>(</font>AttListDecl name attdefs<font color=Cyan>)</font> <font color=Red>&lt;-</font> decls
-<a name="(line57)"></a>                     <font color=Cyan>,</font> elem <font color=Cyan>==</font> name
-<a name="(line58)"></a>                     <font color=Cyan>,</font> AttDef attr <font color=Cyan>(</font>TokenizedType ID<font color=Cyan>)</font> <font color=Green><u>_</u></font> <font color=Red>&lt;-</font> attdefs <font color=Red>]</font>
-<a name="(line59)"></a>      <font color=Cyan>,</font> idrefs     <font color=Red>=</font> []	<font color=Blue>-- not implemented</font>
-<a name="(line60)"></a>      <font color=Cyan>}</font>
-<a name="(line61)"></a>
-<a name="(line62)"></a><a name="gives"></a><font color=Blue>-- simple auxiliary to avoid lots of if-then-else with empty else clauses.</font>
-<a name="(line63)"></a>gives <font color=Red>::</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font>
-<a name="(line64)"></a>True <font color=Cyan>`gives`</font> x <font color=Red>=</font> <font color=Red>[</font>x<font color=Red>]</font>
-<a name="(line65)"></a>False <font color=Cyan>`gives`</font> <font color=Green><u>_</u></font> <font color=Red>=</font> []
-<a name="(line66)"></a>
-<a name="(line67)"></a><a name="validate"></a><font color=Blue>-- | 'validate' takes a DTD and a tagged element, and returns a list of</font>
-<a name="(line68)"></a><font color=Blue>--   errors in the document with respect to its DTD.</font>
-<a name="(line69)"></a><font color=Blue>--</font>
-<a name="(line70)"></a><font color=Blue>--   If you have several documents to validate against a single DTD,</font>
-<a name="(line71)"></a><font color=Blue>--   then you will gain efficiency by freezing-in the DTD through partial</font>
-<a name="(line72)"></a><font color=Blue>--   application, e.g. @checkMyDTD = validate myDTD@.</font>
-<a name="(line73)"></a>validate <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font>
-<a name="(line74)"></a>validate dtd' elem <font color=Red>=</font> root dtd' elem <font color=Cyan>++</font> partialValidate dtd' elem
-<a name="(line75)"></a>  <font color=Green><u>where</u></font>
-<a name="(line76)"></a>    root <font color=Cyan>(</font>DTD name <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>Elem name' <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line77)"></a>        <font color=Cyan>(</font>name<font color=Cyan>/=</font>name'<font color=Cyan>)</font> <font color=Cyan>`gives`</font> <font color=Cyan>(</font><font color=Magenta>"Document type should be &lt;"</font><font color=Cyan>++</font>name
-<a name="(line78)"></a>                               <font color=Cyan>++</font><font color=Magenta>"&gt; but appears to be &lt;"</font><font color=Cyan>++</font>name'<font color=Cyan>++</font><font color=Magenta>"&gt;."</font><font color=Cyan>)</font>
-<a name="(line79)"></a>
-<a name="(line80)"></a><a name="partialValidate"></a><font color=Blue>-- | 'partialValidate' is like validate, except that it does not check that</font>
-<a name="(line81)"></a><font color=Blue>--   the element type matches that of the DTD's root element.</font>
-<a name="(line82)"></a>partialValidate <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font>
-<a name="(line83)"></a>partialValidate dtd' elem <font color=Red>=</font> valid elem <font color=Cyan>++</font> checkIDs elem
-<a name="(line84)"></a>  <font color=Green><u>where</u></font>
-<a name="(line85)"></a>    dtd <font color=Red>=</font> simplifyDTD dtd'
-<a name="(line86)"></a>
-<a name="(line87)"></a>    valid <font color=Cyan>(</font>Elem name attrs contents<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line88)"></a>        <font color=Blue>-- is the element defined in the DTD?</font>
-<a name="(line89)"></a>        <font color=Green><u>let</u></font> spec <font color=Red>=</font> lookupFM <font color=Cyan>(</font>elements dtd<font color=Cyan>)</font> name <font color=Green><u>in</u></font> 
-<a name="(line90)"></a>        <font color=Cyan>(</font>isNothing spec<font color=Cyan>)</font> <font color=Cyan>`gives`</font> <font color=Cyan>(</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>name<font color=Cyan>++</font><font color=Magenta>"&gt; not known."</font><font color=Cyan>)</font>
-<a name="(line91)"></a>        <font color=Blue>-- is each attribute mentioned only once?</font>
-<a name="(line92)"></a>        <font color=Cyan>++</font> <font color=Cyan>(</font><font color=Green><u>let</u></font> dups <font color=Red>=</font> duplicates <font color=Cyan>(</font>map fst attrs<font color=Cyan>)</font> <font color=Green><u>in</u></font>
-<a name="(line93)"></a>            not <font color=Cyan>(</font>null dups<font color=Cyan>)</font> <font color=Cyan>`gives`</font>
-<a name="(line94)"></a>               <font color=Cyan>(</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>name<font color=Cyan>++</font><font color=Magenta>"&gt; has duplicate attributes: "</font>
-<a name="(line95)"></a>                <font color=Cyan>++</font>concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> dups<font color=Cyan>)</font><font color=Cyan>++</font><font color=Magenta>"."</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line96)"></a>        <font color=Blue>-- does each attribute belong to this element?  value is in range?</font>
-<a name="(line97)"></a>        <font color=Cyan>++</font> concatMap <font color=Cyan>(</font>checkAttr name<font color=Cyan>)</font> attrs
-<a name="(line98)"></a>        <font color=Blue>-- are all required attributes present?</font>
-<a name="(line99)"></a>        <font color=Cyan>++</font> concatMap <font color=Cyan>(</font>checkRequired name attrs<font color=Cyan>)</font>
-<a name="(line100)"></a>                     <font color=Cyan>(</font>fromMaybe [] <font color=Cyan>(</font>lookupFM <font color=Cyan>(</font>required dtd<font color=Cyan>)</font> name<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line101)"></a>        <font color=Blue>-- are its children in a permissible sequence?</font>
-<a name="(line102)"></a>        <font color=Cyan>++</font> checkContentSpec name <font color=Cyan>(</font>fromMaybe ANY spec<font color=Cyan>)</font> contents
-<a name="(line103)"></a>        <font color=Blue>-- now recursively check the element children</font>
-<a name="(line104)"></a>        <font color=Cyan>++</font> concatMap valid <font color=Red>[</font> elem <font color=Red>|</font> CElem elem <font color=Green><u>_</u></font> <font color=Red>&lt;-</font> contents <font color=Red>]</font>
-<a name="(line105)"></a>
-<a name="(line106)"></a>    checkAttr elem <font color=Cyan>(</font>attr<font color=Cyan>,</font> val<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line107)"></a>        <font color=Green><u>let</u></font> typ <font color=Red>=</font> lookupFM <font color=Cyan>(</font>attributes dtd<font color=Cyan>)</font> <font color=Cyan>(</font>elem<font color=Cyan>,</font>attr<font color=Cyan>)</font>
-<a name="(line108)"></a>            attval <font color=Red>=</font> attr2str val <font color=Green><u>in</u></font>
-<a name="(line109)"></a>        <font color=Green><u>if</u></font> isNothing typ <font color=Green><u>then</u></font> <font color=Red>[</font><font color=Magenta>"Attribute \""</font><font color=Cyan>++</font>attr
-<a name="(line110)"></a>                               <font color=Cyan>++</font><font color=Magenta>"\" not known for element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt;."</font><font color=Red>]</font>
-<a name="(line111)"></a>        <font color=Green><u>else</u></font>
-<a name="(line112)"></a>          <font color=Green><u>case</u></font> fromJust typ <font color=Green><u>of</u></font>
-<a name="(line113)"></a>            EnumeratedType e <font color=Red>-&gt;</font>
-<a name="(line114)"></a>              <font color=Green><u>case</u></font> e <font color=Green><u>of</u></font>
-<a name="(line115)"></a>                Enumeration es <font color=Red>-&gt;</font>
-<a name="(line116)"></a>                    <font color=Cyan>(</font>not <font color=Cyan>(</font>attval <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> es<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`gives`</font>
-<a name="(line117)"></a>                          <font color=Cyan>(</font><font color=Magenta>"Value \""</font><font color=Cyan>++</font>attval<font color=Cyan>++</font><font color=Magenta>"\" of attribute \""</font>
-<a name="(line118)"></a>                           <font color=Cyan>++</font>attr<font color=Cyan>++</font><font color=Magenta>"\" in element &lt;"</font><font color=Cyan>++</font>elem
-<a name="(line119)"></a>                           <font color=Cyan>++</font><font color=Magenta>"&gt; is not in the required enumeration range: "</font>
-<a name="(line120)"></a>                           <font color=Cyan>++</font>unwords es<font color=Cyan>)</font>
-<a name="(line121)"></a>                <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> []
-<a name="(line122)"></a>            <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> []
-<a name="(line123)"></a>
-<a name="(line124)"></a>    checkRequired elem attrs req <font color=Red>=</font>
-<a name="(line125)"></a>        <font color=Cyan>(</font>not <font color=Cyan>(</font>req <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> map fst attrs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`gives`</font>
-<a name="(line126)"></a>            <font color=Cyan>(</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt; requires the attribute \""</font><font color=Cyan>++</font>req
-<a name="(line127)"></a>             <font color=Cyan>++</font><font color=Magenta>"\" but it is missing."</font><font color=Cyan>)</font>
-<a name="(line128)"></a>
-<a name="(line129)"></a>    checkContentSpec elem ANY <font color=Green><u>_</u></font> <font color=Red>=</font> []
-<a name="(line130)"></a>    checkContentSpec elem EMPTY [] <font color=Red>=</font> []
-<a name="(line131)"></a>    checkContentSpec elem EMPTY <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line132)"></a>        <font color=Red>[</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt; is not empty but should be."</font><font color=Red>]</font>
-<a name="(line133)"></a>    checkContentSpec elem <font color=Cyan>(</font>Mixed PCDATA<font color=Cyan>)</font> cs <font color=Red>=</font> concatMap <font color=Cyan>(</font>checkMixed elem []<font color=Cyan>)</font> cs
-<a name="(line134)"></a>    checkContentSpec elem <font color=Cyan>(</font>Mixed <font color=Cyan>(</font>PCDATAplus names<font color=Cyan>)</font><font color=Cyan>)</font> cs <font color=Red>=</font>
-<a name="(line135)"></a>        concatMap <font color=Cyan>(</font>checkMixed elem names<font color=Cyan>)</font> cs
-<a name="(line136)"></a>    checkContentSpec elem <font color=Cyan>(</font>ContentSpec cp<font color=Cyan>)</font> cs <font color=Red>=</font> excludeText elem cs <font color=Cyan>++</font>
-<a name="(line137)"></a>        <font color=Cyan>(</font><font color=Green><u>let</u></font> <font color=Cyan>(</font>errs<font color=Cyan>,</font>rest<font color=Cyan>)</font> <font color=Red>=</font> checkCP elem cp <font color=Cyan>(</font>flatten cs<font color=Cyan>)</font> <font color=Green><u>in</u></font>
-<a name="(line138)"></a>         <font color=Green><u>case</u></font> rest <font color=Green><u>of</u></font> [] <font color=Red>-&gt;</font> errs
-<a name="(line139)"></a>                      <font color=Green><u>_</u></font>  <font color=Red>-&gt;</font> errs<font color=Cyan>++</font><font color=Red>[</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt; contains extra "</font>
-<a name="(line140)"></a>                                  <font color=Cyan>++</font><font color=Magenta>"elements beyond its content spec."</font><font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line141)"></a>
-<a name="(line142)"></a>    checkMixed elem permitted <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem name <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font>
-<a name="(line143)"></a>        <font color=Red>|</font> not <font color=Cyan>(</font>name <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> permitted<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line144)"></a>            <font color=Red>[</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt; contains an element &lt;"</font><font color=Cyan>++</font>name
-<a name="(line145)"></a>             <font color=Cyan>++</font><font color=Magenta>"&gt; but should not."</font><font color=Red>]</font>
-<a name="(line146)"></a>    checkMixed elem permitted <font color=Green><u>_</u></font> <font color=Red>=</font> []
-<a name="(line147)"></a>
-<a name="(line148)"></a>    flatten <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem name <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><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> name<font color=Red><b>:</b></font> flatten cs
-<a name="(line149)"></a>    flatten <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> flatten cs
-<a name="(line150)"></a>    flatten []                            <font color=Red>=</font> []
-<a name="(line151)"></a>
-<a name="(line152)"></a>    excludeText elem <font color=Cyan>(</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font> excludeText elem cs
-<a name="(line153)"></a>    excludeText elem <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font> excludeText elem cs
-<a name="(line154)"></a>    excludeText elem <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> <font color=Red>|</font> all isSpace s <font color=Red>=</font> excludeText elem cs
-<a name="(line155)"></a>    excludeText elem <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>
-<a name="(line156)"></a>        <font color=Red>[</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt; contains text/references but should not."</font><font color=Red>]</font>
-<a name="(line157)"></a>    excludeText elem [] <font color=Red>=</font> []
-<a name="(line158)"></a>
-<a name="(line159)"></a>    <font color=Blue>-- This is a little parser really.  Returns any errors, plus the remainder</font>
-<a name="(line160)"></a>    <font color=Blue>-- of the input string.</font>
-<a name="(line161)"></a>    checkCP <font color=Red>::</font> Name <font color=Red>-&gt;</font> CP <font color=Red>-&gt;</font> <font color=Red>[</font>Name<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>String<font color=Red>]</font><font color=Cyan>,</font><font color=Red>[</font>Name<font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line162)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n None<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> []<font color=Cyan>)</font>
-<a name="(line163)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n None<font color=Cyan>)</font> <font color=Cyan>(</font>n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
-<a name="(line164)"></a>        <font color=Red>|</font> n<font color=Cyan>==</font>n'     <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> ns<font color=Cyan>)</font>
-<a name="(line165)"></a>        <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
-<a name="(line166)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n Query<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>[]<font color=Cyan>)</font>
-<a name="(line167)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n Query<font color=Cyan>)</font> <font color=Cyan>(</font>n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
-<a name="(line168)"></a>        <font color=Red>|</font> n<font color=Cyan>==</font>n'     <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> ns<font color=Cyan>)</font>
-<a name="(line169)"></a>        <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
-<a name="(line170)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>[]<font color=Cyan>)</font>
-<a name="(line171)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font> <font color=Cyan>(</font>n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
-<a name="(line172)"></a>        <font color=Red>|</font> n<font color=Cyan>==</font>n'     <font color=Red>=</font> checkCP elem <font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font> ns
-<a name="(line173)"></a>        <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
-<a name="(line174)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n Plus<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> []<font color=Cyan>)</font>
-<a name="(line175)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n Plus<font color=Cyan>)</font> <font color=Cyan>(</font>n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
-<a name="(line176)"></a>        <font color=Red>|</font> n<font color=Cyan>==</font>n'     <font color=Red>=</font> checkCP elem <font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font> ns
-<a name="(line177)"></a>        <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
-<a name="(line178)"></a> <font color=Blue>-- omit this clause, to permit (a?|b?) as a valid but empty choice</font>
-<a name="(line179)"></a> <font color=Blue>-- checkCP elem cp@(Choice cps None) [] = (cpError elem cp, [])</font>
-<a name="(line180)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Choice cps None<font color=Cyan>)</font> ns <font color=Red>=</font>
-<a name="(line181)"></a>        <font color=Green><u>let</u></font> next <font color=Red>=</font> choice elem ns cps <font color=Green><u>in</u></font>
-<a name="(line182)"></a>        <font color=Green><u>if</u></font> null next <font color=Green><u>then</u></font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> ns<font color=Cyan>)</font>
-<a name="(line183)"></a>        <font color=Green><u>else</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> head next<font color=Cyan>)</font>	<font color=Blue>-- choose the first alternative with no errors</font>
-<a name="(line184)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Choice cps Query<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>[]<font color=Cyan>)</font>
-<a name="(line185)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Choice cps Query<font color=Cyan>)</font> ns <font color=Red>=</font>
-<a name="(line186)"></a>        <font color=Green><u>let</u></font> next <font color=Red>=</font> choice elem ns cps <font color=Green><u>in</u></font>
-<a name="(line187)"></a>        <font color=Green><u>if</u></font> null next <font color=Green><u>then</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>ns<font color=Cyan>)</font>
-<a name="(line188)"></a>        <font color=Green><u>else</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> head next<font color=Cyan>)</font>
-<a name="(line189)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>[]<font color=Cyan>)</font>
-<a name="(line190)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font> ns <font color=Red>=</font>
-<a name="(line191)"></a>        <font color=Green><u>let</u></font> next <font color=Red>=</font> choice elem ns cps <font color=Green><u>in</u></font>
-<a name="(line192)"></a>        <font color=Green><u>if</u></font> null next <font color=Green><u>then</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>ns<font color=Cyan>)</font>
-<a name="(line193)"></a>        <font color=Green><u>else</u></font> checkCP elem <font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font> <font color=Cyan>(</font>head next<font color=Cyan>)</font>
-<a name="(line194)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Choice cps Plus<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> []<font color=Cyan>)</font>
-<a name="(line195)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Choice cps Plus<font color=Cyan>)</font> ns <font color=Red>=</font>
-<a name="(line196)"></a>        <font color=Green><u>let</u></font> next <font color=Red>=</font> choice elem ns cps <font color=Green><u>in</u></font>
-<a name="(line197)"></a>        <font color=Green><u>if</u></font> null next <font color=Green><u>then</u></font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> ns<font color=Cyan>)</font>
-<a name="(line198)"></a>        <font color=Green><u>else</u></font> checkCP elem <font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font> <font color=Cyan>(</font>head next<font color=Cyan>)</font>
-<a name="(line199)"></a> <font color=Blue>-- omit this clause, to permit (a?,b?) as a valid but empty sequence</font>
-<a name="(line200)"></a> <font color=Blue>-- checkCP elem cp@(Seq cps None) [] = (cpError elem cp, [])</font>
-<a name="(line201)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Seq cps None<font color=Cyan>)</font> ns <font color=Red>=</font>
-<a name="(line202)"></a>        <font color=Green><u>let</u></font> <font color=Cyan>(</font>errs<font color=Cyan>,</font>next<font color=Cyan>)</font> <font color=Red>=</font> sequence elem ns cps <font color=Green><u>in</u></font>
-<a name="(line203)"></a>        <font color=Green><u>if</u></font> null errs <font color=Green><u>then</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>next<font color=Cyan>)</font>
-<a name="(line204)"></a>        <font color=Green><u>else</u></font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>++</font>errs<font color=Cyan>,</font> ns<font color=Cyan>)</font>
-<a name="(line205)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Seq cps Query<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>[]<font color=Cyan>)</font>
-<a name="(line206)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Seq cps Query<font color=Cyan>)</font> ns <font color=Red>=</font>
-<a name="(line207)"></a>        <font color=Green><u>let</u></font> <font color=Cyan>(</font>errs<font color=Cyan>,</font>next<font color=Cyan>)</font> <font color=Red>=</font> sequence elem ns cps <font color=Green><u>in</u></font>
-<a name="(line208)"></a>        <font color=Green><u>if</u></font> null errs <font color=Green><u>then</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>next<font color=Cyan>)</font>
-<a name="(line209)"></a>        <font color=Green><u>else</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> ns<font color=Cyan>)</font>
-<a name="(line210)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>[]<font color=Cyan>)</font>
-<a name="(line211)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font> ns <font color=Red>=</font>
-<a name="(line212)"></a>        <font color=Green><u>let</u></font> <font color=Cyan>(</font>errs<font color=Cyan>,</font>next<font color=Cyan>)</font> <font color=Red>=</font> sequence elem ns cps <font color=Green><u>in</u></font>
-<a name="(line213)"></a>        <font color=Green><u>if</u></font> null errs <font color=Green><u>then</u></font> checkCP elem <font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font> next
-<a name="(line214)"></a>        <font color=Green><u>else</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> ns<font color=Cyan>)</font>
-<a name="(line215)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Seq cps Plus<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> []<font color=Cyan>)</font>
-<a name="(line216)"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Seq cps Plus<font color=Cyan>)</font> ns <font color=Red>=</font>
-<a name="(line217)"></a>        <font color=Green><u>let</u></font> <font color=Cyan>(</font>errs<font color=Cyan>,</font>next<font color=Cyan>)</font> <font color=Red>=</font> sequence elem ns cps <font color=Green><u>in</u></font>
-<a name="(line218)"></a>        <font color=Green><u>if</u></font> null errs <font color=Green><u>then</u></font> checkCP elem <font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font> next
-<a name="(line219)"></a>        <font color=Green><u>else</u></font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>++</font>errs<font color=Cyan>,</font> ns<font color=Cyan>)</font>
-<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=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="(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="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>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Validate.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | Validate a document against a dtd.</font>
+<a name="line-2"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Validate
+<a name="line-3"></a>  <font color=Cyan>(</font> validate
+<a name="line-4"></a>  <font color=Cyan>,</font> partialValidate
+<a name="line-5"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-6"></a>
+<a name="line-7"></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="line-8"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators <font color=Cyan>(</font>multi<font color=Cyan>,</font>tag<font color=Cyan>,</font>iffind<font color=Cyan>,</font>literal<font color=Cyan>,</font>none<font color=Cyan>,</font>o<font color=Cyan>)</font>
+<a name="line-9"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent <font color=Cyan>(</font>attr2str<font color=Cyan>)</font>
+<a name="line-10"></a><font color=Green><u>import</u></font> Maybe <font color=Cyan>(</font>fromMaybe<font color=Cyan>,</font>isNothing<font color=Cyan>,</font>fromJust<font color=Cyan>)</font>
+<a name="line-11"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>intersperse<font color=Cyan>,</font>nub<font color=Cyan>,</font><font color=Cyan>(</font><font color=Cyan>\\</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-12"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>isSpace<font color=Cyan>)</font>
+<a name="line-13"></a>
+<a name="line-14"></a><font color=Magenta><em>#if __GLASGOW_HASKELL__ &gt;= 604 || __NHC__ &gt;= 118 || defined(__HUGS__)</em></font>
+<a name="line-15"></a><font color=Blue>-- emulate older finite map interface using Data.Map, if it is available</font>
+<a name="line-16"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Data<font color=Cyan>.</font>Map <font color=Green><u>as</u></font> Map
+<a name="line-17"></a><a name="FiniteMap"></a><font color=Green><u>type</u></font> FiniteMap a b <font color=Red>=</font> Map<font color=Cyan>.</font>Map a b
+<a name="line-18"></a><a name="listToFM"></a><font color=Blue>listToFM</font> <font color=Red>::</font> Ord a <font color=Red>=&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> FiniteMap a b
+<a name="line-19"></a><font color=Blue>listToFM</font> <font color=Red>=</font> Map<font color=Cyan>.</font>fromList
+<a name="line-20"></a><a name="lookupFM"></a><font color=Blue>lookupFM</font> <font color=Red>::</font> Ord a <font color=Red>=&gt;</font> FiniteMap a b <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Maybe b
+<a name="line-21"></a><font color=Blue>lookupFM</font> <font color=Red>=</font> flip Map<font color=Cyan>.</font>lookup
+<a name="line-22"></a><font color=Magenta><em>#elif __GLASGOW_HASKELL__ &gt;= 504 || __NHC__ &gt; 114</em></font>
+<a name="line-23"></a><font color=Blue>-- real finite map, if it is available</font>
+<a name="line-24"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>FiniteMap
+<a name="line-25"></a><font color=Magenta><em>#else</em></font>
+<a name="line-26"></a><a name="FiniteMap"></a><font color=Blue>-- otherwise, a very simple and inefficient implementation of a finite map</font>
+<a name="line-27"></a><a name="FiniteMap"></a><font color=Green><u>type</u></font> FiniteMap a b <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-28"></a><font color=Blue>listToFM</font> <font color=Red>::</font> Eq a <font color=Red>=&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> FiniteMap a b
+<a name="line-29"></a><font color=Blue>listToFM</font> <font color=Red>=</font> id
+<a name="line-30"></a><font color=Blue>lookupFM</font> <font color=Red>::</font> Eq a <font color=Red>=&gt;</font> FiniteMap a b <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Maybe b
+<a name="line-31"></a><font color=Blue>lookupFM</font> fm k <font color=Red>=</font> lookup k fm
+<a name="line-32"></a><font color=Magenta><em>#endif</em></font>
+<a name="line-33"></a>
+<a name="line-34"></a><a name="SimpleDTD"></a><font color=Blue>-- gather appropriate information out of the DTD</font>
+<a name="line-35"></a><a name="SimpleDTD"></a><font color=Green><u>data</u></font> SimpleDTD <font color=Red>=</font> SimpleDTD
+<a name="line-36"></a>    <font color=Cyan>{</font> elements   <font color=Red>::</font> FiniteMap Name ContentSpec	<font color=Blue>-- content model of elem</font>
+<a name="line-37"></a>    <font color=Cyan>,</font> attributes <font color=Red>::</font> FiniteMap <font color=Cyan>(</font>Name<font color=Cyan>,</font>Name<font color=Cyan>)</font> AttType <font color=Blue>-- type of (elem,attr)</font>
+<a name="line-38"></a>    <font color=Cyan>,</font> required   <font color=Red>::</font> FiniteMap Name <font color=Red>[</font>Name<font color=Red>]</font>	<font color=Blue>-- required attributes of elem</font>
+<a name="line-39"></a>    <font color=Cyan>,</font> ids        <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font>Name<font color=Cyan>)</font><font color=Red>]</font>	<font color=Blue>-- all (element,attr) with ID type</font>
+<a name="line-40"></a>    <font color=Cyan>,</font> idrefs     <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font>Name<font color=Cyan>)</font><font color=Red>]</font>	<font color=Blue>-- all (element,attr) with IDREF type</font>
+<a name="line-41"></a>    <font color=Cyan>}</font>
+<a name="line-42"></a>
+<a name="line-43"></a><a name="simplifyDTD"></a><font color=Blue>simplifyDTD</font> <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> SimpleDTD
+<a name="line-44"></a><font color=Blue>simplifyDTD</font> <font color=Cyan>(</font>DTD <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> decls<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-45"></a>    SimpleDTD
+<a name="line-46"></a>      <font color=Cyan>{</font> elements   <font color=Red>=</font> listToFM <font color=Red>[</font> <font color=Cyan>(</font>name<font color=Cyan>,</font>content<font color=Cyan>)</font>
+<a name="line-47"></a>                              <font color=Red>|</font> Element <font color=Cyan>(</font>ElementDecl name content<font color=Cyan>)</font> <font color=Red>&lt;-</font> decls <font color=Red>]</font>
+<a name="line-48"></a>      <font color=Cyan>,</font> attributes <font color=Red>=</font> listToFM <font color=Red>[</font> <font color=Cyan>(</font><font color=Cyan>(</font>elem<font color=Cyan>,</font>attr<font color=Cyan>)</font><font color=Cyan>,</font>typ<font color=Cyan>)</font>
+<a name="line-49"></a>                              <font color=Red>|</font> AttList <font color=Cyan>(</font>AttListDecl elem attdefs<font color=Cyan>)</font> <font color=Red>&lt;-</font> decls
+<a name="line-50"></a>                              <font color=Cyan>,</font> AttDef attr typ <font color=Green><u>_</u></font> <font color=Red>&lt;-</font> attdefs <font color=Red>]</font>
+<a name="line-51"></a>      <font color=Cyan>,</font> required   <font color=Red>=</font> listToFM <font color=Red>[</font> <font color=Cyan>(</font>elem<font color=Cyan>,</font> <font color=Red>[</font> attr
+<a name="line-52"></a>                                       <font color=Red>|</font> AttDef attr <font color=Green><u>_</u></font> REQUIRED <font color=Red>&lt;-</font> attdefs <font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-53"></a>                              <font color=Red>|</font> AttList <font color=Cyan>(</font>AttListDecl elem attdefs<font color=Cyan>)</font> <font color=Red>&lt;-</font> decls <font color=Red>]</font>
+<a name="line-54"></a>      <font color=Cyan>,</font> ids        <font color=Red>=</font> <font color=Red>[</font> <font color=Cyan>(</font>elem<font color=Cyan>,</font>attr<font color=Cyan>)</font>
+<a name="line-55"></a>                     <font color=Red>|</font> Element <font color=Cyan>(</font>ElementDecl elem <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>&lt;-</font> decls
+<a name="line-56"></a>                     <font color=Cyan>,</font> AttList <font color=Cyan>(</font>AttListDecl name attdefs<font color=Cyan>)</font> <font color=Red>&lt;-</font> decls
+<a name="line-57"></a>                     <font color=Cyan>,</font> elem <font color=Cyan>==</font> name
+<a name="line-58"></a>                     <font color=Cyan>,</font> AttDef attr <font color=Cyan>(</font>TokenizedType ID<font color=Cyan>)</font> <font color=Green><u>_</u></font> <font color=Red>&lt;-</font> attdefs <font color=Red>]</font>
+<a name="line-59"></a>      <font color=Cyan>,</font> idrefs     <font color=Red>=</font> []	<font color=Blue>-- not implemented</font>
+<a name="line-60"></a>      <font color=Cyan>}</font>
+<a name="line-61"></a>
+<a name="line-62"></a><a name="gives"></a><font color=Blue>-- simple auxiliary to avoid lots of if-then-else with empty else clauses.</font>
+<a name="line-63"></a><font color=Blue>gives</font> <font color=Red>::</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font>
+<a name="line-64"></a>True <font color=Cyan>`gives`</font> x <font color=Red>=</font> <font color=Red>[</font>x<font color=Red>]</font>
+<a name="line-65"></a>False <font color=Cyan>`gives`</font> <font color=Green><u>_</u></font> <font color=Red>=</font> []
+<a name="line-66"></a>
+<a name="line-67"></a><a name="validate"></a><font color=Blue>-- | 'validate' takes a DTD and a tagged element, and returns a list of</font>
+<a name="line-68"></a><font color=Blue>--   errors in the document with respect to its DTD.</font>
+<a name="line-69"></a><font color=Blue>--</font>
+<a name="line-70"></a><font color=Blue>--   If you have several documents to validate against a single DTD,</font>
+<a name="line-71"></a><font color=Blue>--   then you will gain efficiency by freezing-in the DTD through partial</font>
+<a name="line-72"></a><font color=Blue>--   application, e.g. @checkMyDTD = validate myDTD@.</font>
+<a name="line-73"></a><font color=Blue>validate</font> <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font>
+<a name="line-74"></a><font color=Blue>validate</font> dtd' elem <font color=Red>=</font> root dtd' elem <font color=Cyan>++</font> partialValidate dtd' elem
+<a name="line-75"></a>  <font color=Green><u>where</u></font>
+<a name="line-76"></a>    root <font color=Cyan>(</font>DTD name <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>Elem name' <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-77"></a>        <font color=Cyan>(</font>name<font color=Cyan>/=</font>name'<font color=Cyan>)</font> <font color=Cyan>`gives`</font> <font color=Cyan>(</font><font color=Magenta>"Document type should be &lt;"</font><font color=Cyan>++</font>name
+<a name="line-78"></a>                               <font color=Cyan>++</font><font color=Magenta>"&gt; but appears to be &lt;"</font><font color=Cyan>++</font>name'<font color=Cyan>++</font><font color=Magenta>"&gt;."</font><font color=Cyan>)</font>
+<a name="line-79"></a>
+<a name="line-80"></a><a name="partialValidate"></a><font color=Blue>-- | 'partialValidate' is like validate, except that it does not check that</font>
+<a name="line-81"></a><font color=Blue>--   the element type matches that of the DTD's root element.</font>
+<a name="line-82"></a><font color=Blue>partialValidate</font> <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font>
+<a name="line-83"></a><font color=Blue>partialValidate</font> dtd' elem <font color=Red>=</font> valid elem <font color=Cyan>++</font> checkIDs elem
+<a name="line-84"></a>  <font color=Green><u>where</u></font>
+<a name="line-85"></a>    dtd <font color=Red>=</font> simplifyDTD dtd'
+<a name="line-86"></a>
+<a name="line-87"></a>    valid <font color=Cyan>(</font>Elem name attrs contents<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-88"></a>        <font color=Blue>-- is the element defined in the DTD?</font>
+<a name="line-89"></a>        <font color=Green><u>let</u></font> spec <font color=Red>=</font> lookupFM <font color=Cyan>(</font>elements dtd<font color=Cyan>)</font> name <font color=Green><u>in</u></font> 
+<a name="line-90"></a>        <font color=Cyan>(</font>isNothing spec<font color=Cyan>)</font> <font color=Cyan>`gives`</font> <font color=Cyan>(</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>name<font color=Cyan>++</font><font color=Magenta>"&gt; not known."</font><font color=Cyan>)</font>
+<a name="line-91"></a>        <font color=Blue>-- is each attribute mentioned only once?</font>
+<a name="line-92"></a>        <font color=Cyan>++</font> <font color=Cyan>(</font><font color=Green><u>let</u></font> dups <font color=Red>=</font> duplicates <font color=Cyan>(</font>map fst attrs<font color=Cyan>)</font> <font color=Green><u>in</u></font>
+<a name="line-93"></a>            not <font color=Cyan>(</font>null dups<font color=Cyan>)</font> <font color=Cyan>`gives`</font>
+<a name="line-94"></a>               <font color=Cyan>(</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>name<font color=Cyan>++</font><font color=Magenta>"&gt; has duplicate attributes: "</font>
+<a name="line-95"></a>                <font color=Cyan>++</font>concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> dups<font color=Cyan>)</font><font color=Cyan>++</font><font color=Magenta>"."</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-96"></a>        <font color=Blue>-- does each attribute belong to this element?  value is in range?</font>
+<a name="line-97"></a>        <font color=Cyan>++</font> concatMap <font color=Cyan>(</font>checkAttr name<font color=Cyan>)</font> attrs
+<a name="line-98"></a>        <font color=Blue>-- are all required attributes present?</font>
+<a name="line-99"></a>        <font color=Cyan>++</font> concatMap <font color=Cyan>(</font>checkRequired name attrs<font color=Cyan>)</font>
+<a name="line-100"></a>                     <font color=Cyan>(</font>fromMaybe [] <font color=Cyan>(</font>lookupFM <font color=Cyan>(</font>required dtd<font color=Cyan>)</font> name<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-101"></a>        <font color=Blue>-- are its children in a permissible sequence?</font>
+<a name="line-102"></a>        <font color=Cyan>++</font> checkContentSpec name <font color=Cyan>(</font>fromMaybe ANY spec<font color=Cyan>)</font> contents
+<a name="line-103"></a>        <font color=Blue>-- now recursively check the element children</font>
+<a name="line-104"></a>        <font color=Cyan>++</font> concatMap valid <font color=Red>[</font> elem <font color=Red>|</font> CElem elem <font color=Green><u>_</u></font> <font color=Red>&lt;-</font> contents <font color=Red>]</font>
+<a name="line-105"></a>
+<a name="line-106"></a>    checkAttr elem <font color=Cyan>(</font>attr<font color=Cyan>,</font> val<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-107"></a>        <font color=Green><u>let</u></font> typ <font color=Red>=</font> lookupFM <font color=Cyan>(</font>attributes dtd<font color=Cyan>)</font> <font color=Cyan>(</font>elem<font color=Cyan>,</font>attr<font color=Cyan>)</font>
+<a name="line-108"></a>            attval <font color=Red>=</font> attr2str val <font color=Green><u>in</u></font>
+<a name="line-109"></a>        <font color=Green><u>if</u></font> isNothing typ <font color=Green><u>then</u></font> <font color=Red>[</font><font color=Magenta>"Attribute \""</font><font color=Cyan>++</font>attr
+<a name="line-110"></a>                               <font color=Cyan>++</font><font color=Magenta>"\" not known for element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt;."</font><font color=Red>]</font>
+<a name="line-111"></a>        <font color=Green><u>else</u></font>
+<a name="line-112"></a>          <font color=Green><u>case</u></font> fromJust typ <font color=Green><u>of</u></font>
+<a name="line-113"></a>            EnumeratedType e <font color=Red>-&gt;</font>
+<a name="line-114"></a>              <font color=Green><u>case</u></font> e <font color=Green><u>of</u></font>
+<a name="line-115"></a>                Enumeration es <font color=Red>-&gt;</font>
+<a name="line-116"></a>                    <font color=Cyan>(</font>not <font color=Cyan>(</font>attval <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> es<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`gives`</font>
+<a name="line-117"></a>                          <font color=Cyan>(</font><font color=Magenta>"Value \""</font><font color=Cyan>++</font>attval<font color=Cyan>++</font><font color=Magenta>"\" of attribute \""</font>
+<a name="line-118"></a>                           <font color=Cyan>++</font>attr<font color=Cyan>++</font><font color=Magenta>"\" in element &lt;"</font><font color=Cyan>++</font>elem
+<a name="line-119"></a>                           <font color=Cyan>++</font><font color=Magenta>"&gt; is not in the required enumeration range: "</font>
+<a name="line-120"></a>                           <font color=Cyan>++</font>unwords es<font color=Cyan>)</font>
+<a name="line-121"></a>                <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> []
+<a name="line-122"></a>            <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> []
+<a name="line-123"></a>
+<a name="line-124"></a>    checkRequired elem attrs req <font color=Red>=</font>
+<a name="line-125"></a>        <font color=Cyan>(</font>not <font color=Cyan>(</font>req <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> map fst attrs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>`gives`</font>
+<a name="line-126"></a>            <font color=Cyan>(</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt; requires the attribute \""</font><font color=Cyan>++</font>req
+<a name="line-127"></a>             <font color=Cyan>++</font><font color=Magenta>"\" but it is missing."</font><font color=Cyan>)</font>
+<a name="line-128"></a>
+<a name="line-129"></a>    checkContentSpec elem ANY <font color=Green><u>_</u></font> <font color=Red>=</font> []
+<a name="line-130"></a>    checkContentSpec elem EMPTY [] <font color=Red>=</font> []
+<a name="line-131"></a>    checkContentSpec elem EMPTY <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-132"></a>        <font color=Red>[</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt; is not empty but should be."</font><font color=Red>]</font>
+<a name="line-133"></a>    checkContentSpec elem <font color=Cyan>(</font>Mixed PCDATA<font color=Cyan>)</font> cs <font color=Red>=</font> concatMap <font color=Cyan>(</font>checkMixed elem []<font color=Cyan>)</font> cs
+<a name="line-134"></a>    checkContentSpec elem <font color=Cyan>(</font>Mixed <font color=Cyan>(</font>PCDATAplus names<font color=Cyan>)</font><font color=Cyan>)</font> cs <font color=Red>=</font>
+<a name="line-135"></a>        concatMap <font color=Cyan>(</font>checkMixed elem names<font color=Cyan>)</font> cs
+<a name="line-136"></a>    checkContentSpec elem <font color=Cyan>(</font>ContentSpec cp<font color=Cyan>)</font> cs <font color=Red>=</font> excludeText elem cs <font color=Cyan>++</font>
+<a name="line-137"></a>        <font color=Cyan>(</font><font color=Green><u>let</u></font> <font color=Cyan>(</font>errs<font color=Cyan>,</font>rest<font color=Cyan>)</font> <font color=Red>=</font> checkCP elem cp <font color=Cyan>(</font>flatten cs<font color=Cyan>)</font> <font color=Green><u>in</u></font>
+<a name="line-138"></a>         <font color=Green><u>case</u></font> rest <font color=Green><u>of</u></font> [] <font color=Red>-&gt;</font> errs
+<a name="line-139"></a>                      <font color=Green><u>_</u></font>  <font color=Red>-&gt;</font> errs<font color=Cyan>++</font><font color=Red>[</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt; contains extra "</font>
+<a name="line-140"></a>                                  <font color=Cyan>++</font><font color=Magenta>"elements beyond its content spec."</font><font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-141"></a>
+<a name="line-142"></a>    checkMixed elem permitted <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem name <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font>
+<a name="line-143"></a>        <font color=Red>|</font> not <font color=Cyan>(</font>name <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> permitted<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-144"></a>            <font color=Red>[</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt; contains an element &lt;"</font><font color=Cyan>++</font>name
+<a name="line-145"></a>             <font color=Cyan>++</font><font color=Magenta>"&gt; but should not."</font><font color=Red>]</font>
+<a name="line-146"></a>    checkMixed elem permitted <font color=Green><u>_</u></font> <font color=Red>=</font> []
+<a name="line-147"></a>
+<a name="line-148"></a>    flatten <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem name <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><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> name<font color=Red><b>:</b></font> flatten cs
+<a name="line-149"></a>    flatten <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> flatten cs
+<a name="line-150"></a>    flatten []                            <font color=Red>=</font> []
+<a name="line-151"></a>
+<a name="line-152"></a>    excludeText elem <font color=Cyan>(</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font> excludeText elem cs
+<a name="line-153"></a>    excludeText elem <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font> excludeText elem cs
+<a name="line-154"></a>    excludeText elem <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> <font color=Red>|</font> all isSpace s <font color=Red>=</font> excludeText elem cs
+<a name="line-155"></a>    excludeText elem <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>
+<a name="line-156"></a>        <font color=Red>[</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt; contains text/references but should not."</font><font color=Red>]</font>
+<a name="line-157"></a>    excludeText elem [] <font color=Red>=</font> []
+<a name="line-158"></a>
+<a name="line-159"></a>    <font color=Blue>-- This is a little parser really.  Returns any errors, plus the remainder</font>
+<a name="line-160"></a>    <font color=Blue>-- of the input string.</font>
+<a name="line-161"></a>    checkCP <font color=Red>::</font> Name <font color=Red>-&gt;</font> CP <font color=Red>-&gt;</font> <font color=Red>[</font>Name<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>String<font color=Red>]</font><font color=Cyan>,</font><font color=Red>[</font>Name<font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-162"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n None<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> []<font color=Cyan>)</font>
+<a name="line-163"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n None<font color=Cyan>)</font> <font color=Cyan>(</font>n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
+<a name="line-164"></a>        <font color=Red>|</font> n<font color=Cyan>==</font>n'     <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> ns<font color=Cyan>)</font>
+<a name="line-165"></a>        <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
+<a name="line-166"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n Query<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>[]<font color=Cyan>)</font>
+<a name="line-167"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n Query<font color=Cyan>)</font> <font color=Cyan>(</font>n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
+<a name="line-168"></a>        <font color=Red>|</font> n<font color=Cyan>==</font>n'     <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> ns<font color=Cyan>)</font>
+<a name="line-169"></a>        <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
+<a name="line-170"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>[]<font color=Cyan>)</font>
+<a name="line-171"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font> <font color=Cyan>(</font>n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
+<a name="line-172"></a>        <font color=Red>|</font> n<font color=Cyan>==</font>n'     <font color=Red>=</font> checkCP elem <font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font> ns
+<a name="line-173"></a>        <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
+<a name="line-174"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n Plus<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> []<font color=Cyan>)</font>
+<a name="line-175"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>TagName n Plus<font color=Cyan>)</font> <font color=Cyan>(</font>n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
+<a name="line-176"></a>        <font color=Red>|</font> n<font color=Cyan>==</font>n'     <font color=Red>=</font> checkCP elem <font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font> ns
+<a name="line-177"></a>        <font color=Red>|</font> otherwise <font color=Red>=</font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> n'<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>
+<a name="line-178"></a> <font color=Blue>-- omit this clause, to permit (a?|b?) as a valid but empty choice</font>
+<a name="line-179"></a> <font color=Blue>-- checkCP elem cp@(Choice cps None) [] = (cpError elem cp, [])</font>
+<a name="line-180"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Choice cps None<font color=Cyan>)</font> ns <font color=Red>=</font>
+<a name="line-181"></a>        <font color=Green><u>let</u></font> next <font color=Red>=</font> choice elem ns cps <font color=Green><u>in</u></font>
+<a name="line-182"></a>        <font color=Green><u>if</u></font> null next <font color=Green><u>then</u></font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> ns<font color=Cyan>)</font>
+<a name="line-183"></a>        <font color=Green><u>else</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> head next<font color=Cyan>)</font>	<font color=Blue>-- choose the first alternative with no errors</font>
+<a name="line-184"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Choice cps Query<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>[]<font color=Cyan>)</font>
+<a name="line-185"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Choice cps Query<font color=Cyan>)</font> ns <font color=Red>=</font>
+<a name="line-186"></a>        <font color=Green><u>let</u></font> next <font color=Red>=</font> choice elem ns cps <font color=Green><u>in</u></font>
+<a name="line-187"></a>        <font color=Green><u>if</u></font> null next <font color=Green><u>then</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>ns<font color=Cyan>)</font>
+<a name="line-188"></a>        <font color=Green><u>else</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> head next<font color=Cyan>)</font>
+<a name="line-189"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>[]<font color=Cyan>)</font>
+<a name="line-190"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font> ns <font color=Red>=</font>
+<a name="line-191"></a>        <font color=Green><u>let</u></font> next <font color=Red>=</font> choice elem ns cps <font color=Green><u>in</u></font>
+<a name="line-192"></a>        <font color=Green><u>if</u></font> null next <font color=Green><u>then</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>ns<font color=Cyan>)</font>
+<a name="line-193"></a>        <font color=Green><u>else</u></font> checkCP elem <font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font> <font color=Cyan>(</font>head next<font color=Cyan>)</font>
+<a name="line-194"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Choice cps Plus<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> []<font color=Cyan>)</font>
+<a name="line-195"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Choice cps Plus<font color=Cyan>)</font> ns <font color=Red>=</font>
+<a name="line-196"></a>        <font color=Green><u>let</u></font> next <font color=Red>=</font> choice elem ns cps <font color=Green><u>in</u></font>
+<a name="line-197"></a>        <font color=Green><u>if</u></font> null next <font color=Green><u>then</u></font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> ns<font color=Cyan>)</font>
+<a name="line-198"></a>        <font color=Green><u>else</u></font> checkCP elem <font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font> <font color=Cyan>(</font>head next<font color=Cyan>)</font>
+<a name="line-199"></a> <font color=Blue>-- omit this clause, to permit (a?,b?) as a valid but empty sequence</font>
+<a name="line-200"></a> <font color=Blue>-- checkCP elem cp@(Seq cps None) [] = (cpError elem cp, [])</font>
+<a name="line-201"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Seq cps None<font color=Cyan>)</font> ns <font color=Red>=</font>
+<a name="line-202"></a>        <font color=Green><u>let</u></font> <font color=Cyan>(</font>errs<font color=Cyan>,</font>next<font color=Cyan>)</font> <font color=Red>=</font> sequence elem ns cps <font color=Green><u>in</u></font>
+<a name="line-203"></a>        <font color=Green><u>if</u></font> null errs <font color=Green><u>then</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>next<font color=Cyan>)</font>
+<a name="line-204"></a>        <font color=Green><u>else</u></font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>++</font>errs<font color=Cyan>,</font> ns<font color=Cyan>)</font>
+<a name="line-205"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Seq cps Query<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>[]<font color=Cyan>)</font>
+<a name="line-206"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Seq cps Query<font color=Cyan>)</font> ns <font color=Red>=</font>
+<a name="line-207"></a>        <font color=Green><u>let</u></font> <font color=Cyan>(</font>errs<font color=Cyan>,</font>next<font color=Cyan>)</font> <font color=Red>=</font> sequence elem ns cps <font color=Green><u>in</u></font>
+<a name="line-208"></a>        <font color=Green><u>if</u></font> null errs <font color=Green><u>then</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>next<font color=Cyan>)</font>
+<a name="line-209"></a>        <font color=Green><u>else</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> ns<font color=Cyan>)</font>
+<a name="line-210"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>[]<font color=Cyan>)</font>
+<a name="line-211"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font> ns <font color=Red>=</font>
+<a name="line-212"></a>        <font color=Green><u>let</u></font> <font color=Cyan>(</font>errs<font color=Cyan>,</font>next<font color=Cyan>)</font> <font color=Red>=</font> sequence elem ns cps <font color=Green><u>in</u></font>
+<a name="line-213"></a>        <font color=Green><u>if</u></font> null errs <font color=Green><u>then</u></font> checkCP elem <font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font> next
+<a name="line-214"></a>        <font color=Green><u>else</u></font> <font color=Cyan>(</font>[]<font color=Cyan>,</font> ns<font color=Cyan>)</font>
+<a name="line-215"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Seq cps Plus<font color=Cyan>)</font> [] <font color=Red>=</font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>,</font> []<font color=Cyan>)</font>
+<a name="line-216"></a>    checkCP elem cp<font color=Red>@</font><font color=Cyan>(</font>Seq cps Plus<font color=Cyan>)</font> ns <font color=Red>=</font>
+<a name="line-217"></a>        <font color=Green><u>let</u></font> <font color=Cyan>(</font>errs<font color=Cyan>,</font>next<font color=Cyan>)</font> <font color=Red>=</font> sequence elem ns cps <font color=Green><u>in</u></font>
+<a name="line-218"></a>        <font color=Green><u>if</u></font> null errs <font color=Green><u>then</u></font> checkCP elem <font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font> next
+<a name="line-219"></a>        <font color=Green><u>else</u></font> <font color=Cyan>(</font>cpError elem cp<font color=Cyan>++</font>errs<font color=Cyan>,</font> ns<font color=Cyan>)</font>
+<a name="line-220"></a>
+<a name="line-221"></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="line-222"></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="line-223"></a>        <font color=Cyan>++</font> <font color=Red>[</font> ns <font color=Red>|</font> all possEmpty cps <font color=Red>]</font>
+<a name="line-224"></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="line-225"></a>              definite <font color=Cyan>(</font>Choice cps Query<font color=Cyan>)</font> <font color=Red>=</font> Choice cps None
+<a name="line-226"></a>              definite <font color=Cyan>(</font>Seq cps Query<font color=Cyan>)</font>    <font color=Red>=</font> Seq cps None
+<a name="line-227"></a>              definite <font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font>   <font color=Red>=</font> TagName n Plus
+<a name="line-228"></a>              definite <font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font>  <font color=Red>=</font> Choice cps Plus
+<a name="line-229"></a>              definite <font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font>     <font color=Red>=</font> Seq cps Plus
+<a name="line-230"></a>              definite x                  <font color=Red>=</font> x
+<a name="line-231"></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="line-232"></a>              possEmpty <font color=Cyan>(</font>Choice cps None<font color=Cyan>)</font> <font color=Red>=</font> all possEmpty cps
+<a name="line-233"></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="line-234"></a>              possEmpty <font color=Cyan>(</font>Seq cps None<font color=Cyan>)</font>    <font color=Red>=</font> all possEmpty cps
+<a name="line-235"></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="line-236"></a>    sequence elem ns cps <font color=Red>=</font>  <font color=Blue>-- accumulate errors down the sequence</font>
+<a name="line-237"></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="line-238"></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="line-239"></a>              <font color=Cyan>(</font>[]<font color=Cyan>,</font>ns<font color=Cyan>)</font> cps
+<a name="line-240"></a>
+<a name="line-241"></a>    checkIDs elem <font color=Red>=</font>
+<a name="line-242"></a>        <font color=Green><u>let</u></font> celem <font color=Red>=</font> CElem elem undefined
+<a name="line-243"></a>            showAttr a <font color=Red>=</font> iffind a literal none
+<a name="line-244"></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="line-245"></a>                                                    celem<font color=Cyan>)</font>
+<a name="line-246"></a>                                <font color=Cyan>(</font>ids dtd<font color=Cyan>)</font>
+<a name="line-247"></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="line-248"></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="line-249"></a>               <font color=Cyan>(</font><font color=Magenta>"These attribute values of type ID are not unique: "</font>
+<a name="line-250"></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="line-251"></a>
+<a name="line-252"></a>
+<a name="line-253"></a><a name="cpError"></a><font color=Blue>cpError</font> <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="line-254"></a><font color=Blue>cpError</font> elem cp <font color=Red>=</font>
+<a name="line-255"></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="line-256"></a>
+<a name="line-257"></a>
+<a name="line-258"></a><a name="display"></a><font color=Blue>display</font> <font color=Red>::</font> CP <font color=Red>-&gt;</font> String
+<a name="line-259"></a><font color=Blue>display</font> <font color=Cyan>(</font>TagName name mod<font color=Cyan>)</font> <font color=Red>=</font> name <font color=Cyan>++</font> modifier mod
+<a name="line-260"></a><font color=Blue>display</font> <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="line-261"></a>                             <font color=Cyan>++</font> <font color=Magenta>")"</font> <font color=Cyan>++</font> modifier mod
+<a name="line-262"></a><font color=Blue>display</font> <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="line-263"></a>                             <font color=Cyan>++</font> <font color=Magenta>")"</font> <font color=Cyan>++</font> modifier mod
+<a name="line-264"></a>
+<a name="line-265"></a><a name="modifier"></a><font color=Blue>modifier</font> <font color=Red>::</font> Modifier <font color=Red>-&gt;</font> String
+<a name="line-266"></a><font color=Blue>modifier</font> None  <font color=Red>=</font> <font color=Magenta>""</font>
+<a name="line-267"></a><font color=Blue>modifier</font> Query <font color=Red>=</font> <font color=Magenta>"?"</font>
+<a name="line-268"></a><font color=Blue>modifier</font> Star  <font color=Red>=</font> <font color=Magenta>"*"</font>
+<a name="line-269"></a><font color=Blue>modifier</font> Plus  <font color=Red>=</font> <font color=Magenta>"+"</font>
+<a name="line-270"></a>
+<a name="line-271"></a><a name="duplicates"></a><font color=Blue>duplicates</font> <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="line-272"></a><font color=Blue>duplicates</font> xs <font color=Red>=</font> xs <font color=Cyan>\\</font> <font color=Cyan>(</font>nub xs<font color=Cyan>)</font>
 </pre>
+</body>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Verbatim.html b/docs/HaXml/src/Text/XML/HaXml/Verbatim.html
--- a/docs/HaXml/src/Text/XML/HaXml/Verbatim.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Verbatim.html
@@ -1,95 +1,101 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>{- |
-<a name="(line2)"></a>   Maintainer  :  simons@cryp.to
-<a name="(line3)"></a>   Stability   :  experimental
-<a name="(line4)"></a>   Portability :  portable
-<a name="(line5)"></a>
-<a name="(line6)"></a>   The preferred method for rendering a 'Document' or single 'Content'
-<a name="(line7)"></a>   is by using the pretty printing facility defined in "Pretty".
-<a name="(line8)"></a>   Pretty-printing does not work well for cases, however, where the
-<a name="(line9)"></a>   formatting in the XML document is significant. Examples of this
-<a name="(line10)"></a>   case are XHTML's @\&lt;pre\&gt;@ tag, Docbook's @\&lt;literallayout\&gt;@ tag,
-<a name="(line11)"></a>   and many more.
-<a name="(line12)"></a>
-<a name="(line13)"></a>   Theoretically, the document author could avoid this problem by
-<a name="(line14)"></a>   wrapping the contents of these tags in a \&lt;![CDATA[...]]\&gt; section,
-<a name="(line15)"></a>   but often this is not practical, for instance when the
-<a name="(line16)"></a>   literal-layout section contains other elements. Finally, program
-<a name="(line17)"></a>   writers could manually format these elements by transforming them
-<a name="(line18)"></a>   into a 'literal' string in their 'CFliter', etc., but this is
-<a name="(line19)"></a>   annoying to do and prone to omissions and formatting errors.
-<a name="(line20)"></a>
-<a name="(line21)"></a>   As an alternative, this module provides the function 'verbatim',
-<a name="(line22)"></a>   which will format XML 'Content' as a 'String' while retaining the
-<a name="(line23)"></a>   formatting of the input document unchanged.
-<a name="(line24)"></a>
-<a name="(line25)"></a>   /Know problems/:
-<a name="(line26)"></a>
-<a name="(line27)"></a>    * HaXml's parser eats line feeds between two tags.
-<a name="(line28)"></a>
-<a name="(line29)"></a>    * 'Attribute's should be formatted by making them an instance of
-<a name="(line30)"></a>      'Verbatim' as well, but since an 'Attribute' is just a tuple,
-<a name="(line31)"></a>      not a full data type, the helper function 'verbAttr' must be
-<a name="(line32)"></a>      used instead.
-<a name="(line33)"></a>
-<a name="(line34)"></a>    * 'CMisc' is not yet supported.
-<a name="(line35)"></a>
-<a name="(line36)"></a>    * 'Element's, which contain no content, are formatted as
-<a name="(line37)"></a>       @\&lt;element-name\/\&gt;@, even if they were not defined as being of
-<a name="(line38)"></a>       type @EMPTY@. In XML this perfectly alright, but in SGML it is
-<a name="(line39)"></a>       not. Those, who wish to use 'verbatim' to format parts of say
-<a name="(line40)"></a>       an HTML page will have to (a) replace problematic elements by
-<a name="(line41)"></a>       'literal's /before/ running 'verbatim' or (b) use a second
-<a name="(line42)"></a>       search-and-replace stage to fix this.
-<a name="(line43)"></a> -}</font>
-<a name="(line44)"></a>
-<a name="(line45)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim <font color=Green><u>where</u></font>
-<a name="(line46)"></a>
-<a name="(line47)"></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="(line48)"></a>
-<a name="(line49)"></a><font color=Blue>-- |This class promises that the function 'verbatim' knows how to</font>
-<a name="(line50)"></a><font color=Blue>-- format this data type into a string without changing the</font>
-<a name="(line51)"></a><font color=Blue>-- formatting.</font>
-<a name="(line52)"></a>
-<a name="(line53)"></a><a name="Verbatim"></a><font color=Green><u>class</u></font> Verbatim a <font color=Green><u>where</u></font>
-<a name="(line54)"></a>    verbatim <font color=Red>::</font> a <font color=Red>-&gt;</font> String
-<a name="(line55)"></a>
-<a name="(line56)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>Verbatim a<font color=Cyan>)</font> <font color=Red>=&gt;</font> Verbatim <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>where</u></font>
-<a name="(line57)"></a>    verbatim  <font color=Red>=</font> concat <font color=Cyan>.</font> <font color=Cyan>(</font>map verbatim<font color=Cyan>)</font>
-<a name="(line58)"></a>
-<a name="(line59)"></a><font color=Green><u>instance</u></font> Verbatim Char <font color=Green><u>where</u></font>
-<a name="(line60)"></a>    verbatim c <font color=Red>=</font> <font color=Red>[</font>c<font color=Red>]</font>
-<a name="(line61)"></a>
-<a name="(line62)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>Verbatim a<font color=Cyan>,</font> Verbatim b<font color=Cyan>)</font> <font color=Red>=&gt;</font> Verbatim <font color=Cyan>(</font>Either a b<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line63)"></a>    verbatim <font color=Cyan>(</font>Left v<font color=Cyan>)</font>  <font color=Red>=</font> verbatim v
-<a name="(line64)"></a>    verbatim <font color=Cyan>(</font>Right v<font color=Cyan>)</font> <font color=Red>=</font> verbatim v
-<a name="(line65)"></a>
-<a name="(line66)"></a><font color=Green><u>instance</u></font> Verbatim <font color=Cyan>(</font>Content i<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line67)"></a>    verbatim <font color=Cyan>(</font>CElem c <font color=Green><u>_</u></font><font color=Cyan>)</font>     <font color=Red>=</font> verbatim c
-<a name="(line68)"></a>    verbatim <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> c <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> c
-<a name="(line69)"></a>    verbatim <font color=Cyan>(</font>CRef c <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> verbatim c
-<a name="(line70)"></a>    verbatim <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> error <font color=Magenta>"NYI: verbatim not defined for CMisc"</font>
-<a name="(line71)"></a>
-<a name="(line72)"></a><font color=Green><u>instance</u></font> Verbatim <font color=Cyan>(</font>Element i<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line73)"></a>    verbatim <font color=Cyan>(</font>Elem nam att []<font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&lt;"</font> <font color=Cyan>++</font> nam <font color=Cyan>++</font> <font color=Cyan>(</font>concat <font color=Cyan>.</font> <font color=Cyan>(</font>map verbAttr<font color=Cyan>)</font><font color=Cyan>)</font> att
-<a name="(line74)"></a>                                   <font color=Cyan>++</font> <font color=Magenta>"/&gt;"</font>
-<a name="(line75)"></a>    verbatim <font color=Cyan>(</font>Elem nam att cont<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&lt;"</font> <font color=Cyan>++</font> nam <font color=Cyan>++</font> <font color=Cyan>(</font>concat <font color=Cyan>.</font> <font color=Cyan>(</font>map verbAttr<font color=Cyan>)</font><font color=Cyan>)</font> att
-<a name="(line76)"></a>                                   <font color=Cyan>++</font> <font color=Magenta>"&gt;"</font> <font color=Cyan>++</font> verbatim cont <font color=Cyan>++</font> <font color=Magenta>"&lt;/"</font> <font color=Cyan>++</font> nam <font color=Cyan>++</font> <font color=Magenta>"&gt;"</font>
-<a name="(line77)"></a>
-<a name="(line78)"></a><font color=Green><u>instance</u></font> Verbatim Reference <font color=Green><u>where</u></font>
-<a name="(line79)"></a>    verbatim <font color=Cyan>(</font>RefEntity r<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&amp;"</font> <font color=Cyan>++</font> verbatim r <font color=Cyan>++</font> <font color=Magenta>";"</font>
-<a name="(line80)"></a>    verbatim <font color=Cyan>(</font>RefChar c<font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&amp;#"</font> <font color=Cyan>++</font> show c <font color=Cyan>++</font> <font color=Magenta>";"</font>
-<a name="(line81)"></a>
-<a name="(line82)"></a>
-<a name="(line83)"></a><font color=Blue>-- |This is a helper function is required because Haskell does not</font>
-<a name="(line84)"></a><font color=Blue>-- allow to make an ordinary tuple (like 'Attribute') an instance of a</font>
-<a name="(line85)"></a><font color=Blue>-- class. The resulting output will preface the actual attribute with</font>
-<a name="(line86)"></a><font color=Blue>-- a single blank so that lists of 'Attribute's can be handled</font>
-<a name="(line87)"></a><font color=Blue>-- implicitly by the definition for lists of 'Verbatim' data types.</font>
-<a name="(line88)"></a>
-<a name="(line89)"></a><a name="verbAttr"></a>verbAttr <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> String
-<a name="(line90)"></a>verbAttr <font color=Cyan>(</font>n<font color=Cyan>,</font> AttValue v<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>" "</font> <font color=Cyan>++</font> n <font color=Cyan>++</font> <font color=Magenta>"=\""</font> <font color=Cyan>++</font> verbatim v <font color=Cyan>++</font> <font color=Magenta>"\""</font>
-<a name="(line91)"></a>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Verbatim.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>{- |
+<a name="line-2"></a>   Maintainer  :  simons@cryp.to
+<a name="line-3"></a>   Stability   :  experimental
+<a name="line-4"></a>   Portability :  portable
+<a name="line-5"></a>
+<a name="line-6"></a>   The preferred method for rendering a 'Document' or single 'Content'
+<a name="line-7"></a>   is by using the pretty printing facility defined in "Pretty".
+<a name="line-8"></a>   Pretty-printing does not work well for cases, however, where the
+<a name="line-9"></a>   formatting in the XML document is significant. Examples of this
+<a name="line-10"></a>   case are XHTML's @\&lt;pre\&gt;@ tag, Docbook's @\&lt;literallayout\&gt;@ tag,
+<a name="line-11"></a>   and many more.
+<a name="line-12"></a>
+<a name="line-13"></a>   Theoretically, the document author could avoid this problem by
+<a name="line-14"></a>   wrapping the contents of these tags in a \&lt;![CDATA[...]]\&gt; section,
+<a name="line-15"></a>   but often this is not practical, for instance when the
+<a name="line-16"></a>   literal-layout section contains other elements. Finally, program
+<a name="line-17"></a>   writers could manually format these elements by transforming them
+<a name="line-18"></a>   into a 'literal' string in their 'CFliter', etc., but this is
+<a name="line-19"></a>   annoying to do and prone to omissions and formatting errors.
+<a name="line-20"></a>
+<a name="line-21"></a>   As an alternative, this module provides the function 'verbatim',
+<a name="line-22"></a>   which will format XML 'Content' as a 'String' while retaining the
+<a name="line-23"></a>   formatting of the input document unchanged.
+<a name="line-24"></a>
+<a name="line-25"></a>   /Know problems/:
+<a name="line-26"></a>
+<a name="line-27"></a>    * HaXml's parser eats line feeds between two tags.
+<a name="line-28"></a>
+<a name="line-29"></a>    * 'Attribute's should be formatted by making them an instance of
+<a name="line-30"></a>      'Verbatim' as well, but since an 'Attribute' is just a tuple,
+<a name="line-31"></a>      not a full data type, the helper function 'verbAttr' must be
+<a name="line-32"></a>      used instead.
+<a name="line-33"></a>
+<a name="line-34"></a>    * 'CMisc' is not yet supported.
+<a name="line-35"></a>
+<a name="line-36"></a>    * 'Element's, which contain no content, are formatted as
+<a name="line-37"></a>       @\&lt;element-name\/\&gt;@, even if they were not defined as being of
+<a name="line-38"></a>       type @EMPTY@. In XML this perfectly alright, but in SGML it is
+<a name="line-39"></a>       not. Those, who wish to use 'verbatim' to format parts of say
+<a name="line-40"></a>       an HTML page will have to (a) replace problematic elements by
+<a name="line-41"></a>       'literal's /before/ running 'verbatim' or (b) use a second
+<a name="line-42"></a>       search-and-replace stage to fix this.
+<a name="line-43"></a> -}</font>
+<a name="line-44"></a>
+<a name="line-45"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim <font color=Green><u>where</u></font>
+<a name="line-46"></a>
+<a name="line-47"></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="line-48"></a>
+<a name="line-49"></a><font color=Blue>-- |This class promises that the function 'verbatim' knows how to</font>
+<a name="line-50"></a><font color=Blue>-- format this data type into a string without changing the</font>
+<a name="line-51"></a><font color=Blue>-- formatting.</font>
+<a name="line-52"></a>
+<a name="line-53"></a><a name="Verbatim"></a><font color=Green><u>class</u></font> Verbatim a <font color=Green><u>where</u></font>
+<a name="line-54"></a>    verbatim <font color=Red>::</font> a <font color=Red>-&gt;</font> String
+<a name="line-55"></a>
+<a name="line-56"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>Verbatim a<font color=Cyan>)</font> <font color=Red>=&gt;</font> Verbatim <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>where</u></font>
+<a name="line-57"></a>    verbatim  <font color=Red>=</font> concat <font color=Cyan>.</font> <font color=Cyan>(</font>map verbatim<font color=Cyan>)</font>
+<a name="line-58"></a>
+<a name="line-59"></a><font color=Green><u>instance</u></font> Verbatim Char <font color=Green><u>where</u></font>
+<a name="line-60"></a>    verbatim c <font color=Red>=</font> <font color=Red>[</font>c<font color=Red>]</font>
+<a name="line-61"></a>
+<a name="line-62"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>Verbatim a<font color=Cyan>,</font> Verbatim b<font color=Cyan>)</font> <font color=Red>=&gt;</font> Verbatim <font color=Cyan>(</font>Either a b<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-63"></a>    verbatim <font color=Cyan>(</font>Left v<font color=Cyan>)</font>  <font color=Red>=</font> verbatim v
+<a name="line-64"></a>    verbatim <font color=Cyan>(</font>Right v<font color=Cyan>)</font> <font color=Red>=</font> verbatim v
+<a name="line-65"></a>
+<a name="line-66"></a><font color=Green><u>instance</u></font> Verbatim <font color=Cyan>(</font>Content i<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-67"></a>    verbatim <font color=Cyan>(</font>CElem c <font color=Green><u>_</u></font><font color=Cyan>)</font>     <font color=Red>=</font> verbatim c
+<a name="line-68"></a>    verbatim <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> c <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> c
+<a name="line-69"></a>    verbatim <font color=Cyan>(</font>CRef c <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> verbatim c
+<a name="line-70"></a>    verbatim <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> error <font color=Magenta>"NYI: verbatim not defined for CMisc"</font>
+<a name="line-71"></a>
+<a name="line-72"></a><font color=Green><u>instance</u></font> Verbatim <font color=Cyan>(</font>Element i<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-73"></a>    verbatim <font color=Cyan>(</font>Elem nam att []<font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&lt;"</font> <font color=Cyan>++</font> nam <font color=Cyan>++</font> <font color=Cyan>(</font>concat <font color=Cyan>.</font> <font color=Cyan>(</font>map verbAttr<font color=Cyan>)</font><font color=Cyan>)</font> att
+<a name="line-74"></a>                                   <font color=Cyan>++</font> <font color=Magenta>"/&gt;"</font>
+<a name="line-75"></a>    verbatim <font color=Cyan>(</font>Elem nam att cont<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&lt;"</font> <font color=Cyan>++</font> nam <font color=Cyan>++</font> <font color=Cyan>(</font>concat <font color=Cyan>.</font> <font color=Cyan>(</font>map verbAttr<font color=Cyan>)</font><font color=Cyan>)</font> att
+<a name="line-76"></a>                                   <font color=Cyan>++</font> <font color=Magenta>"&gt;"</font> <font color=Cyan>++</font> verbatim cont <font color=Cyan>++</font> <font color=Magenta>"&lt;/"</font> <font color=Cyan>++</font> nam <font color=Cyan>++</font> <font color=Magenta>"&gt;"</font>
+<a name="line-77"></a>
+<a name="line-78"></a><font color=Green><u>instance</u></font> Verbatim Reference <font color=Green><u>where</u></font>
+<a name="line-79"></a>    verbatim <font color=Cyan>(</font>RefEntity r<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&amp;"</font> <font color=Cyan>++</font> verbatim r <font color=Cyan>++</font> <font color=Magenta>";"</font>
+<a name="line-80"></a>    verbatim <font color=Cyan>(</font>RefChar c<font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&amp;#"</font> <font color=Cyan>++</font> show c <font color=Cyan>++</font> <font color=Magenta>";"</font>
+<a name="line-81"></a>
+<a name="line-82"></a>
+<a name="line-83"></a><font color=Blue>-- |This is a helper function is required because Haskell does not</font>
+<a name="line-84"></a><font color=Blue>-- allow to make an ordinary tuple (like 'Attribute') an instance of a</font>
+<a name="line-85"></a><font color=Blue>-- class. The resulting output will preface the actual attribute with</font>
+<a name="line-86"></a><font color=Blue>-- a single blank so that lists of 'Attribute's can be handled</font>
+<a name="line-87"></a><font color=Blue>-- implicitly by the definition for lists of 'Verbatim' data types.</font>
+<a name="line-88"></a>
+<a name="line-89"></a><a name="verbAttr"></a><font color=Blue>verbAttr</font> <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> String
+<a name="line-90"></a><font color=Blue>verbAttr</font> <font color=Cyan>(</font>n<font color=Cyan>,</font> AttValue v<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>" "</font> <font color=Cyan>++</font> n <font color=Cyan>++</font> <font color=Magenta>"=\""</font> <font color=Cyan>++</font> verbatim v <font color=Cyan>++</font> <font color=Magenta>"\""</font>
+<a name="line-91"></a>
 </pre>
+</body>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Wrappers.html b/docs/HaXml/src/Text/XML/HaXml/Wrappers.html
--- a/docs/HaXml/src/Text/XML/HaXml/Wrappers.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Wrappers.html
@@ -1,65 +1,81 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<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>Wrappers
-<a name="(line2)"></a>  <font color=Cyan>(</font> fix2Args
-<a name="(line3)"></a>  <font color=Cyan>,</font> processXmlWith
-<a name="(line4)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line5)"></a>
-<a name="(line6)"></a><font color=Blue>-- imports required for processXmlWith and fix2Args</font>
-<a name="(line7)"></a><font color=Green><u>import</u></font> System
-<a name="(line8)"></a><font color=Green><u>import</u></font> IO
-<a name="(line9)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>isSuffixOf<font color=Cyan>)</font>
-<a name="(line10)"></a>
-<a name="(line11)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types       <font color=Cyan>(</font>Document<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font><font color=Cyan>,</font>Content<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line12)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators <font color=Cyan>(</font>CFilter<font color=Cyan>)</font>
-<a name="(line13)"></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="(line14)"></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="(line15)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Parse  <font color=Cyan>(</font>htmlParse<font color=Cyan>)</font>
-<a name="(line16)"></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=Green><u>as</u></font> PP<font color=Cyan>(</font>document<font color=Cyan>)</font>
-<a name="(line17)"></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="(line18)"></a>
-<a name="(line19)"></a>
-<a name="(line20)"></a><a name="fix2Args"></a><font color=Blue>-- | This useful auxiliary checks the commandline arguments for two</font>
-<a name="(line21)"></a><font color=Blue>--   filenames, the input and output file respectively.  If either</font>
-<a name="(line22)"></a><font color=Blue>--   is missing, it is replaced by '-', which can be interpreted by the</font>
-<a name="(line23)"></a><font color=Blue>--   caller as stdin and\/or stdout.</font>
-<a name="(line24)"></a>fix2Args <font color=Red>::</font> IO <font color=Cyan>(</font>String<font color=Cyan>,</font>String<font color=Cyan>)</font>
-<a name="(line25)"></a>fix2Args <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line26)"></a>  args <font color=Red>&lt;-</font> getArgs
-<a name="(line27)"></a>  <font color=Green><u>case</u></font> length args <font color=Green><u>of</u></font>
-<a name="(line28)"></a>    <font color=Magenta>0</font> <font color=Red>-&gt;</font> return <font color=Cyan>(</font><font color=Magenta>"-"</font><font color=Cyan>,</font>     <font color=Magenta>"-"</font><font color=Cyan>)</font>
-<a name="(line29)"></a>    <font color=Magenta>1</font> <font color=Red>-&gt;</font> return <font color=Cyan>(</font>args<font color=Cyan>!!</font><font color=Magenta>0</font><font color=Cyan>,</font> <font color=Magenta>"-"</font><font color=Cyan>)</font>
-<a name="(line30)"></a>    <font color=Magenta>2</font> <font color=Red>-&gt;</font> return <font color=Cyan>(</font>args<font color=Cyan>!!</font><font color=Magenta>0</font><font color=Cyan>,</font> args<font color=Cyan>!!</font><font color=Magenta>1</font><font color=Cyan>)</font>
-<a name="(line31)"></a>    <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Green><u>do</u></font> prog <font color=Red>&lt;-</font> getProgName
-<a name="(line32)"></a>            putStrLn <font color=Cyan>(</font><font color=Magenta>"Usage: "</font><font color=Cyan>++</font>prog<font color=Cyan>++</font><font color=Magenta>" [infile] [outfile]"</font><font color=Cyan>)</font>
-<a name="(line33)"></a>            exitFailure
-<a name="(line34)"></a>
-<a name="(line35)"></a>
-<a name="(line36)"></a><a name="processXmlWith"></a><font color=Blue>-- | The wrapper @processXmlWith@ returns an IO () computation</font>
-<a name="(line37)"></a><font color=Blue>--   that collects the filenames (or stdin\/stdout) to use when</font>
-<a name="(line38)"></a><font color=Blue>--   reading\/writing XML documents.  Its CFilter argument</font>
-<a name="(line39)"></a><font color=Blue>--   is applied to transform the XML document from the input and</font>
-<a name="(line40)"></a><font color=Blue>--   write it to the output.  No DTD is attached to the output.</font>
-<a name="(line41)"></a><font color=Blue>--</font>
-<a name="(line42)"></a><font color=Blue>--   If the input filename ends with .html or .htm, it is parsed using</font>
-<a name="(line43)"></a><font color=Blue>--   the error-correcting HTML parser rather than the strict XML parser.</font>
-<a name="(line44)"></a>processXmlWith <font color=Red>::</font> CFilter Posn <font color=Red>-&gt;</font> IO ()
-<a name="(line45)"></a>processXmlWith f <font color=Red>=</font> <font color=Green><u>do</u></font>
-<a name="(line46)"></a>  <font color=Cyan>(</font>inf<font color=Cyan>,</font>outf<font color=Cyan>)</font> <font color=Red>&lt;-</font> fix2Args
-<a name="(line47)"></a>  input      <font color=Red>&lt;-</font> <font color=Green><u>if</u></font> inf<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> getContents <font color=Green><u>else</u></font> readFile inf
-<a name="(line48)"></a>  o          <font color=Red>&lt;-</font> <font color=Green><u>if</u></font> outf<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout <font color=Green><u>else</u></font> openFile outf WriteMode
-<a name="(line49)"></a>  parse      <font color=Red>&lt;-</font> <font color=Green><u>if</u></font> <font color=Magenta>".html"</font> <font color=Cyan>`isSuffixOf`</font> inf <font color=Cyan>||</font> <font color=Magenta>".htm"</font> <font color=Cyan>`isSuffixOf`</font> inf
-<a name="(line50)"></a>                <font color=Green><u>then</u></font> return <font color=Cyan>(</font>htmlParse inf<font color=Cyan>)</font>
-<a name="(line51)"></a>                <font color=Green><u>else</u></font> return <font color=Cyan>(</font>xmlParse inf<font color=Cyan>)</font>
-<a name="(line52)"></a>  <font color=Cyan>(</font> hPutStrLn o <font color=Cyan>.</font> render <font color=Cyan>.</font> PP<font color=Cyan>.</font>document <font color=Cyan>.</font> onContent inf f <font color=Cyan>.</font> parse <font color=Cyan>)</font> input
-<a name="(line53)"></a>  hFlush o
-<a name="(line54)"></a>
-<a name="(line55)"></a>  <font color=Green><u>where</u></font>
-<a name="(line56)"></a>    onContent <font color=Red>::</font> FilePath <font color=Red>-&gt;</font> <font color=Cyan>(</font>CFilter Posn<font color=Cyan>)</font> <font color=Red>-&gt;</font> Document Posn <font color=Red>-&gt;</font> Document Posn
-<a name="(line57)"></a>    onContent file filter <font color=Cyan>(</font>Document p s e m<font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line58)"></a>        <font color=Green><u>case</u></font> filter <font color=Cyan>(</font>CElem e <font color=Cyan>(</font>posInNewCxt file Nothing<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Green><u>of</u></font>
-<a name="(line59)"></a>            <font color=Red>[</font>CElem e' <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> Document p s e' m
-<a name="(line60)"></a>            []           <font color=Red>-&gt;</font> error <font color=Magenta>"produced no output"</font>
-<a name="(line61)"></a>            <font color=Green><u>_</u></font>            <font color=Red>-&gt;</font> error <font color=Magenta>"produced more than one output"</font>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Wrappers.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Wrappers
+<a name="line-2"></a>  <font color=Cyan>(</font> fix2Args
+<a name="line-3"></a>  <font color=Cyan>,</font> processXmlWith
+<a name="line-4"></a>  <font color=Cyan>,</font> onContent
+<a name="line-5"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-6"></a>
+<a name="line-7"></a><font color=Blue>-- imports required for processXmlWith and fix2Args</font>
+<a name="line-8"></a><font color=Green><u>import</u></font> System
+<a name="line-9"></a><font color=Green><u>import</u></font> IO
+<a name="line-10"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>isSuffixOf<font color=Cyan>)</font>
+<a name="line-11"></a>
+<a name="line-12"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types       <font color=Cyan>(</font>Document<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font><font color=Cyan>,</font>Content<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-13"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators <font color=Cyan>(</font>CFilter<font color=Cyan>)</font>
+<a name="line-14"></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="line-15"></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="line-16"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Html<font color=Cyan>.</font>Parse  <font color=Cyan>(</font>htmlParse<font color=Cyan>)</font>
+<a name="line-17"></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=Green><u>as</u></font> PP<font color=Cyan>(</font>document<font color=Cyan>)</font>
+<a name="line-18"></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="line-19"></a>
+<a name="line-20"></a>
+<a name="line-21"></a><a name="fix2Args"></a><font color=Blue>-- | This useful auxiliary checks the commandline arguments for two</font>
+<a name="line-22"></a><font color=Blue>--   filenames, the input and output file respectively.  If either</font>
+<a name="line-23"></a><font color=Blue>--   is missing, it is replaced by '-', which can be interpreted by the</font>
+<a name="line-24"></a><font color=Blue>--   caller as stdin and\/or stdout.</font>
+<a name="line-25"></a><font color=Blue>fix2Args</font> <font color=Red>::</font> IO <font color=Cyan>(</font>String<font color=Cyan>,</font>String<font color=Cyan>)</font>
+<a name="line-26"></a><font color=Blue>fix2Args</font> <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-27"></a>  args <font color=Red>&lt;-</font> getArgs
+<a name="line-28"></a>  <font color=Green><u>case</u></font> length args <font color=Green><u>of</u></font>
+<a name="line-29"></a>    <font color=Magenta>0</font> <font color=Red>-&gt;</font> return <font color=Cyan>(</font><font color=Magenta>"-"</font><font color=Cyan>,</font>     <font color=Magenta>"-"</font><font color=Cyan>)</font>
+<a name="line-30"></a>    <font color=Magenta>1</font> <font color=Red>-&gt;</font> return <font color=Cyan>(</font>args<font color=Cyan>!!</font><font color=Magenta>0</font><font color=Cyan>,</font> <font color=Magenta>"-"</font><font color=Cyan>)</font>
+<a name="line-31"></a>    <font color=Magenta>2</font> <font color=Red>-&gt;</font> return <font color=Cyan>(</font>args<font color=Cyan>!!</font><font color=Magenta>0</font><font color=Cyan>,</font> args<font color=Cyan>!!</font><font color=Magenta>1</font><font color=Cyan>)</font>
+<a name="line-32"></a>    <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Green><u>do</u></font> prog <font color=Red>&lt;-</font> getProgName
+<a name="line-33"></a>            putStrLn <font color=Cyan>(</font><font color=Magenta>"Usage: "</font><font color=Cyan>++</font>prog<font color=Cyan>++</font><font color=Magenta>" [infile] [outfile]"</font><font color=Cyan>)</font>
+<a name="line-34"></a>            exitFailure
+<a name="line-35"></a>
+<a name="line-36"></a>
+<a name="line-37"></a><a name="processXmlWith"></a><font color=Blue>-- | The wrapper @processXmlWith@ returns an IO () computation</font>
+<a name="line-38"></a><font color=Blue>--   that collects the filenames (or stdin\/stdout) to use when</font>
+<a name="line-39"></a><font color=Blue>--   reading\/writing XML documents.  Its CFilter argument</font>
+<a name="line-40"></a><font color=Blue>--   is applied to transform the XML document from the input and</font>
+<a name="line-41"></a><font color=Blue>--   write it to the output.  No DTD is attached to the output.</font>
+<a name="line-42"></a><font color=Blue>--</font>
+<a name="line-43"></a><font color=Blue>--   If the input filename ends with .html or .htm, it is parsed using</font>
+<a name="line-44"></a><font color=Blue>--   the error-correcting HTML parser rather than the strict XML parser.</font>
+<a name="line-45"></a><font color=Blue>processXmlWith</font> <font color=Red>::</font> CFilter Posn <font color=Red>-&gt;</font> IO ()
+<a name="line-46"></a><font color=Blue>processXmlWith</font> f <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-47"></a>  <font color=Cyan>(</font>inf<font color=Cyan>,</font>outf<font color=Cyan>)</font> <font color=Red>&lt;-</font> fix2Args
+<a name="line-48"></a>  input      <font color=Red>&lt;-</font> <font color=Green><u>if</u></font> inf<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> getContents <font color=Green><u>else</u></font> readFile inf
+<a name="line-49"></a>  o          <font color=Red>&lt;-</font> <font color=Green><u>if</u></font> outf<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout <font color=Green><u>else</u></font> openFile outf WriteMode
+<a name="line-50"></a>  parse      <font color=Red>&lt;-</font> <font color=Green><u>if</u></font> <font color=Magenta>".html"</font> <font color=Cyan>`isSuffixOf`</font> inf <font color=Cyan>||</font> <font color=Magenta>".htm"</font> <font color=Cyan>`isSuffixOf`</font> inf
+<a name="line-51"></a>                <font color=Green><u>then</u></font> return <font color=Cyan>(</font>htmlParse inf<font color=Cyan>)</font>
+<a name="line-52"></a>                <font color=Green><u>else</u></font> return <font color=Cyan>(</font>xmlParse inf<font color=Cyan>)</font>
+<a name="line-53"></a>  <font color=Cyan>(</font> hPutStrLn o <font color=Cyan>.</font> render <font color=Cyan>.</font> PP<font color=Cyan>.</font>document <font color=Cyan>.</font> onContent inf f <font color=Cyan>.</font> parse <font color=Cyan>)</font> input
+<a name="line-54"></a>  hFlush o
+<a name="line-55"></a>
+<a name="line-56"></a>  <font color=Green><u>where</u></font>
+<a name="line-57"></a>    onContent <font color=Red>::</font> FilePath <font color=Red>-&gt;</font> <font color=Cyan>(</font>CFilter Posn<font color=Cyan>)</font> <font color=Red>-&gt;</font> Document Posn <font color=Red>-&gt;</font> Document Posn
+<a name="line-58"></a>    onContent file filter <font color=Cyan>(</font>Document p s e m<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-59"></a>        <font color=Green><u>case</u></font> filter <font color=Cyan>(</font>CElem e <font color=Cyan>(</font>posInNewCxt file Nothing<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Green><u>of</u></font>
+<a name="line-60"></a>            <font color=Red>[</font>CElem e' <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> Document p s e' m
+<a name="line-61"></a>            []           <font color=Red>-&gt;</font> error <font color=Magenta>"produced no output"</font>
+<a name="line-62"></a>            <font color=Green><u>_</u></font>            <font color=Red>-&gt;</font> error <font color=Magenta>"produced more than one output"</font>
+<a name="line-63"></a>
+<a name="line-64"></a><a name="onContent"></a><font color=Blue>-- | The wrapper @onContent@ simply applies a given content filter to a</font>
+<a name="line-65"></a><font color=Blue>--   document.  Ambiguous or empty results raise an error exception.</font>
+<a name="line-66"></a><font color=Blue>onContent</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> Document i <font color=Red>-&gt;</font> Document i
+<a name="line-67"></a><font color=Blue>onContent</font> filter <font color=Cyan>(</font>Document p s e m<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-68"></a>    <font color=Green><u>case</u></font> filter <font color=Cyan>(</font>CElem e undefined<font color=Cyan>)</font> <font color=Green><u>of</u></font>
+<a name="line-69"></a>      <font color=Red>[</font>CElem e' <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> Document p s e' m
+<a name="line-70"></a>      []           <font color=Red>-&gt;</font> error <font color=Magenta>"onContent: produced no output"</font>
+<a name="line-71"></a>      <font color=Green><u>_</u></font>            <font color=Red>-&gt;</font> error <font color=Magenta>"onContent: produced more than one output"</font>
 </pre>
+</body>
 </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,683 +1,898 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<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>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/XmlContent.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>{-# LANGUAGE ExistentialQuantification #-}</font>
+<a name="line-2"></a>
+<a name="line-3"></a><font color=Blue>-- | The class 'XmlContent' is a kind of replacement for Read and Show:</font>
+<a name="line-4"></a><font color=Blue>--   it provides conversions between a generic XML tree representation</font>
+<a name="line-5"></a><font color=Blue>--   and your own more specialised typeful Haskell data trees.</font>
+<a name="line-6"></a><font color=Blue>--</font>
+<a name="line-7"></a><font color=Blue>--   If you are starting with a set of Haskell datatypes, use DrIFT to</font>
+<a name="line-8"></a><font color=Blue>--   derive instances of this class for you:</font>
+<a name="line-9"></a><font color=Blue>--       http:\/\/repetae.net\/john\/computer\/haskell\/DrIFT</font>
+<a name="line-10"></a><font color=Blue>--   If you are starting with an XML DTD, use HaXml's tool DtdToHaskell</font>
+<a name="line-11"></a><font color=Blue>--   to generate both the Haskell types and the corresponding instances.</font>
+<a name="line-12"></a><font color=Blue>--</font>
+<a name="line-13"></a><font color=Blue>--   This unified class interface replaces two previous (somewhat similar)</font>
+<a name="line-14"></a><font color=Blue>--   classes: Haskell2Xml and Xml2Haskell.  There was no real reason to have</font>
+<a name="line-15"></a><font color=Blue>--   separate classes depending on how you originally defined your datatypes.</font>
+<a name="line-16"></a>
+<a name="line-17"></a><font color=Blue>--   The methods 'toContents' and 'parseContents' convert a value to and from</font>
+<a name="line-18"></a><font color=Blue>--   a generic internal representation of an XML document /without/ a DTD.</font>
+<a name="line-19"></a><font color=Blue>--   The functions 'toXml' and 'fromXml' convert a value to and from a generic</font>
+<a name="line-20"></a><font color=Blue>--   internal representation of an XML document /including/ a DTD.</font>
+<a name="line-21"></a><font color=Blue>--   The functions 'readXml' and 'showXml' convert to and from Strings.</font>
+<a name="line-22"></a><font color=Blue>--   The functions 'fReadXml' and 'fWriteXml' do the conversion to and from</font>
+<a name="line-23"></a><font color=Blue>--   the given filenames.</font>
+<a name="line-24"></a><font color=Blue>--   The functions 'hGetXml' and 'hPutXml' do the conversion to and from</font>
+<a name="line-25"></a><font color=Blue>--   the given file handles.</font>
+<a name="line-26"></a><font color=Blue>--   (See the type signatures.)</font>
+<a name="line-27"></a><font color=Blue>--</font>
+<a name="line-28"></a>
+<a name="line-29"></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="line-30"></a>  <font color=Cyan>(</font> <font color=Blue>-- * Re-export the relevant set of generic XML document type definitions</font>
+<a name="line-31"></a>    Document<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-32"></a>  <font color=Cyan>,</font> Element<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-33"></a>  <font color=Cyan>,</font> ElemTag<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-34"></a>  <font color=Cyan>,</font> Content<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-35"></a>  <font color=Cyan>,</font> Attribute()
+<a name="line-36"></a>  <font color=Cyan>,</font> AttValue<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-37"></a>  <font color=Cyan>,</font> Prolog<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-38"></a>  <font color=Cyan>,</font> Reference<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-39"></a>  <font color=Blue>-- * The enabling classes, that define parsing\/unparsing between Haskell</font>
+<a name="line-40"></a>  <font color=Blue>--   datatypes and a generic XML representation.</font>
+<a name="line-41"></a>  <font color=Cyan>,</font> XmlContent<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-42"></a>  <font color=Cyan>,</font> XmlAttributes<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-43"></a>  <font color=Cyan>,</font> XmlAttrType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-44"></a>  <font color=Blue>-- ** Auxiliaries for writing parsers in the XmlContent class</font>
+<a name="line-45"></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="line-46"></a>  <font color=Cyan>,</font> XMLParser
+<a name="line-47"></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="line-48"></a>  <font color=Cyan>,</font> posnElementWith<font color=Cyan>,</font> elementWith<font color=Cyan>,</font> inElementWith
+<a name="line-49"></a>  <font color=Cyan>,</font> choice<font color=Cyan>,</font> definite <font color=Blue>-- ???</font>
+<a name="line-50"></a>  <font color=Blue>-- ** Auxiliaries for generating in the XmlContent class</font>
+<a name="line-51"></a>  <font color=Cyan>,</font> mkElem<font color=Cyan>,</font> mkElemC<font color=Cyan>,</font> mkAttr
+<a name="line-52"></a>  <font color=Cyan>,</font> toText<font color=Cyan>,</font> toCData
+<a name="line-53"></a>  <font color=Blue>-- ** Auxiliaries for the attribute-related classes</font>
+<a name="line-54"></a>  <font color=Cyan>,</font> maybeToAttr<font color=Cyan>,</font> defaultToAttr
+<a name="line-55"></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="line-56"></a>  <font color=Cyan>,</font> Defaultable<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-57"></a>  <font color=Cyan>,</font> str2attr<font color=Cyan>,</font> attr2str<font color=Cyan>,</font> attval
+<a name="line-58"></a>  <font color=Cyan>,</font> catMaybes   <font color=Blue>-- re-exported from Maybe</font>
+<a name="line-59"></a>  <font color=Blue>-- * Whole-document conversion functions</font>
+<a name="line-60"></a>  <font color=Cyan>,</font> toXml<font color=Cyan>,</font> fromXml
+<a name="line-61"></a>  <font color=Cyan>,</font> readXml<font color=Cyan>,</font> showXml<font color=Cyan>,</font> fpsShowXml
+<a name="line-62"></a>  <font color=Cyan>,</font> fReadXml<font color=Cyan>,</font> fWriteXml<font color=Cyan>,</font> fpsWriteXml
+<a name="line-63"></a>  <font color=Cyan>,</font> hGetXml<font color=Cyan>,</font>  hPutXml<font color=Cyan>,</font> fpsHPutXml
+<a name="line-64"></a>  <font color=Blue>-- * Explicit representation of Haskell datatype information</font>
+<a name="line-65"></a>  <font color=Blue>--   (for conversion to a DTD)</font>
+<a name="line-66"></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="line-67"></a>  <font color=Blue>-- * Types useful for some content models</font>
+<a name="line-68"></a>  <font color=Cyan>,</font> List1<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-69"></a>  <font color=Cyan>,</font> ANYContent<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-70"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-71"></a>
+<a name="line-72"></a><font color=Green><u>import</u></font> IO
+<a name="line-73"></a><font color=Green><u>import</u></font> Maybe <font color=Cyan>(</font>catMaybes<font color=Cyan>)</font>
+<a name="line-74"></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="line-75"></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="line-76"></a>
+<a name="line-77"></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="line-78"></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="line-79"></a>
+<a name="line-80"></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="line-81"></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="line-82"></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="line-83"></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="line-84"></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="line-85"></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="line-86"></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="line-87"></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="line-88"></a>
+<a name="line-89"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly
+<a name="line-90"></a>
+<a name="line-91"></a><font color=Blue>--  #define DEBUG</font>
+<a name="line-92"></a>
+<a name="line-93"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>
+<a name="line-94"></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="line-95"></a><a name="debug"></a><font color=Blue>debug</font> <font color=Red>::</font> a <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> a
+<a name="line-96"></a><a name="debug"></a><font color=Blue>v</font> <font color=Cyan>`debug`</font> s <font color=Red>=</font> trace s v
+<a name="line-97"></a><font color=Magenta><em>#else</em></font>
+<a name="line-98"></a><font color=Blue>debug</font> <font color=Red>::</font> t <font color=Red>-&gt;</font> t1 <font color=Red>-&gt;</font> t
+<a name="line-99"></a><a name="debug"></a><font color=Blue>v</font> <font color=Cyan>`debug`</font> <font color=Green><u>_</u></font> <font color=Red>=</font> v
+<a name="line-100"></a><font color=Magenta><em>#endif</em></font>
+<a name="line-101"></a>
+<a name="line-102"></a>
+<a name="line-103"></a><a name="attval"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-104"></a><font color=Blue>-- | Read a single attribute called "value".</font>
+<a name="line-105"></a><font color=Blue>attval</font> <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="line-106"></a><font color=Blue>attval</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>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="line-107"></a>
+<a name="line-108"></a><a name="mkAttr"></a><font color=Blue>-- | Generate a single attribute.</font>
+<a name="line-109"></a><font color=Blue>mkAttr</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Attribute
+<a name="line-110"></a><font color=Blue>mkAttr</font> 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="line-111"></a>
+<a name="line-112"></a><a name="mkElem"></a><font color=Blue>-- | Generate an element with no attributes, named for its HType.</font>
+<a name="line-113"></a><font color=Blue>mkElem</font> <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="line-114"></a><font color=Blue>mkElem</font> 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="line-115"></a>
+<a name="line-116"></a><a name="mkElemC"></a><font color=Blue>-- | Generate an element with no attributes, named directly.</font>
+<a name="line-117"></a><font color=Blue>mkElemC</font> <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="line-118"></a><font color=Blue>mkElemC</font> x cs <font color=Red>=</font> CElem <font color=Cyan>(</font>Elem x [] cs<font color=Cyan>)</font> ()
+<a name="line-119"></a>
+<a name="line-120"></a><a name="toText"></a><font color=Blue>-- | Turn a simple string into XML text.</font>
+<a name="line-121"></a><font color=Blue>toText</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>
+<a name="line-122"></a><font color=Blue>toText</font> s <font color=Red>=</font> <font color=Red>[</font>CString False s ()<font color=Red>]</font>
+<a name="line-123"></a>
+<a name="line-124"></a><a name="toCData"></a><font color=Blue>-- | Turn a string into an XML CDATA section.</font>
+<a name="line-125"></a><font color=Blue>--   (i.e. special characters like '&amp;' are preserved without interpretation.)</font>
+<a name="line-126"></a><font color=Blue>toCData</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>
+<a name="line-127"></a><font color=Blue>toCData</font> s <font color=Red>=</font> <font color=Red>[</font>CString True s ()<font color=Red>]</font>
+<a name="line-128"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-129"></a>
+<a name="line-130"></a>        <font color=Blue>-- probably want to write DTD separately from value, and have</font>
+<a name="line-131"></a>        <font color=Blue>-- easy ways to combine DTD + value into a document, or write</font>
+<a name="line-132"></a>        <font color=Blue>-- them to separate files.</font>
+<a name="line-133"></a>
+<a name="line-134"></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="line-135"></a><font color=Blue>--   Haskell value.</font>
+<a name="line-136"></a><font color=Blue>fReadXml</font>  <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> FilePath <font color=Red>-&gt;</font> IO a
+<a name="line-137"></a><font color=Blue>fReadXml</font> fp <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-138"></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="line-139"></a>           <font color=Green><u>else</u></font> openFile fp ReadMode <font color=Cyan>)</font>
+<a name="line-140"></a>    x <font color=Red>&lt;-</font> hGetContents f
+<a name="line-141"></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="line-142"></a>        y' <font color=Red>=</font> CElem y <font color=Cyan>(</font>posInNewCxt fp Nothing<font color=Cyan>)</font>
+<a name="line-143"></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="line-144"></a>
+<a name="line-145"></a><a name="fWriteXml"></a><font color=Blue>-- | Write a fully-typed Haskell value to the given file as an XML</font>
+<a name="line-146"></a><font color=Blue>--   document.</font>
+<a name="line-147"></a><font color=Blue>fWriteXml</font> <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="line-148"></a><font color=Blue>fWriteXml</font> fp x <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-149"></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="line-150"></a>           <font color=Green><u>else</u></font> openFile fp WriteMode <font color=Cyan>)</font>
+<a name="line-151"></a>    hPutXml f False x
+<a name="line-152"></a>    hClose f
+<a name="line-153"></a>
+<a name="line-154"></a><a name="fpsWriteXml"></a><font color=Blue>-- | Write any Haskell value to the given file as an XML document,</font>
+<a name="line-155"></a><font color=Blue>--   using the FastPackedString interface (output will not be prettified).</font>
+<a name="line-156"></a><font color=Blue>fpsWriteXml</font> <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="line-157"></a><font color=Blue>fpsWriteXml</font> fp x <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-158"></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="line-159"></a>           <font color=Green><u>else</u></font> openFile fp WriteMode <font color=Cyan>)</font>
+<a name="line-160"></a>    fpsHPutXml f False x
+<a name="line-161"></a>    hClose f
+<a name="line-162"></a>
+<a name="line-163"></a><a name="readXml"></a><font color=Blue>-- | Read a fully-typed XML document from a string.</font>
+<a name="line-164"></a><font color=Blue>readXml</font> <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> String <font color=Red>-&gt;</font> Either String a
+<a name="line-165"></a><font color=Blue>readXml</font> s <font color=Red>=</font>
+<a name="line-166"></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="line-167"></a>    fst <font color=Cyan>(</font>runParser parseContents
+<a name="line-168"></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="line-169"></a>
+<a name="line-170"></a><a name="showXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (without DTD).</font>
+<a name="line-171"></a><font color=Blue>showXml</font> <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="line-172"></a><font color=Blue>showXml</font> dtd x <font color=Red>=</font>
+<a name="line-173"></a>    <font color=Green><u>case</u></font> toContents x <font color=Green><u>of</u></font>
+<a name="line-174"></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="line-175"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Magenta>""</font>
+<a name="line-176"></a>
+<a name="line-177"></a><a name="fpsShowXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a ByteString (without DTD).</font>
+<a name="line-178"></a><font color=Blue>fpsShowXml</font> <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="line-179"></a><font color=Blue>fpsShowXml</font> dtd x <font color=Red>=</font>
+<a name="line-180"></a>    <font color=Green><u>case</u></font> toContents x <font color=Green><u>of</u></font>
+<a name="line-181"></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="line-182"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> FPS<font color=Cyan>.</font>empty
+<a name="line-183"></a>
+<a name="line-184"></a>
+<a name="line-185"></a><a name="toXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (with or without DTD).</font>
+<a name="line-186"></a><font color=Blue>toXml</font> <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="line-187"></a><font color=Blue>toXml</font> dtd value <font color=Red>=</font>
+<a name="line-188"></a>    <font color=Green><u>let</u></font> ht <font color=Red>=</font> toHType value <font color=Green><u>in</u></font>
+<a name="line-189"></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="line-190"></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="line-191"></a>             emptyST
+<a name="line-192"></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="line-193"></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="line-194"></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="line-195"></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="line-196"></a>             []
+<a name="line-197"></a>
+<a name="line-198"></a><a name="fromXml"></a><font color=Blue>-- | Read a Haskell value from an XML document, ignoring the DTD and</font>
+<a name="line-199"></a><font color=Blue>--   using the Haskell result type to determine how to parse it.</font>
+<a name="line-200"></a><font color=Blue>fromXml</font> <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Document Posn <font color=Red>-&gt;</font> Either String a
+<a name="line-201"></a><font color=Blue>fromXml</font> <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="line-202"></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="line-203"></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="line-204"></a>  <font color=Red>|</font> otherwise <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents
+<a name="line-205"></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="line-206"></a>
+<a name="line-207"></a>
+<a name="line-208"></a><a name="hGetXml"></a><font color=Blue>-- | Read a fully-typed XML document from a file handle.</font>
+<a name="line-209"></a><font color=Blue>hGetXml</font> <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Handle <font color=Red>-&gt;</font> IO a
+<a name="line-210"></a><font color=Blue>hGetXml</font> h <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-211"></a>    x <font color=Red>&lt;-</font> hGetContents h
+<a name="line-212"></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="line-213"></a>    either fail return
+<a name="line-214"></a>           <font color=Cyan>(</font>fst <font color=Cyan>(</font>runParser parseContents
+<a name="line-215"></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="line-216"></a>
+<a name="line-217"></a><a name="hPutXml"></a><font color=Blue>-- | Write a fully-typed XML document to a file handle.</font>
+<a name="line-218"></a><font color=Blue>hPutXml</font> <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="line-219"></a><font color=Blue>hPutXml</font> h dtd x <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-220"></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="line-221"></a>
+<a name="line-222"></a><a name="fpsHPutXml"></a><font color=Blue>-- | Write a fully-typed XML document to a file handle, using the</font>
+<a name="line-223"></a><font color=Blue>--   FastPackedString interface (output will not be prettified).</font>
+<a name="line-224"></a><font color=Blue>fpsHPutXml</font> <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="line-225"></a><font color=Blue>fpsHPutXml</font> h dtd x <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-226"></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="line-227"></a>
+<a name="line-228"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-229"></a>
+<a name="line-230"></a><a name="XMLParser"></a><font color=Blue>-- | We need a parsing monad for reading generic XML Content into specific</font>
+<a name="line-231"></a><a name="XMLParser"></a><font color=Blue>--   datatypes.  This is a specialisation of the Text.ParserCombinators.Poly</font>
+<a name="line-232"></a><a name="XMLParser"></a><font color=Blue>--   ones, where the input token type is fixed as XML Content.</font>
+<a name="line-233"></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="line-234"></a>
+<a name="line-235"></a>
+<a name="line-236"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-237"></a><font color=Blue>-- Some useful parsing combinators</font>
+<a name="line-238"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-239"></a>
+<a name="line-240"></a><a name="content"></a><font color=Blue>-- | The most primitive combinator for XMLParser - get one content item.</font>
+<a name="line-241"></a><font color=Blue>content</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font>
+<a name="line-242"></a><font color=Blue>content</font> 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="line-243"></a>
+<a name="line-244"></a><a name="posnElementWith"></a><font color=Blue>-- | Get the next content element, checking that it has one of the required</font>
+<a name="line-245"></a><font color=Blue>--   tags, using the given matching function.</font>
+<a name="line-246"></a><font color=Blue>--   (Skips over comments and whitespace, rejects text and refs.</font>
+<a name="line-247"></a><font color=Blue>--    Also returns position of element.)</font>
+<a name="line-248"></a><font color=Blue>posnElementWith</font> <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="line-249"></a>                   <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Posn<font color=Cyan>,</font> Element Posn<font color=Cyan>)</font>
+<a name="line-250"></a><font color=Blue>posnElementWith</font> match tags <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-251"></a>    <font color=Cyan>{</font> c <font color=Red>&lt;-</font> content <font color=Cyan>(</font>formatted tags<font color=Cyan>)</font>
+<a name="line-252"></a>    <font color=Cyan>;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>
+<a name="line-253"></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="line-254"></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="line-255"></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="line-256"></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="line-257"></a>          CString b s pos
+<a name="line-258"></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="line-259"></a>                                                        <font color=Blue>-- ignore blank space</font>
+<a name="line-260"></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="line-261"></a>                                  <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\ntext is: "</font><font color=Cyan>++</font>s
+<a name="line-262"></a>                                  <font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>
+<a name="line-263"></a>          CRef r pos <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Found reference, but expected "</font>
+<a name="line-264"></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="line-265"></a>                             <font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>
+<a name="line-266"></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="line-267"></a>    <font color=Cyan>}</font>
+<a name="line-268"></a>  <font color=Green><u>where</u></font>
+<a name="line-269"></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="line-270"></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="line-271"></a>
+<a name="line-272"></a><a name="posnElement"></a><font color=Blue>-- | A specialisation of @posnElementWith (==)@.</font>
+<a name="line-273"></a><font color=Blue>posnElement</font> <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="line-274"></a><font color=Blue>posnElement</font> <font color=Red>=</font> posnElementWith <font color=Cyan>(</font><font color=Cyan>==</font><font color=Cyan>)</font>
+<a name="line-275"></a>
+<a name="line-276"></a><a name="element"></a><font color=Blue>-- | Get the next content element, checking that it has one of the required</font>
+<a name="line-277"></a><font color=Blue>--   tags.  (Skips over comments and whitespace, rejects text and refs.)</font>
+<a name="line-278"></a><font color=Blue>element</font> <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="line-279"></a><font color=Blue>element</font> tags <font color=Red>=</font> fmap snd <font color=Cyan>(</font>posnElement tags<font color=Cyan>)</font>
+<a name="line-280"></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="line-281"></a>
+<a name="line-282"></a><a name="elementWith"></a><font color=Blue>-- | Like element, only permits a more flexible match against the tagname.</font>
+<a name="line-283"></a><font color=Blue>elementWith</font> <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="line-284"></a><font color=Blue>elementWith</font> match tags <font color=Red>=</font> fmap snd <font color=Cyan>(</font>posnElementWith match tags<font color=Cyan>)</font>
+<a name="line-285"></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="line-286"></a>
+<a name="line-287"></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="line-288"></a><font color=Blue>--   current monadic content sequence), checking that the contents are</font>
+<a name="line-289"></a><font color=Blue>--   exhausted, before returning the calculated value within the current</font>
+<a name="line-290"></a><font color=Blue>--   parser context.</font>
+<a name="line-291"></a><font color=Blue>interior</font> <font color=Red>::</font> Element Posn <font color=Red>-&gt;</font> XMLParser a <font color=Red>-&gt;</font> XMLParser a
+<a name="line-292"></a><font color=Blue>interior</font> <font color=Cyan>(</font>Elem e <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> p <font color=Red>=</font>
+<a name="line-293"></a>    <font color=Green><u>case</u></font> runParser p cs <font color=Green><u>of</u></font>
+<a name="line-294"></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="line-295"></a>        <font color=Cyan>(</font>Right x<font color=Cyan>,</font> []<font color=Cyan>)</font> <font color=Red>-&gt;</font> return x
+<a name="line-296"></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="line-297"></a>            <font color=Red>|</font> all onlyMisc ds <font color=Red>-&gt;</font> return x
+<a name="line-298"></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="line-299"></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="line-300"></a>                                      <font color=Cyan>++</font><font color=Magenta>"Found excess: "</font><font color=Cyan>++</font>verbatim d<font color=Cyan>)</font>
+<a name="line-301"></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="line-302"></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="line-303"></a>        onlyMisc <font color=Green><u>_</u></font> <font color=Red>=</font> False
+<a name="line-304"></a>
+<a name="line-305"></a><a name="inElement"></a><font color=Blue>-- | A combination of element + interior.</font>
+<a name="line-306"></a><font color=Blue>inElement</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> XMLParser a <font color=Red>-&gt;</font> XMLParser a
+<a name="line-307"></a><font color=Blue>inElement</font> 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="line-308"></a>
+<a name="line-309"></a><a name="inElementWith"></a><font color=Blue>-- | A combination of elementWith + interior.</font>
+<a name="line-310"></a><font color=Blue>inElementWith</font> <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="line-311"></a><font color=Blue>inElementWith</font> 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="line-312"></a>                               <font color=Cyan>;</font> commit <font color=Cyan>(</font>interior e p<font color=Cyan>)</font> <font color=Cyan>}</font>
+<a name="line-313"></a>
+<a name="line-314"></a><a name="attributes"></a><font color=Blue>-- | Do some parsing of the attributes of the given element</font>
+<a name="line-315"></a><font color=Blue>attributes</font> <font color=Red>::</font> XmlAttributes a <font color=Red>=&gt;</font> Element Posn <font color=Red>-&gt;</font> XMLParser a
+<a name="line-316"></a><font color=Blue>attributes</font> <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="line-317"></a>
+<a name="line-318"></a><a name="text"></a><font color=Blue>-- | 'text' is a counterpart to 'element', parsing text content if it</font>
+<a name="line-319"></a><font color=Blue>--   exists.  Adjacent text and references are coalesced.</font>
+<a name="line-320"></a><font color=Blue>text</font> <font color=Red>::</font> XMLParser String
+<a name="line-321"></a><font color=Blue>text</font> <font color=Red>=</font> text' []
+<a name="line-322"></a>  <font color=Green><u>where</u></font> text' acc <font color=Red>=</font>
+<a name="line-323"></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="line-324"></a>             <font color=Cyan>;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>
+<a name="line-325"></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="line-326"></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="line-327"></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="line-328"></a>                 CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font>            <font color=Red>-&gt;</font> text' acc
+<a name="line-329"></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="line-330"></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="line-331"></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="line-332"></a>                                         <font color=Cyan>}</font>
+<a name="line-333"></a>             <font color=Cyan>}</font>
+<a name="line-334"></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="line-335"></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="line-336"></a>
+<a name="line-337"></a>
+<a name="line-338"></a><a name="choice"></a><font color=Blue>-- | 'choice f p' means if parseContents succeeds, apply f to the result,</font>
+<a name="line-339"></a><font color=Blue>--   otherwise use the continuation parser.</font>
+<a name="line-340"></a><font color=Blue>choice</font> <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="line-341"></a><font color=Blue>choice</font> cons <font color=Cyan>(</font>P other<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-342"></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="line-343"></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="line-344"></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="line-345"></a>
+<a name="line-346"></a><font color=Blue>--choice cons other = fmap cons parseContents `onFail` other</font>
+<a name="line-347"></a>
+<a name="line-348"></a><a name="definite"></a><font color=Blue>-- | not sure this is needed now.   'definite p' previously ensured that</font>
+<a name="line-349"></a><font color=Blue>--   an element was definitely present.  Now I think the monad might take</font>
+<a name="line-350"></a><font color=Blue>--   care of that for us.</font>
+<a name="line-351"></a><font color=Blue>definite</font> <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="line-352"></a><font color=Blue>definite</font> 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="line-353"></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="line-354"></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="line-355"></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="line-356"></a>               <font color=Cyan>++</font><font color=Magenta>"&gt; element\n"</font>
+<a name="line-357"></a>
+<a name="line-358"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-359"></a>
+<a name="line-360"></a><a name="XmlContent"></a><font color=Blue>-- | The @XmlContent@ class promises that an XML Content element can be</font>
+<a name="line-361"></a><a name="XmlContent"></a><font color=Blue>--   converted to and from a Haskell value.</font>
+<a name="line-362"></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="line-363"></a>    <font color=Blue>-- | Convert from XML to Haskell</font>
+<a name="line-364"></a>    parseContents <font color=Red>::</font> XMLParser a
+<a name="line-365"></a>    <font color=Blue>-- | Convert from Haskell to XML</font>
+<a name="line-366"></a>    toContents    <font color=Red>::</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>
+<a name="line-367"></a>
+<a name="line-368"></a>    <font color=Blue>-- | Dummy functions (for most types): used /only/ in the Char instance</font>
+<a name="line-369"></a>    <font color=Blue>--   for coercing lists of Char into String.</font>
+<a name="line-370"></a>    xToChar       <font color=Red>::</font> a <font color=Red>-&gt;</font> Char
+<a name="line-371"></a>    xFromChar     <font color=Red>::</font> Char <font color=Red>-&gt;</font> a
+<a name="line-372"></a>    xToChar        <font color=Red>=</font> error <font color=Magenta>"HaXml.XmlContent.xToChar used in error"</font>
+<a name="line-373"></a>    xFromChar      <font color=Red>=</font> error <font color=Magenta>"HaXml.XmlContent.xFromChar used in error"</font>
+<a name="line-374"></a>
+<a name="line-375"></a><a name="XmlAttributes"></a><font color=Blue>-- | The @XmlAttributes@ class promises that a list of XML tag attributes</font>
+<a name="line-376"></a><a name="XmlAttributes"></a><font color=Blue>--   can be converted to and from a Haskell value.</font>
+<a name="line-377"></a><a name="XmlAttributes"></a><font color=Green><u>class</u></font> XmlAttributes a <font color=Green><u>where</u></font>
+<a name="line-378"></a>    fromAttrs <font color=Red>::</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> a
+<a name="line-379"></a>    toAttrs   <font color=Red>::</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font>
+<a name="line-380"></a><a name="XmlAttrType"></a><font color=Blue>-- | The @XmlAttrType@ class promises that an attribute taking an XML</font>
+<a name="line-381"></a><a name="XmlAttrType"></a><font color=Blue>--   enumerated type can be converted to and from a Haskell value.</font>
+<a name="line-382"></a><a name="XmlAttrType"></a><font color=Green><u>class</u></font> XmlAttrType a <font color=Green><u>where</u></font>
+<a name="line-383"></a>    fromAttrToTyp <font color=Red>::</font> String <font color=Red>-&gt;</font> Attribute <font color=Red>-&gt;</font> Maybe a
+<a name="line-384"></a>    toAttrFrTyp   <font color=Red>::</font> String <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Maybe Attribute
+<a name="line-385"></a>
+<a name="line-386"></a>
+<a name="line-387"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-388"></a><font color=Blue>-- Instances for all the standard basic datatypes.</font>
+<a name="line-389"></a><font color=Blue>-- These are for Haskell datatypes being derived to go to XML.</font>
+<a name="line-390"></a><font color=Blue>-- DtdToHaskell does not use these instances.</font>
+<a name="line-391"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-392"></a>
+<a name="line-393"></a><font color=Green><u>instance</u></font> XmlContent Bool <font color=Green><u>where</u></font>
+<a name="line-394"></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="line-395"></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="line-396"></a>
+<a name="line-397"></a><font color=Green><u>instance</u></font> XmlContent Int <font color=Green><u>where</u></font>
+<a name="line-398"></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="line-399"></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="line-400"></a>
+<a name="line-401"></a><font color=Green><u>instance</u></font> XmlContent Integer <font color=Green><u>where</u></font>
+<a name="line-402"></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="line-403"></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="line-404"></a>
+<a name="line-405"></a><font color=Green><u>instance</u></font> XmlContent Float <font color=Green><u>where</u></font>
+<a name="line-406"></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="line-407"></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="line-408"></a>
+<a name="line-409"></a><font color=Green><u>instance</u></font> XmlContent Double <font color=Green><u>where</u></font>
+<a name="line-410"></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="line-411"></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="line-412"></a>
+<a name="line-413"></a><font color=Green><u>instance</u></font> XmlContent Char <font color=Green><u>where</u></font>
+<a name="line-414"></a>    <font color=Blue>-- NOT in a string</font>
+<a name="line-415"></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="line-416"></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="line-417"></a>                             <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"char"</font><font color=Red>]</font>
+<a name="line-418"></a>                       <font color=Cyan>;</font> return c
+<a name="line-419"></a>                       <font color=Cyan>}</font>
+<a name="line-420"></a>    <font color=Blue>-- Only defined for Char and no other types:</font>
+<a name="line-421"></a>    xToChar   <font color=Red>=</font> id
+<a name="line-422"></a>    xFromChar <font color=Red>=</font> id
+<a name="line-423"></a>
+<a name="line-424"></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="line-425"></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="line-426"></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="line-427"></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="line-428"></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="line-429"></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="line-430"></a>    parseContents <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>x <font color=Red>-&gt;</font>
+<a name="line-431"></a>        <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>
+<a name="line-432"></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="line-433"></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="line-434"></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="line-435"></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="line-436"></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="line-437"></a>                   <font color=Red>-&gt;</font> scanElements xs
+<a name="line-438"></a>                   <font color=Green><u>where</u></font>
+<a name="line-439"></a>                  <font color=Blue>-- scanElements :: [Content] -&gt; (Either String [a],[Content])</font>
+<a name="line-440"></a>                     scanElements [] <font color=Red>=</font> <font color=Cyan>(</font>Right []<font color=Cyan>,</font> cs<font color=Cyan>)</font>
+<a name="line-441"></a>                     scanElements es <font color=Red>=</font>
+<a name="line-442"></a>                        <font color=Green><u>case</u></font> runParser parseContents es <font color=Green><u>of</u></font>
+<a name="line-443"></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="line-444"></a>                            <font color=Cyan>(</font>Right y<font color=Cyan>,</font> es'<font color=Cyan>)</font> <font color=Red>-&gt;</font>
+<a name="line-445"></a>                                <font color=Green><u>case</u></font> scanElements es' <font color=Green><u>of</u></font>
+<a name="line-446"></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="line-447"></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="line-448"></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="line-449"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False
+<a name="line-450"></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="line-451"></a>                            <font color=Cyan>++</font> show pos<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>
+<a name="line-452"></a>            <font color=Cyan>(</font>CRef r pos<font color=Red><b>:</b></font> cs<font color=Cyan>)</font>
+<a name="line-453"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False
+<a name="line-454"></a>                            <font color=Cyan>,</font><font color=Magenta>"Expected a &lt;list-...&gt;, but found a ref "</font>
+<a name="line-455"></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="line-456"></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="line-457"></a>            []     <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False
+<a name="line-458"></a>                            <font color=Cyan>,</font><font color=Magenta>"Ran out of input XML whilst secondary parsing"</font><font color=Cyan>)</font>
+<a name="line-459"></a>                      <font color=Cyan>,</font> []<font color=Cyan>)</font>
+<a name="line-460"></a>        <font color=Cyan>)</font>
+<a name="line-461"></a>
+<a name="line-462"></a><font color=Green><u>instance</u></font> XmlContent () <font color=Green><u>where</u></font>
+<a name="line-463"></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="line-464"></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="line-465"></a>
+<a name="line-466"></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="line-467"></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="line-468"></a>    parseContents    <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-469"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="line-470"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="line-471"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font>
+<a name="line-472"></a>        <font color=Cyan>}</font>
+<a name="line-473"></a>
+<a name="line-474"></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="line-475"></a>    toContents <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b <font color=Cyan>++</font> toContents c
+<a name="line-476"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-477"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="line-478"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="line-479"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="line-480"></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="line-481"></a>        <font color=Cyan>}</font>
+<a name="line-482"></a>
+<a name="line-483"></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="line-484"></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="line-485"></a>    toContents <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> toContents a <font color=Cyan>++</font> toContents b <font color=Cyan>++</font> toContents c
+<a name="line-486"></a>                           <font color=Cyan>++</font> toContents d
+<a name="line-487"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-488"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="line-489"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="line-490"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="line-491"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="line-492"></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="line-493"></a>        <font color=Cyan>}</font>
+<a name="line-494"></a>
+<a name="line-495"></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="line-496"></a>         <font color=Cyan>,</font> XmlContent e <font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-497"></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="line-498"></a>    toContents <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> toContents a <font color=Cyan>++</font> toContents b <font color=Cyan>++</font> toContents c
+<a name="line-499"></a>                             <font color=Cyan>++</font> toContents d <font color=Cyan>++</font> toContents e
+<a name="line-500"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-501"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="line-502"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="line-503"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="line-504"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="line-505"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents
+<a name="line-506"></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="line-507"></a>        <font color=Cyan>}</font>
+<a name="line-508"></a>
+<a name="line-509"></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="line-510"></a>         <font color=Cyan>,</font> XmlContent e<font color=Cyan>,</font> XmlContent f <font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-511"></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="line-512"></a>    toContents <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> toContents a <font color=Cyan>++</font> toContents b <font color=Cyan>++</font> toContents c
+<a name="line-513"></a>                               <font color=Cyan>++</font> toContents d <font color=Cyan>++</font> toContents e <font color=Cyan>++</font> toContents f
+<a name="line-514"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-515"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="line-516"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="line-517"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="line-518"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="line-519"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents
+<a name="line-520"></a>        <font color=Cyan>;</font> f <font color=Red>&lt;-</font> parseContents
+<a name="line-521"></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="line-522"></a>        <font color=Cyan>}</font>
+<a name="line-523"></a>
+<a name="line-524"></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="line-525"></a>         <font color=Cyan>,</font> XmlContent e<font color=Cyan>,</font> XmlContent f<font color=Cyan>,</font> XmlContent g <font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-526"></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>g<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-527"></a>    toContents <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>g<font color=Cyan>)</font>
+<a name="line-528"></a>        <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b <font color=Cyan>++</font> toContents c <font color=Cyan>++</font> toContents d
+<a name="line-529"></a>          <font color=Cyan>++</font> toContents e <font color=Cyan>++</font> toContents f <font color=Cyan>++</font> toContents g
+<a name="line-530"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-531"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="line-532"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="line-533"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="line-534"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="line-535"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents
+<a name="line-536"></a>        <font color=Cyan>;</font> f <font color=Red>&lt;-</font> parseContents
+<a name="line-537"></a>        <font color=Cyan>;</font> g <font color=Red>&lt;-</font> parseContents
+<a name="line-538"></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>g<font color=Cyan>)</font>
+<a name="line-539"></a>        <font color=Cyan>}</font>
+<a name="line-540"></a>
+<a name="line-541"></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="line-542"></a>         <font color=Cyan>,</font> XmlContent e<font color=Cyan>,</font> XmlContent f<font color=Cyan>,</font> XmlContent g<font color=Cyan>,</font> XmlContent h <font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-543"></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>g<font color=Cyan>,</font>h<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-544"></a>    toContents <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>g<font color=Cyan>,</font>h<font color=Cyan>)</font>
+<a name="line-545"></a>        <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b <font color=Cyan>++</font> toContents c <font color=Cyan>++</font> toContents d
+<a name="line-546"></a>          <font color=Cyan>++</font> toContents e <font color=Cyan>++</font> toContents f <font color=Cyan>++</font> toContents g <font color=Cyan>++</font> toContents h
+<a name="line-547"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-548"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="line-549"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="line-550"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="line-551"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="line-552"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents
+<a name="line-553"></a>        <font color=Cyan>;</font> f <font color=Red>&lt;-</font> parseContents
+<a name="line-554"></a>        <font color=Cyan>;</font> g <font color=Red>&lt;-</font> parseContents
+<a name="line-555"></a>        <font color=Cyan>;</font> h <font color=Red>&lt;-</font> parseContents
+<a name="line-556"></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>g<font color=Cyan>,</font>h<font color=Cyan>)</font>
+<a name="line-557"></a>        <font color=Cyan>}</font>
+<a name="line-558"></a>
+<a name="line-559"></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="line-560"></a>         <font color=Cyan>,</font> XmlContent e<font color=Cyan>,</font> XmlContent f<font color=Cyan>,</font> XmlContent g<font color=Cyan>,</font> XmlContent h
+<a name="line-561"></a>         <font color=Cyan>,</font> XmlContent i <font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-562"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-563"></a>    toContents <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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>)</font>
+<a name="line-564"></a>        <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b <font color=Cyan>++</font> toContents c <font color=Cyan>++</font> toContents d
+<a name="line-565"></a>          <font color=Cyan>++</font> toContents e <font color=Cyan>++</font> toContents f <font color=Cyan>++</font> toContents g <font color=Cyan>++</font> toContents h
+<a name="line-566"></a>          <font color=Cyan>++</font> toContents i
+<a name="line-567"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-568"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="line-569"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="line-570"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="line-571"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="line-572"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents
+<a name="line-573"></a>        <font color=Cyan>;</font> f <font color=Red>&lt;-</font> parseContents
+<a name="line-574"></a>        <font color=Cyan>;</font> g <font color=Red>&lt;-</font> parseContents
+<a name="line-575"></a>        <font color=Cyan>;</font> h <font color=Red>&lt;-</font> parseContents
+<a name="line-576"></a>        <font color=Cyan>;</font> i <font color=Red>&lt;-</font> parseContents
+<a name="line-577"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>)</font>
+<a name="line-578"></a>        <font color=Cyan>}</font>
+<a name="line-579"></a>
+<a name="line-580"></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="line-581"></a>         <font color=Cyan>,</font> XmlContent e<font color=Cyan>,</font> XmlContent f<font color=Cyan>,</font> XmlContent g<font color=Cyan>,</font> XmlContent h
+<a name="line-582"></a>         <font color=Cyan>,</font> XmlContent i<font color=Cyan>,</font> XmlContent j <font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-583"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-584"></a>    toContents <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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>)</font>
+<a name="line-585"></a>        <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b <font color=Cyan>++</font> toContents c <font color=Cyan>++</font> toContents d
+<a name="line-586"></a>          <font color=Cyan>++</font> toContents e <font color=Cyan>++</font> toContents f <font color=Cyan>++</font> toContents g <font color=Cyan>++</font> toContents h
+<a name="line-587"></a>          <font color=Cyan>++</font> toContents i <font color=Cyan>++</font> toContents j
+<a name="line-588"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-589"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="line-590"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="line-591"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="line-592"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="line-593"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents
+<a name="line-594"></a>        <font color=Cyan>;</font> f <font color=Red>&lt;-</font> parseContents
+<a name="line-595"></a>        <font color=Cyan>;</font> g <font color=Red>&lt;-</font> parseContents
+<a name="line-596"></a>        <font color=Cyan>;</font> h <font color=Red>&lt;-</font> parseContents
+<a name="line-597"></a>        <font color=Cyan>;</font> i <font color=Red>&lt;-</font> parseContents
+<a name="line-598"></a>        <font color=Cyan>;</font> j <font color=Red>&lt;-</font> parseContents
+<a name="line-599"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>)</font>
+<a name="line-600"></a>        <font color=Cyan>}</font>
+<a name="line-601"></a>
+<a name="line-602"></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="line-603"></a>         <font color=Cyan>,</font> XmlContent e<font color=Cyan>,</font> XmlContent f<font color=Cyan>,</font> XmlContent g<font color=Cyan>,</font> XmlContent h
+<a name="line-604"></a>         <font color=Cyan>,</font> XmlContent i<font color=Cyan>,</font> XmlContent j<font color=Cyan>,</font> XmlContent k <font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-605"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-606"></a>    toContents <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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>)</font>
+<a name="line-607"></a>        <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b <font color=Cyan>++</font> toContents c <font color=Cyan>++</font> toContents d
+<a name="line-608"></a>          <font color=Cyan>++</font> toContents e <font color=Cyan>++</font> toContents f <font color=Cyan>++</font> toContents g <font color=Cyan>++</font> toContents h
+<a name="line-609"></a>          <font color=Cyan>++</font> toContents i <font color=Cyan>++</font> toContents j <font color=Cyan>++</font> toContents k
+<a name="line-610"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-611"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="line-612"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="line-613"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="line-614"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="line-615"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents
+<a name="line-616"></a>        <font color=Cyan>;</font> f <font color=Red>&lt;-</font> parseContents
+<a name="line-617"></a>        <font color=Cyan>;</font> g <font color=Red>&lt;-</font> parseContents
+<a name="line-618"></a>        <font color=Cyan>;</font> h <font color=Red>&lt;-</font> parseContents
+<a name="line-619"></a>        <font color=Cyan>;</font> i <font color=Red>&lt;-</font> parseContents
+<a name="line-620"></a>        <font color=Cyan>;</font> j <font color=Red>&lt;-</font> parseContents
+<a name="line-621"></a>        <font color=Cyan>;</font> k <font color=Red>&lt;-</font> parseContents
+<a name="line-622"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>)</font>
+<a name="line-623"></a>        <font color=Cyan>}</font>
+<a name="line-624"></a>
+<a name="line-625"></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="line-626"></a>         <font color=Cyan>,</font> XmlContent e<font color=Cyan>,</font> XmlContent f<font color=Cyan>,</font> XmlContent g<font color=Cyan>,</font> XmlContent h
+<a name="line-627"></a>         <font color=Cyan>,</font> XmlContent i<font color=Cyan>,</font> XmlContent j<font color=Cyan>,</font> XmlContent k<font color=Cyan>,</font> XmlContent l <font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-628"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-629"></a>    toContents <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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>)</font>
+<a name="line-630"></a>        <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b <font color=Cyan>++</font> toContents c <font color=Cyan>++</font> toContents d
+<a name="line-631"></a>          <font color=Cyan>++</font> toContents e <font color=Cyan>++</font> toContents f <font color=Cyan>++</font> toContents g <font color=Cyan>++</font> toContents h
+<a name="line-632"></a>          <font color=Cyan>++</font> toContents i <font color=Cyan>++</font> toContents j <font color=Cyan>++</font> toContents k <font color=Cyan>++</font> toContents l
+<a name="line-633"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-634"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="line-635"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="line-636"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="line-637"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="line-638"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents
+<a name="line-639"></a>        <font color=Cyan>;</font> f <font color=Red>&lt;-</font> parseContents
+<a name="line-640"></a>        <font color=Cyan>;</font> g <font color=Red>&lt;-</font> parseContents
+<a name="line-641"></a>        <font color=Cyan>;</font> h <font color=Red>&lt;-</font> parseContents
+<a name="line-642"></a>        <font color=Cyan>;</font> i <font color=Red>&lt;-</font> parseContents
+<a name="line-643"></a>        <font color=Cyan>;</font> j <font color=Red>&lt;-</font> parseContents
+<a name="line-644"></a>        <font color=Cyan>;</font> k <font color=Red>&lt;-</font> parseContents
+<a name="line-645"></a>        <font color=Cyan>;</font> l <font color=Red>&lt;-</font> parseContents
+<a name="line-646"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>)</font>
+<a name="line-647"></a>        <font color=Cyan>}</font>
+<a name="line-648"></a>
+<a name="line-649"></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="line-650"></a>         <font color=Cyan>,</font> XmlContent e<font color=Cyan>,</font> XmlContent f<font color=Cyan>,</font> XmlContent g<font color=Cyan>,</font> XmlContent h
+<a name="line-651"></a>         <font color=Cyan>,</font> XmlContent i<font color=Cyan>,</font> XmlContent j<font color=Cyan>,</font> XmlContent k<font color=Cyan>,</font> XmlContent l
+<a name="line-652"></a>         <font color=Cyan>,</font> XmlContent m <font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-653"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-654"></a>    toContents <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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>)</font>
+<a name="line-655"></a>        <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b <font color=Cyan>++</font> toContents c <font color=Cyan>++</font> toContents d
+<a name="line-656"></a>          <font color=Cyan>++</font> toContents e <font color=Cyan>++</font> toContents f <font color=Cyan>++</font> toContents g <font color=Cyan>++</font> toContents h
+<a name="line-657"></a>          <font color=Cyan>++</font> toContents i <font color=Cyan>++</font> toContents j <font color=Cyan>++</font> toContents k <font color=Cyan>++</font> toContents l
+<a name="line-658"></a>          <font color=Cyan>++</font> toContents m
+<a name="line-659"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-660"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="line-661"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="line-662"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="line-663"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="line-664"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents
+<a name="line-665"></a>        <font color=Cyan>;</font> f <font color=Red>&lt;-</font> parseContents
+<a name="line-666"></a>        <font color=Cyan>;</font> g <font color=Red>&lt;-</font> parseContents
+<a name="line-667"></a>        <font color=Cyan>;</font> h <font color=Red>&lt;-</font> parseContents
+<a name="line-668"></a>        <font color=Cyan>;</font> i <font color=Red>&lt;-</font> parseContents
+<a name="line-669"></a>        <font color=Cyan>;</font> j <font color=Red>&lt;-</font> parseContents
+<a name="line-670"></a>        <font color=Cyan>;</font> k <font color=Red>&lt;-</font> parseContents
+<a name="line-671"></a>        <font color=Cyan>;</font> l <font color=Red>&lt;-</font> parseContents
+<a name="line-672"></a>        <font color=Cyan>;</font> m <font color=Red>&lt;-</font> parseContents
+<a name="line-673"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>)</font>
+<a name="line-674"></a>        <font color=Cyan>}</font>
+<a name="line-675"></a>
+<a name="line-676"></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="line-677"></a>         <font color=Cyan>,</font> XmlContent e<font color=Cyan>,</font> XmlContent f<font color=Cyan>,</font> XmlContent g<font color=Cyan>,</font> XmlContent h
+<a name="line-678"></a>         <font color=Cyan>,</font> XmlContent i<font color=Cyan>,</font> XmlContent j<font color=Cyan>,</font> XmlContent k<font color=Cyan>,</font> XmlContent l
+<a name="line-679"></a>         <font color=Cyan>,</font> XmlContent m<font color=Cyan>,</font> XmlContent n <font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-680"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>,</font>n<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-681"></a>    toContents <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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>,</font>n<font color=Cyan>)</font>
+<a name="line-682"></a>        <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b <font color=Cyan>++</font> toContents c <font color=Cyan>++</font> toContents d
+<a name="line-683"></a>          <font color=Cyan>++</font> toContents e <font color=Cyan>++</font> toContents f <font color=Cyan>++</font> toContents g <font color=Cyan>++</font> toContents h
+<a name="line-684"></a>          <font color=Cyan>++</font> toContents i <font color=Cyan>++</font> toContents j <font color=Cyan>++</font> toContents k <font color=Cyan>++</font> toContents l
+<a name="line-685"></a>          <font color=Cyan>++</font> toContents m <font color=Cyan>++</font> toContents n
+<a name="line-686"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-687"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="line-688"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="line-689"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="line-690"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="line-691"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents
+<a name="line-692"></a>        <font color=Cyan>;</font> f <font color=Red>&lt;-</font> parseContents
+<a name="line-693"></a>        <font color=Cyan>;</font> g <font color=Red>&lt;-</font> parseContents
+<a name="line-694"></a>        <font color=Cyan>;</font> h <font color=Red>&lt;-</font> parseContents
+<a name="line-695"></a>        <font color=Cyan>;</font> i <font color=Red>&lt;-</font> parseContents
+<a name="line-696"></a>        <font color=Cyan>;</font> j <font color=Red>&lt;-</font> parseContents
+<a name="line-697"></a>        <font color=Cyan>;</font> k <font color=Red>&lt;-</font> parseContents
+<a name="line-698"></a>        <font color=Cyan>;</font> l <font color=Red>&lt;-</font> parseContents
+<a name="line-699"></a>        <font color=Cyan>;</font> m <font color=Red>&lt;-</font> parseContents
+<a name="line-700"></a>        <font color=Cyan>;</font> n <font color=Red>&lt;-</font> parseContents
+<a name="line-701"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>,</font>n<font color=Cyan>)</font>
+<a name="line-702"></a>        <font color=Cyan>}</font>
+<a name="line-703"></a>
+<a name="line-704"></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="line-705"></a>         <font color=Cyan>,</font> XmlContent e<font color=Cyan>,</font> XmlContent f<font color=Cyan>,</font> XmlContent g<font color=Cyan>,</font> XmlContent h
+<a name="line-706"></a>         <font color=Cyan>,</font> XmlContent i<font color=Cyan>,</font> XmlContent j<font color=Cyan>,</font> XmlContent k<font color=Cyan>,</font> XmlContent l
+<a name="line-707"></a>         <font color=Cyan>,</font> XmlContent m<font color=Cyan>,</font> XmlContent n<font color=Cyan>,</font> XmlContent o <font color=Cyan>)</font> <font color=Red>=&gt;</font>
+<a name="line-708"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>,</font>n<font color=Cyan>,</font>o<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-709"></a>    toContents <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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>,</font>n<font color=Cyan>,</font>o<font color=Cyan>)</font>
+<a name="line-710"></a>        <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b <font color=Cyan>++</font> toContents c <font color=Cyan>++</font> toContents d
+<a name="line-711"></a>          <font color=Cyan>++</font> toContents e <font color=Cyan>++</font> toContents f <font color=Cyan>++</font> toContents g <font color=Cyan>++</font> toContents h
+<a name="line-712"></a>          <font color=Cyan>++</font> toContents i <font color=Cyan>++</font> toContents j <font color=Cyan>++</font> toContents k <font color=Cyan>++</font> toContents l
+<a name="line-713"></a>          <font color=Cyan>++</font> toContents m <font color=Cyan>++</font> toContents n <font color=Cyan>++</font> toContents o
+<a name="line-714"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-715"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents
+<a name="line-716"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents
+<a name="line-717"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents
+<a name="line-718"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents
+<a name="line-719"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents
+<a name="line-720"></a>        <font color=Cyan>;</font> f <font color=Red>&lt;-</font> parseContents
+<a name="line-721"></a>        <font color=Cyan>;</font> g <font color=Red>&lt;-</font> parseContents
+<a name="line-722"></a>        <font color=Cyan>;</font> h <font color=Red>&lt;-</font> parseContents
+<a name="line-723"></a>        <font color=Cyan>;</font> i <font color=Red>&lt;-</font> parseContents
+<a name="line-724"></a>        <font color=Cyan>;</font> j <font color=Red>&lt;-</font> parseContents
+<a name="line-725"></a>        <font color=Cyan>;</font> k <font color=Red>&lt;-</font> parseContents
+<a name="line-726"></a>        <font color=Cyan>;</font> l <font color=Red>&lt;-</font> parseContents
+<a name="line-727"></a>        <font color=Cyan>;</font> m <font color=Red>&lt;-</font> parseContents
+<a name="line-728"></a>        <font color=Cyan>;</font> n <font color=Red>&lt;-</font> parseContents
+<a name="line-729"></a>        <font color=Cyan>;</font> o <font color=Red>&lt;-</font> parseContents
+<a name="line-730"></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>g<font color=Cyan>,</font>h<font color=Cyan>,</font>i<font color=Cyan>,</font>j<font color=Cyan>,</font>k<font color=Cyan>,</font>l<font color=Cyan>,</font>m<font color=Cyan>,</font>n<font color=Cyan>,</font>o<font color=Cyan>)</font>
+<a name="line-731"></a>        <font color=Cyan>}</font>
+<a name="line-732"></a>
+<a name="line-733"></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="line-734"></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="line-735"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>
+<a name="line-736"></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="line-737"></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="line-738"></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="line-739"></a>        <font color=Cyan>}</font>
+<a name="line-740"></a>
+<a name="line-741"></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="line-742"></a>    toContents v<font color=Red>@</font><font color=Cyan>(</font>Left aa<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-743"></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="line-744"></a>    toContents v<font color=Red>@</font><font color=Cyan>(</font>Right ab<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-745"></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="line-746"></a>    parseContents <font color=Red>=</font>
+<a name="line-747"></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="line-748"></a>          <font color=Cyan>`onFail`</font>
+<a name="line-749"></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="line-750"></a>
+<a name="line-751"></a><font color=Blue>--    do{ e@(Elem t [] _) &lt;- element ["Left","Right"]</font>
+<a name="line-752"></a><font color=Blue>--      ; case t of</font>
+<a name="line-753"></a><font color=Blue>--          _ | "Left"  `isPrefixOf` t -&gt; fmap Left  (interior e parseContents)</font>
+<a name="line-754"></a><font color=Blue>--            | "Right" `isPrefixOf` t -&gt; fmap Right (interior e parseContents)</font>
+<a name="line-755"></a><font color=Blue>--      }</font>
+<a name="line-756"></a>
+<a name="line-757"></a>
+<a name="line-758"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-759"></a><font color=Blue>-- Useful auxiliaries for "fromAttributes"</font>
+<a name="line-760"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-761"></a>
+<a name="line-762"></a><a name="Defaultable"></a><font color=Blue>-- | If an attribute is defaultable, then it either takes the default</font>
+<a name="line-763"></a><a name="Defaultable"></a><font color=Blue>--   value (which is omitted from the output), or a non-default value</font>
+<a name="line-764"></a><a name="Defaultable"></a><font color=Blue>--   (which obviously must be printed).</font>
+<a name="line-765"></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="line-766"></a>
+<a name="line-767"></a><a name="searchMaybe"></a><font color=Blue>searchMaybe</font> <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="line-768"></a><font color=Blue>searchMaybe</font> <font color=Green><u>_</u></font> [] <font color=Red>=</font> Nothing
+<a name="line-769"></a><font color=Blue>searchMaybe</font> f <font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-770"></a>    <font color=Green><u>let</u></font> fx <font color=Red>=</font> f x <font color=Green><u>in</u></font>
+<a name="line-771"></a>    <font color=Green><u>case</u></font> fx <font color=Green><u>of</u></font>
+<a name="line-772"></a>      Nothing  <font color=Red>-&gt;</font> searchMaybe f xs
+<a name="line-773"></a>      <font color=Cyan>(</font>Just <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> fx
+<a name="line-774"></a>
+<a name="line-775"></a><a name="maybeToAttr"></a><font color=Blue>maybeToAttr</font> <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="line-776"></a>               <font color=Red>-&gt;</font> Maybe Attribute
+<a name="line-777"></a><font color=Blue>maybeToAttr</font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> Nothing  <font color=Red>=</font> Nothing
+<a name="line-778"></a><font color=Blue>maybeToAttr</font> to n <font color=Cyan>(</font>Just v<font color=Cyan>)</font> <font color=Red>=</font> to n v
+<a name="line-779"></a>
+<a name="line-780"></a><a name="defaultToAttr"></a><font color=Blue>defaultToAttr</font> <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="line-781"></a>                 <font color=Red>-&gt;</font> Maybe Attribute
+<a name="line-782"></a><font color=Blue>defaultToAttr</font> <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="line-783"></a><font color=Blue>defaultToAttr</font> to n <font color=Cyan>(</font>NonDefault v<font color=Cyan>)</font> <font color=Red>=</font> to n v
+<a name="line-784"></a>
+<a name="line-785"></a><a name="definiteA"></a><font color=Blue>definiteA</font> <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="line-786"></a>             <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> a
+<a name="line-787"></a><font color=Blue>definiteA</font> from tag at <font color=Green><u>as</u></font> <font color=Red>=</font>
+<a name="line-788"></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="line-789"></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="line-790"></a>      <font color=Cyan>(</font>Just a<font color=Cyan>)</font> <font color=Red>-&gt;</font> a
+<a name="line-791"></a>
+<a name="line-792"></a><a name="defaultA"></a><font color=Blue>defaultA</font> <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="line-793"></a>            <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> Defaultable a
+<a name="line-794"></a><font color=Blue>defaultA</font> from def at <font color=Green><u>as</u></font> <font color=Red>=</font>
+<a name="line-795"></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="line-796"></a>      Nothing  <font color=Red>-&gt;</font> Default def
+<a name="line-797"></a>      <font color=Cyan>(</font>Just a<font color=Cyan>)</font> <font color=Red>-&gt;</font> NonDefault a
+<a name="line-798"></a>
+<a name="line-799"></a><a name="possibleA"></a><font color=Blue>possibleA</font> <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="line-800"></a><font color=Blue>possibleA</font> 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="line-801"></a>
+<a name="line-802"></a><a name="fromAttrToStr"></a><font color=Blue>fromAttrToStr</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> Attribute <font color=Red>-&gt;</font> Maybe String
+<a name="line-803"></a><font color=Blue>fromAttrToStr</font> n <font color=Cyan>(</font>n0<font color=Cyan>,</font>v<font color=Cyan>)</font>
+<a name="line-804"></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="line-805"></a>        <font color=Red>|</font> otherwise <font color=Red>=</font> Nothing
+<a name="line-806"></a>
+<a name="line-807"></a><a name="toAttrFrStr"></a><font color=Blue>toAttrFrStr</font>   <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Maybe Attribute
+<a name="line-808"></a><font color=Blue>toAttrFrStr</font> n v <font color=Red>=</font> Just <font color=Cyan>(</font>n<font color=Cyan>,</font> str2attr v<font color=Cyan>)</font>
+<a name="line-809"></a>
+<a name="line-810"></a><a name="str2attr"></a><font color=Blue>str2attr</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> AttValue
+<a name="line-811"></a><font color=Blue>str2attr</font> s <font color=Red>=</font>
+<a name="line-812"></a>    <font color=Green><u>let</u></font> f t <font color=Red>=</font>
+<a name="line-813"></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="line-814"></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="line-815"></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="line-816"></a>        g <font color=Magenta>'"'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"quot"</font>
+<a name="line-817"></a>        g <font color=Magenta>'&amp;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"amp"</font>
+<a name="line-818"></a>        g <font color=Magenta>'&lt;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"lt"</font>
+<a name="line-819"></a>        g <font color=Magenta>'&gt;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"gt"</font>
+<a name="line-820"></a>        g <font color=Magenta>'\''</font> <font color=Red>=</font> RefEntity <font color=Magenta>"apos"</font>
+<a name="line-821"></a>    <font color=Green><u>in</u></font> AttValue <font color=Cyan>(</font>f s<font color=Cyan>)</font>
+<a name="line-822"></a>
+<a name="line-823"></a><a name="attr2str"></a><font color=Blue>attr2str</font> <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> String          <font color=Blue>-- really needs symbol table</font>
+<a name="line-824"></a><font color=Blue>attr2str</font> <font color=Cyan>(</font>AttValue xs<font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-825"></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="line-826"></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="line-827"></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="line-828"></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="line-829"></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="line-830"></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="line-831"></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="line-832"></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="line-833"></a>    <font color=Green><u>in</u></font> concatMap f xs
+<a name="line-834"></a>
+<a name="line-835"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-836"></a><font color=Blue>--  New content-model types</font>
+<a name="line-837"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-838"></a>
+<a name="line-839"></a><font color=Blue>{-
+<a name="line-840"></a>data OneOf2 a b
+<a name="line-841"></a>data OneOf3 a b c
+<a name="line-842"></a>data OneOf4 a b c d
+<a name="line-843"></a>    ... etc are now defined (with instances) in module OneOfN.
+<a name="line-844"></a>-}</font>
+<a name="line-845"></a>
+<a name="line-846"></a><a name="ANYContent"></a><font color=Blue>-- | A type corresponding to XML's ANY contentspec.</font>
+<a name="line-847"></a><a name="ANYContent"></a><font color=Blue>--   It is either a list of unconverted xml 'Content'</font>
+<a name="line-848"></a><a name="ANYContent"></a><font color=Blue>--   or some 'XmlContent'-able value.</font>
+<a name="line-849"></a><a name="ANYContent"></a><font color=Blue>--</font>
+<a name="line-850"></a><a name="ANYContent"></a><font color=Blue>-- Parsing functions (e.g. 'parseContents') will always produce 'UnConverted'.</font>
+<a name="line-851"></a><a name="ANYContent"></a><font color=Blue>-- Note: The Show instance for 'UnConverted' uses 'verbatim'.</font>
+<a name="line-852"></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="line-853"></a>                <font color=Red>|</font> UnConverted <font color=Red>[</font>Content Posn<font color=Red>]</font>
+<a name="line-854"></a>
+<a name="line-855"></a><font color=Green><u>instance</u></font> Show ANYContent <font color=Green><u>where</u></font>
+<a name="line-856"></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="line-857"></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="line-858"></a>
+<a name="line-859"></a><font color=Green><u>instance</u></font> Eq ANYContent <font color=Green><u>where</u></font>
+<a name="line-860"></a>    a <font color=Cyan>==</font> b <font color=Red>=</font> show a <font color=Cyan>==</font> show b
+<a name="line-861"></a>
+<a name="line-862"></a><a name="List1"></a><font color=Blue>-- | The List1 type represents lists with at least one element.</font>
+<a name="line-863"></a><a name="List1"></a><font color=Blue>--   It is required for DTD content models that use + as a modifier.</font>
+<a name="line-864"></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="line-865"></a>
+<a name="line-866"></a>
+<a name="line-867"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-868"></a><font color=Blue>--  Instances for new content-model types</font>
+<a name="line-869"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-870"></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="line-871"></a>    toHType m  <font color=Red>=</font> Defined <font color=Magenta>"List1"</font> <font color=Red>[</font>hx<font color=Red>]</font>
+<a name="line-872"></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="line-873"></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="line-874"></a>                     hx <font color=Red>=</font> toHType x
+<a name="line-875"></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="line-876"></a>    toContents <font color=Cyan>(</font>NonEmpty xs<font color=Cyan>)</font> <font color=Red>=</font> concatMap toContents xs
+<a name="line-877"></a>    parseContents <font color=Red>=</font> fmap NonEmpty <font color=Cyan>$</font> many1 parseContents
+<a name="line-878"></a>
+<a name="line-879"></a><font color=Green><u>instance</u></font> HTypeable ANYContent <font color=Green><u>where</u></font>
+<a name="line-880"></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="line-881"></a><font color=Green><u>instance</u></font> XmlContent ANYContent <font color=Green><u>where</u></font>
+<a name="line-882"></a>    toContents <font color=Cyan>(</font>ANYContent a<font color=Cyan>)</font>  <font color=Red>=</font> toContents a
+<a name="line-883"></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="line-884"></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="line-885"></a>
+<a name="line-886"></a><font color=Blue>------------------------------------------------------------------------</font>
+<a name="line-887"></a><font color=Blue>--</font>
+<a name="line-888"></a><font color=Blue>------------------------------------------------------------------------</font>
+</pre>
+</body>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Xtract/Combinators.html b/docs/HaXml/src/Text/XML/HaXml/Xtract/Combinators.html
--- a/docs/HaXml/src/Text/XML/HaXml/Xtract/Combinators.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Xtract/Combinators.html
@@ -1,108 +1,114 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | This is a new set of XML combinators for Xtract, not standard,</font>
-<a name="(line2)"></a><font color=Blue>--   but based on the standard set in "Text.Xml.Haxml.Combinators".</font>
-<a name="(line3)"></a><font color=Blue>--   The main difference is that the Content Filter type becomes a</font>
-<a name="(line4)"></a><font color=Blue>--   Double Filter.  A Double Filter always takes the whole document</font>
-<a name="(line5)"></a><font color=Blue>--   as an extra argument, so you can start to traverse it again from</font>
-<a name="(line6)"></a><font color=Blue>--   the root, when at any inner location within the document tree.</font>
-<a name="(line7)"></a><font color=Blue>--</font>
-<a name="(line8)"></a><font color=Blue>--   The new combinator definitions are derived from the old ones.</font>
-<a name="(line9)"></a><font color=Blue>--   The same names have the equivalent meaning - use module qualification</font>
-<a name="(line10)"></a><font color=Blue>--   on imports to distinguish between CFilter and DFilter variations.</font>
-<a name="(line11)"></a>
-<a name="(line12)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Xtract<font color=Cyan>.</font>Combinators <font color=Green><u>where</u></font>
-<a name="(line13)"></a>
-<a name="(line14)"></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="(line15)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators <font color=Cyan>(</font>CFilter<font color=Cyan>)</font>
-<a name="(line16)"></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>Combinators <font color=Green><u>as</u></font> C
-<a name="(line17)"></a>
-<a name="(line18)"></a>
-<a name="(line19)"></a><a name="DFilter"></a><font color=Blue>-- | double content filter - takes document root + local subtree.</font>
-<a name="(line20)"></a><a name="DFilter"></a><font color=Green><u>type</u></font> DFilter i <font color=Red>=</font> Content i <font color=Red>-&gt;</font> Content i <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font>
-<a name="(line21)"></a>
-<a name="(line22)"></a><a name="local"></a><font color=Blue>-- | lift an ordinary content filter to a double filter.</font>
-<a name="(line23)"></a>local<font color=Cyan>,</font>global <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> DFilter i
-<a name="(line24)"></a>local  f <font color=Red>=</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> f sub
-<a name="(line25)"></a><a name="global"></a>global f <font color=Red>=</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> f xml
-<a name="(line26)"></a>
-<a name="(line27)"></a><a name="dfilter"></a><font color=Blue>-- | drop a double filter to an ordinary content filter.</font>
-<a name="(line28)"></a><font color=Blue>--   (permitting interior access to document root)</font>
-<a name="(line29)"></a>dfilter <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line30)"></a>dfilter f <font color=Red>=</font> <font color=Red>\</font>xml<font color=Red>-&gt;</font> f xml xml
-<a name="(line31)"></a>
-<a name="(line32)"></a><a name="cfilter"></a><font color=Blue>-- | drop a double filter to an ordinary content filter.</font>
-<a name="(line33)"></a><font color=Blue>--   (Where interior access to the document root is not needed, the</font>
-<a name="(line34)"></a><font color=Blue>--    retaining pointer to the outer element can be pruned away.</font>
-<a name="(line35)"></a><font color=Blue>--   'cfilter' is more space-efficient than 'dfilter' in this situation.)</font>
-<a name="(line36)"></a>cfilter <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line37)"></a>cfilter f <font color=Red>=</font> <font color=Red>\</font>xml <font color=Red>-&gt;</font> f undefined xml
-<a name="(line38)"></a><font color=Blue>--cfilter f = \xml-&gt; flip f xml</font>
-<a name="(line39)"></a><font color=Blue>--                          (case xml of</font>
-<a name="(line40)"></a><font color=Blue>--                             CElem (Elem n as cs) i -&gt; CElem (Elem n [] []) i</font>
-<a name="(line41)"></a><font color=Blue>--                             _ -&gt; xml)</font>
-<a name="(line42)"></a>
-<a name="(line43)"></a><a name="liftLocal"></a><font color=Blue>-- | lift a CFilter combinator to a DFilter combinator</font>
-<a name="(line44)"></a>liftLocal<font color=Cyan>,</font> liftGlobal <font color=Red>::</font> <font color=Cyan>(</font>CFilter i<font color=Red>-&gt;</font>CFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>DFilter i<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font>
-<a name="(line45)"></a>liftLocal  ff <font color=Red>=</font> <font color=Red>\</font>df<font color=Red>-&gt;</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> <font color=Cyan>(</font>ff <font color=Cyan>(</font>df xml<font color=Cyan>)</font><font color=Cyan>)</font> sub
-<a name="(line46)"></a><a name="liftGlobal"></a>liftGlobal ff <font color=Red>=</font> <font color=Red>\</font>df<font color=Red>-&gt;</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> <font color=Cyan>(</font>ff <font color=Cyan>(</font>df xml<font color=Cyan>)</font><font color=Cyan>)</font> xml
-<a name="(line47)"></a>
-<a name="(line48)"></a><a name="o"></a><font color=Blue>-- | lifted composition over double filters.</font>
-<a name="(line49)"></a>o <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> DFilter i
-<a name="(line50)"></a><a name="o"></a>g <font color=Cyan>`o`</font> f <font color=Red>=</font> <font color=Red>\</font>xml<font color=Red>-&gt;</font> concatMap <font color=Cyan>(</font>g xml<font color=Cyan>)</font> <font color=Cyan>.</font> <font color=Cyan>(</font>f xml<font color=Cyan>)</font>
-<a name="(line51)"></a>
-<a name="(line52)"></a><a name="|>|"></a><font color=Blue>-- | lifted choice.</font>
-<a name="(line53)"></a><font color=Cyan>(</font><font color=Cyan>|&gt;|</font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line54)"></a><a name="f"></a>f <font color=Cyan>|&gt;|</font> g <font color=Red>=</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> <font color=Green><u>let</u></font> first <font color=Red>=</font> f xml sub <font color=Green><u>in</u></font>
-<a name="(line55)"></a>                     <font color=Green><u>if</u></font> null first <font color=Green><u>then</u></font> g xml sub <font color=Green><u>else</u></font> first
-<a name="(line56)"></a>
-<a name="(line57)"></a><a name="union"></a><font color=Blue>-- | lifted union.</font>
-<a name="(line58)"></a>union <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line59)"></a>union <font color=Red>=</font> lift <font color=Cyan>(</font><font color=Cyan>++</font><font color=Cyan>)</font>
-<a name="(line60)"></a>  <font color=Green><u>where</u></font>
-<a name="(line61)"></a>    lift f g h <font color=Red>=</font> <font color=Red>\</font>x y<font color=Red>-&gt;</font> f <font color=Cyan>(</font>g x y<font color=Cyan>)</font> <font color=Cyan>(</font>h x y<font color=Cyan>)</font>
-<a name="(line62)"></a>
-<a name="(line63)"></a><a name="with"></a><font color=Blue>-- | lifted predicates.</font>
-<a name="(line64)"></a>with<font color=Cyan>,</font> without <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> DFilter i
-<a name="(line65)"></a><a name="with"></a>f <font color=Cyan>`with`</font> g    <font color=Red>=</font> <font color=Red>\</font>xml<font color=Red>-&gt;</font> filter <font color=Cyan>(</font>not<font color=Cyan>.</font>null<font color=Cyan>.</font>g xml<font color=Cyan>)</font> <font color=Cyan>.</font> f xml
-<a name="(line66)"></a><a name="without"></a>f <font color=Cyan>`without`</font> g <font color=Red>=</font> <font color=Red>\</font>xml<font color=Red>-&gt;</font> filter     <font color=Cyan>(</font>null<font color=Cyan>.</font>g xml<font color=Cyan>)</font> <font color=Cyan>.</font> f xml
-<a name="(line67)"></a>
-<a name="(line68)"></a><a name="keep"></a><font color=Blue>-- | lifted unit and zero.</font>
-<a name="(line69)"></a>keep<font color=Cyan>,</font> none <font color=Red>::</font> DFilter i
-<a name="(line70)"></a>keep <font color=Red>=</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> <font color=Red>[</font>sub<font color=Red>]</font>	<font color=Blue>-- local C.keep</font>
-<a name="(line71)"></a><a name="none"></a>none <font color=Red>=</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> []	<font color=Blue>-- local C.none</font>
-<a name="(line72)"></a>
-<a name="(line73)"></a><a name="children"></a>children<font color=Cyan>,</font> elm<font color=Cyan>,</font> txt <font color=Red>::</font> DFilter i
-<a name="(line74)"></a>children <font color=Red>=</font> local C<font color=Cyan>.</font>children
-<a name="(line75)"></a><a name="elm"></a>elm      <font color=Red>=</font> local C<font color=Cyan>.</font>elm
-<a name="(line76)"></a><a name="txt"></a>txt      <font color=Red>=</font> local C<font color=Cyan>.</font>txt
-<a name="(line77)"></a>
-<a name="(line78)"></a><a name="applypred"></a>applypred <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> CFilter i
-<a name="(line79)"></a>applypred f p <font color=Red>=</font> <font color=Red>\</font>xml<font color=Red>-&gt;</font> <font color=Cyan>(</font>const f <font color=Cyan>`with`</font> p<font color=Cyan>)</font> xml xml
-<a name="(line80)"></a>
-<a name="(line81)"></a><a name="iffind"></a>iffind <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Cyan>(</font>String <font color=Red>-&gt;</font> DFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> DFilter i
-<a name="(line82)"></a>iffind key yes no xml c<font color=Red>@</font><font color=Cyan>(</font>CElem <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=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
-<a name="(line83)"></a>  <font color=Green><u>case</u></font> <font color=Cyan>(</font>lookup key <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Green><u>of</u></font>
-<a name="(line84)"></a>    Nothing <font color=Red>-&gt;</font> no xml c
-<a name="(line85)"></a>    <font color=Cyan>(</font>Just 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>-&gt;</font> yes <font color=Cyan>(</font>show v<font color=Cyan>)</font> xml c
-<a name="(line86)"></a>iffind key yes no xml other <font color=Red>=</font> no xml other
-<a name="(line87)"></a>
-<a name="(line88)"></a><a name="ifTxt"></a>ifTxt <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> DFilter i
-<a name="(line89)"></a>ifTxt yes no xml c<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>=</font> yes s xml c
-<a name="(line90)"></a>ifTxt yes no xml c                 <font color=Red>=</font> no xml c
-<a name="(line91)"></a>
-<a name="(line92)"></a><a name="cat"></a>cat <font color=Red>::</font> <font color=Red>[</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line93)"></a>cat fs <font color=Red>=</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> concat <font color=Red>[</font> f xml sub <font color=Red>|</font> f <font color=Red>&lt;-</font> fs <font color=Red>]</font>
-<a name="(line94)"></a>
-<a name="(line95)"></a><a name="/>"></a><font color=Cyan>(</font><font color=Cyan>/&gt;</font><font color=Cyan>)</font> <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> DFilter i
-<a name="(line96)"></a>f <font color=Cyan>/&gt;</font> g <font color=Red>=</font> g <font color=Cyan>`o`</font> children <font color=Cyan>`o`</font> f
-<a name="(line97)"></a>
-<a name="(line98)"></a><a name="</"></a><font color=Cyan>(</font><font color=Cyan>&lt;/</font><font color=Cyan>)</font> <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> DFilter i
-<a name="(line99)"></a>f <font color=Cyan>&lt;/</font> g <font color=Red>=</font> f <font color=Cyan>`with`</font> <font color=Cyan>(</font>g <font color=Cyan>`o`</font> children<font color=Cyan>)</font>
-<a name="(line100)"></a>
-<a name="(line101)"></a><a name="deep"></a>deep<font color=Cyan>,</font> deepest<font color=Cyan>,</font> multi <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> DFilter i
-<a name="(line102)"></a>deep f    <font color=Red>=</font> f <font color=Cyan>|&gt;|</font> <font color=Cyan>(</font>deep f <font color=Cyan>`o`</font> children<font color=Cyan>)</font>
-<a name="(line103)"></a><a name="deepest"></a>deepest f <font color=Red>=</font> <font color=Cyan>(</font>deepest f <font color=Cyan>`o`</font> children<font color=Cyan>)</font> <font color=Cyan>|&gt;|</font> f
-<a name="(line104)"></a><a name="multi"></a>multi f   <font color=Red>=</font> f <font color=Cyan>`union`</font> <font color=Cyan>(</font>multi f <font color=Cyan>`o`</font> children<font color=Cyan>)</font>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Xtract/Combinators.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | This is a new set of XML combinators for Xtract, not standard,</font>
+<a name="line-2"></a><font color=Blue>--   but based on the standard set in "Text.Xml.Haxml.Combinators".</font>
+<a name="line-3"></a><font color=Blue>--   The main difference is that the Content Filter type becomes a</font>
+<a name="line-4"></a><font color=Blue>--   Double Filter.  A Double Filter always takes the whole document</font>
+<a name="line-5"></a><font color=Blue>--   as an extra argument, so you can start to traverse it again from</font>
+<a name="line-6"></a><font color=Blue>--   the root, when at any inner location within the document tree.</font>
+<a name="line-7"></a><font color=Blue>--</font>
+<a name="line-8"></a><font color=Blue>--   The new combinator definitions are derived from the old ones.</font>
+<a name="line-9"></a><font color=Blue>--   The same names have the equivalent meaning - use module qualification</font>
+<a name="line-10"></a><font color=Blue>--   on imports to distinguish between CFilter and DFilter variations.</font>
+<a name="line-11"></a>
+<a name="line-12"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Xtract<font color=Cyan>.</font>Combinators <font color=Green><u>where</u></font>
+<a name="line-13"></a>
+<a name="line-14"></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="line-15"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators <font color=Cyan>(</font>CFilter<font color=Cyan>)</font>
+<a name="line-16"></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>Combinators <font color=Green><u>as</u></font> C
+<a name="line-17"></a>
+<a name="line-18"></a>
+<a name="line-19"></a><a name="DFilter"></a><font color=Blue>-- | double content filter - takes document root + local subtree.</font>
+<a name="line-20"></a><a name="DFilter"></a><font color=Green><u>type</u></font> DFilter i <font color=Red>=</font> Content i <font color=Red>-&gt;</font> Content i <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font>
+<a name="line-21"></a>
+<a name="line-22"></a><a name="local"></a><font color=Blue>-- | lift an ordinary content filter to a double filter.</font>
+<a name="line-23"></a><font color=Blue>local</font><font color=Cyan>,</font>global <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> DFilter i
+<a name="line-24"></a><font color=Blue>local</font>  f <font color=Red>=</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> f sub
+<a name="line-25"></a><a name="global"></a><font color=Blue>global</font> f <font color=Red>=</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> f xml
+<a name="line-26"></a>
+<a name="line-27"></a><a name="dfilter"></a><font color=Blue>-- | drop a double filter to an ordinary content filter.</font>
+<a name="line-28"></a><font color=Blue>--   (permitting interior access to document root)</font>
+<a name="line-29"></a><font color=Blue>dfilter</font> <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-30"></a><font color=Blue>dfilter</font> f <font color=Red>=</font> <font color=Red>\</font>xml<font color=Red>-&gt;</font> f xml xml
+<a name="line-31"></a>
+<a name="line-32"></a><a name="cfilter"></a><font color=Blue>-- | drop a double filter to an ordinary content filter.</font>
+<a name="line-33"></a><font color=Blue>--   (Where interior access to the document root is not needed, the</font>
+<a name="line-34"></a><font color=Blue>--    retaining pointer to the outer element can be pruned away.</font>
+<a name="line-35"></a><font color=Blue>--   'cfilter' is more space-efficient than 'dfilter' in this situation.)</font>
+<a name="line-36"></a><font color=Blue>cfilter</font> <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-37"></a><font color=Blue>cfilter</font> f <font color=Red>=</font> <font color=Red>\</font>xml <font color=Red>-&gt;</font> f undefined xml
+<a name="line-38"></a><font color=Blue>--cfilter f = \xml-&gt; flip f xml</font>
+<a name="line-39"></a><font color=Blue>--                          (case xml of</font>
+<a name="line-40"></a><font color=Blue>--                             CElem (Elem n as cs) i -&gt; CElem (Elem n [] []) i</font>
+<a name="line-41"></a><font color=Blue>--                             _ -&gt; xml)</font>
+<a name="line-42"></a>
+<a name="line-43"></a><a name="liftLocal"></a><font color=Blue>-- | lift a CFilter combinator to a DFilter combinator</font>
+<a name="line-44"></a><font color=Blue>liftLocal</font><font color=Cyan>,</font> liftGlobal <font color=Red>::</font> <font color=Cyan>(</font>CFilter i<font color=Red>-&gt;</font>CFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>DFilter i<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font>
+<a name="line-45"></a><font color=Blue>liftLocal</font>  ff <font color=Red>=</font> <font color=Red>\</font>df<font color=Red>-&gt;</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> <font color=Cyan>(</font>ff <font color=Cyan>(</font>df xml<font color=Cyan>)</font><font color=Cyan>)</font> sub
+<a name="line-46"></a><a name="liftGlobal"></a><font color=Blue>liftGlobal</font> ff <font color=Red>=</font> <font color=Red>\</font>df<font color=Red>-&gt;</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> <font color=Cyan>(</font>ff <font color=Cyan>(</font>df xml<font color=Cyan>)</font><font color=Cyan>)</font> xml
+<a name="line-47"></a>
+<a name="line-48"></a><a name="o"></a><font color=Blue>-- | lifted composition over double filters.</font>
+<a name="line-49"></a><font color=Blue>o</font> <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> DFilter i
+<a name="line-50"></a><a name="o"></a><font color=Blue>g</font> <font color=Cyan>`o`</font> f <font color=Red>=</font> <font color=Red>\</font>xml<font color=Red>-&gt;</font> concatMap <font color=Cyan>(</font>g xml<font color=Cyan>)</font> <font color=Cyan>.</font> <font color=Cyan>(</font>f xml<font color=Cyan>)</font>
+<a name="line-51"></a>
+<a name="line-52"></a><a name="|>|"></a><font color=Blue>-- | lifted choice.</font>
+<a name="line-53"></a><font color=Cyan>(</font><font color=Cyan>|&gt;|</font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-54"></a><a name="f"></a><font color=Blue>f</font> <font color=Cyan>|&gt;|</font> g <font color=Red>=</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> <font color=Green><u>let</u></font> first <font color=Red>=</font> f xml sub <font color=Green><u>in</u></font>
+<a name="line-55"></a>                     <font color=Green><u>if</u></font> null first <font color=Green><u>then</u></font> g xml sub <font color=Green><u>else</u></font> first
+<a name="line-56"></a>
+<a name="line-57"></a><a name="union"></a><font color=Blue>-- | lifted union.</font>
+<a name="line-58"></a><font color=Blue>union</font> <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-59"></a><font color=Blue>union</font> <font color=Red>=</font> lift <font color=Cyan>(</font><font color=Cyan>++</font><font color=Cyan>)</font>
+<a name="line-60"></a>  <font color=Green><u>where</u></font>
+<a name="line-61"></a>    lift f g h <font color=Red>=</font> <font color=Red>\</font>x y<font color=Red>-&gt;</font> f <font color=Cyan>(</font>g x y<font color=Cyan>)</font> <font color=Cyan>(</font>h x y<font color=Cyan>)</font>
+<a name="line-62"></a>
+<a name="line-63"></a><a name="with"></a><font color=Blue>-- | lifted predicates.</font>
+<a name="line-64"></a><font color=Blue>with</font><font color=Cyan>,</font> without <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> DFilter i
+<a name="line-65"></a><a name="with"></a><font color=Blue>f</font> <font color=Cyan>`with`</font> g    <font color=Red>=</font> <font color=Red>\</font>xml<font color=Red>-&gt;</font> filter <font color=Cyan>(</font>not<font color=Cyan>.</font>null<font color=Cyan>.</font>g xml<font color=Cyan>)</font> <font color=Cyan>.</font> f xml
+<a name="line-66"></a><a name="without"></a><font color=Blue>f</font> <font color=Cyan>`without`</font> g <font color=Red>=</font> <font color=Red>\</font>xml<font color=Red>-&gt;</font> filter     <font color=Cyan>(</font>null<font color=Cyan>.</font>g xml<font color=Cyan>)</font> <font color=Cyan>.</font> f xml
+<a name="line-67"></a>
+<a name="line-68"></a><a name="keep"></a><font color=Blue>-- | lifted unit and zero.</font>
+<a name="line-69"></a><font color=Blue>keep</font><font color=Cyan>,</font> none <font color=Red>::</font> DFilter i
+<a name="line-70"></a><font color=Blue>keep</font> <font color=Red>=</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> <font color=Red>[</font>sub<font color=Red>]</font>	<font color=Blue>-- local C.keep</font>
+<a name="line-71"></a><a name="none"></a><font color=Blue>none</font> <font color=Red>=</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> []	<font color=Blue>-- local C.none</font>
+<a name="line-72"></a>
+<a name="line-73"></a><a name="children"></a><font color=Blue>children</font><font color=Cyan>,</font> elm<font color=Cyan>,</font> txt <font color=Red>::</font> DFilter i
+<a name="line-74"></a><font color=Blue>children</font> <font color=Red>=</font> local C<font color=Cyan>.</font>children
+<a name="line-75"></a><a name="elm"></a><font color=Blue>elm</font>      <font color=Red>=</font> local C<font color=Cyan>.</font>elm
+<a name="line-76"></a><a name="txt"></a><font color=Blue>txt</font>      <font color=Red>=</font> local C<font color=Cyan>.</font>txt
+<a name="line-77"></a>
+<a name="line-78"></a><a name="applypred"></a><font color=Blue>applypred</font> <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> CFilter i
+<a name="line-79"></a><font color=Blue>applypred</font> f p <font color=Red>=</font> <font color=Red>\</font>xml<font color=Red>-&gt;</font> <font color=Cyan>(</font>const f <font color=Cyan>`with`</font> p<font color=Cyan>)</font> xml xml
+<a name="line-80"></a>
+<a name="line-81"></a><a name="iffind"></a><font color=Blue>iffind</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Cyan>(</font>String <font color=Red>-&gt;</font> DFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> DFilter i
+<a name="line-82"></a><font color=Blue>iffind</font> key yes no xml c<font color=Red>@</font><font color=Cyan>(</font>CElem <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=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>
+<a name="line-83"></a>  <font color=Green><u>case</u></font> <font color=Cyan>(</font>lookup key <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Green><u>of</u></font>
+<a name="line-84"></a>    Nothing <font color=Red>-&gt;</font> no xml c
+<a name="line-85"></a>    <font color=Cyan>(</font>Just 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>-&gt;</font> yes <font color=Cyan>(</font>show v<font color=Cyan>)</font> xml c
+<a name="line-86"></a><font color=Blue>iffind</font> key yes no xml other <font color=Red>=</font> no xml other
+<a name="line-87"></a>
+<a name="line-88"></a><a name="ifTxt"></a><font color=Blue>ifTxt</font> <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> DFilter i
+<a name="line-89"></a><font color=Blue>ifTxt</font> yes no xml c<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>=</font> yes s xml c
+<a name="line-90"></a><font color=Blue>ifTxt</font> yes no xml c                 <font color=Red>=</font> no xml c
+<a name="line-91"></a>
+<a name="line-92"></a><a name="cat"></a><font color=Blue>cat</font> <font color=Red>::</font> <font color=Red>[</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>b<font color=Red>-&gt;</font><font color=Red>[</font>c<font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-93"></a><font color=Blue>cat</font> fs <font color=Red>=</font> <font color=Red>\</font>xml sub<font color=Red>-&gt;</font> concat <font color=Red>[</font> f xml sub <font color=Red>|</font> f <font color=Red>&lt;-</font> fs <font color=Red>]</font>
+<a name="line-94"></a>
+<a name="line-95"></a><a name="/>"></a><font color=Cyan>(</font><font color=Cyan>/&gt;</font><font color=Cyan>)</font> <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> DFilter i
+<a name="line-96"></a><font color=Blue>f</font> <font color=Cyan>/&gt;</font> g <font color=Red>=</font> g <font color=Cyan>`o`</font> children <font color=Cyan>`o`</font> f
+<a name="line-97"></a>
+<a name="line-98"></a><a name="</"></a><font color=Cyan>(</font><font color=Cyan>&lt;/</font><font color=Cyan>)</font> <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> DFilter i
+<a name="line-99"></a><font color=Blue>f</font> <font color=Cyan>&lt;/</font> g <font color=Red>=</font> f <font color=Cyan>`with`</font> <font color=Cyan>(</font>g <font color=Cyan>`o`</font> children<font color=Cyan>)</font>
+<a name="line-100"></a>
+<a name="line-101"></a><a name="deep"></a><font color=Blue>deep</font><font color=Cyan>,</font> deepest<font color=Cyan>,</font> multi <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> DFilter i
+<a name="line-102"></a><font color=Blue>deep</font> f    <font color=Red>=</font> f <font color=Cyan>|&gt;|</font> <font color=Cyan>(</font>deep f <font color=Cyan>`o`</font> children<font color=Cyan>)</font>
+<a name="line-103"></a><a name="deepest"></a><font color=Blue>deepest</font> f <font color=Red>=</font> <font color=Cyan>(</font>deepest f <font color=Cyan>`o`</font> children<font color=Cyan>)</font> <font color=Cyan>|&gt;|</font> f
+<a name="line-104"></a><a name="multi"></a><font color=Blue>multi</font> f   <font color=Red>=</font> f <font color=Cyan>`union`</font> <font color=Cyan>(</font>multi f <font color=Cyan>`o`</font> children<font color=Cyan>)</font>
 </pre>
+</body>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Xtract/Lex.html b/docs/HaXml/src/Text/XML/HaXml/Xtract/Lex.html
--- a/docs/HaXml/src/Text/XML/HaXml/Xtract/Lex.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Xtract/Lex.html
@@ -1,132 +1,138 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | This is another hand-written lexer, this time for the Xtract</font>
-<a name="(line2)"></a><font color=Blue>--   command-language.  The entry point is lexXtract.  You don't</font>
-<a name="(line3)"></a><font color=Blue>--   normally need to use this module directly - the lexer is called</font>
-<a name="(line4)"></a><font color=Blue>--   automatically by the parser.  (We only expose this interface</font>
-<a name="(line5)"></a><font color=Blue>--   for debugging purposes.)</font>
-<a name="(line6)"></a><font color=Blue>--</font>
-<a name="(line7)"></a><font color=Blue>--   The Xtract command language is very like the XPath specification.</font>
-<a name="(line8)"></a>
-<a name="(line9)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Xtract<font color=Cyan>.</font>Lex
-<a name="(line10)"></a>  <font color=Cyan>(</font> lexXtract
-<a name="(line11)"></a>  <font color=Cyan>,</font> Posn<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line12)"></a>  <font color=Cyan>,</font> TokenT<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
-<a name="(line13)"></a>  <font color=Cyan>,</font> Token
-<a name="(line14)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line15)"></a>
-<a name="(line16)"></a><font color=Green><u>import</u></font> Char
-<a name="(line17)"></a><font color=Green><u>import</u></font> List<font color=Cyan>(</font>isPrefixOf<font color=Cyan>)</font>
-<a name="(line18)"></a>
-<a name="(line19)"></a>
-<a name="(line20)"></a><a name="Token"></a><font color=Green><u>type</u></font> Token <font color=Red>=</font> Either String <font color=Cyan>(</font>Posn<font color=Cyan>,</font> TokenT<font color=Cyan>)</font>
-<a name="(line21)"></a>
-<a name="(line22)"></a><a name="Posn"></a><font color=Green><u>data</u></font> Posn <font color=Red>=</font> Pn Int		<font color=Blue>-- char index only</font>
-<a name="(line23)"></a>        <font color=Green><u>deriving</u></font> Eq
-<a name="(line24)"></a>
-<a name="(line25)"></a><font color=Green><u>instance</u></font> Show Posn <font color=Green><u>where</u></font>
-<a name="(line26)"></a>      showsPrec p <font color=Cyan>(</font>Pn c<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"char pos "</font> <font color=Cyan>.</font> shows c
-<a name="(line27)"></a>
-<a name="(line28)"></a><a name="TokenT"></a><font color=Green><u>data</u></font> TokenT <font color=Red>=</font>
-<a name="(line29)"></a>      Symbol String
-<a name="(line30)"></a>    <font color=Red>|</font> TokString String		<font color=Blue>--     begins with letter</font>
-<a name="(line31)"></a>    <font color=Red>|</font> TokNum Integer		<font color=Blue>--     begins with digit</font>
-<a name="(line32)"></a>    <font color=Green><u>deriving</u></font> Eq
-<a name="(line33)"></a>
-<a name="(line34)"></a><font color=Green><u>instance</u></font> Show TokenT <font color=Green><u>where</u></font>
-<a name="(line35)"></a>    showsPrec p <font color=Cyan>(</font>Symbol s<font color=Cyan>)</font> <font color=Red>=</font> showString s
-<a name="(line36)"></a>    showsPrec p <font color=Cyan>(</font>TokString s<font color=Cyan>)</font> <font color=Red>=</font> showString s
-<a name="(line37)"></a>    showsPrec p <font color=Cyan>(</font>TokNum n<font color=Cyan>)</font> <font color=Red>=</font> shows n
-<a name="(line38)"></a>
-<a name="(line39)"></a><a name="emit"></a>emit <font color=Red>::</font> TokenT <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> Token
-<a name="(line40)"></a>emit tok p <font color=Red>=</font> forcep p <font color=Cyan>`seq`</font> Right <font color=Cyan>(</font>p<font color=Cyan>,</font>tok<font color=Cyan>)</font>
-<a name="(line41)"></a>  <font color=Green><u>where</u></font> forcep <font color=Cyan>(</font>Pn n<font color=Cyan>)</font> <font color=Red>=</font> n
-<a name="(line42)"></a>
-<a name="(line43)"></a><a name="lexerror"></a>lexerror <font color=Red>::</font> String <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
-<a name="(line44)"></a>lexerror s p <font color=Red>=</font> <font color=Red>[</font>Left <font color=Cyan>(</font><font color=Magenta>"Lexical error in selection pattern at "</font><font color=Cyan>++</font>show p<font color=Cyan>++</font><font color=Magenta>": "</font>
-<a name="(line45)"></a>                       <font color=Cyan>++</font>s<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line46)"></a>
-<a name="(line47)"></a><a name="addcol"></a>addcol <font color=Red>::</font> Int <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> Posn
-<a name="(line48)"></a>addcol n <font color=Cyan>(</font>Pn c<font color=Cyan>)</font> <font color=Red>=</font> Pn <font color=Cyan>(</font>c<font color=Cyan>+</font>n<font color=Cyan>)</font>
-<a name="(line49)"></a>
-<a name="(line50)"></a><a name="newline"></a>newline<font color=Cyan>,</font> tab <font color=Red>::</font> Posn <font color=Red>-&gt;</font> Posn
-<a name="(line51)"></a>newline <font color=Cyan>(</font>Pn c<font color=Cyan>)</font> <font color=Red>=</font> Pn <font color=Cyan>(</font>c<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font>
-<a name="(line52)"></a><a name="tab"></a>tab     <font color=Cyan>(</font>Pn c<font color=Cyan>)</font> <font color=Red>=</font> Pn <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>
-<a name="(line53)"></a>
-<a name="(line54)"></a><a name="white"></a>white <font color=Red>::</font> Char <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> Posn
-<a name="(line55)"></a>white <font color=Magenta>'\t'</font> <font color=Red>=</font> tab
-<a name="(line56)"></a>white <font color=Magenta>' '</font>  <font color=Red>=</font> addcol <font color=Magenta>1</font>
-<a name="(line57)"></a>white <font color=Magenta>'\n'</font> <font color=Red>=</font> addcol <font color=Magenta>1</font>
-<a name="(line58)"></a>white <font color=Magenta>'\r'</font> <font color=Red>=</font> addcol <font color=Magenta>1</font>
-<a name="(line59)"></a>white <font color=Magenta>'\xa0'</font> <font color=Red>=</font> addcol <font color=Magenta>1</font>
-<a name="(line60)"></a>
-<a name="(line61)"></a><a name="blank"></a>blank <font color=Red>::</font> <font color=Cyan>(</font>Posn<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font><font color=Red>[</font>Token<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> Posn<font color=Red>-&gt;</font> String<font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
-<a name="(line62)"></a>blank k p []       <font color=Red>=</font> []
-<a name="(line63)"></a>blank k p <font color=Cyan>(</font><font color=Magenta>' '</font><font color=Red><b>:</b></font> s<font color=Cyan>)</font> <font color=Red>=</font> blank k <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> s
-<a name="(line64)"></a>blank k p <font color=Cyan>(</font><font color=Magenta>'\t'</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font> <font color=Red>=</font> blank k <font color=Cyan>(</font>tab p<font color=Cyan>)</font> s
-<a name="(line65)"></a>blank k p <font color=Cyan>(</font><font color=Magenta>'\n'</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font> <font color=Red>=</font> blank k <font color=Cyan>(</font>newline p<font color=Cyan>)</font> s
-<a name="(line66)"></a>blank k p <font color=Cyan>(</font><font color=Magenta>'\r'</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font> <font color=Red>=</font> blank k p s
-<a name="(line67)"></a>blank k p <font color=Cyan>(</font><font color=Magenta>'\xa0'</font><font color=Red><b>:</b></font> s<font color=Cyan>)</font> <font color=Red>=</font> blank k <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> s
-<a name="(line68)"></a>blank k p    s     <font color=Red>=</font> k p s
-<a name="(line69)"></a>
-<a name="(line70)"></a><a name="lexXtract"></a><font color=Blue>----</font>
-<a name="(line71)"></a><font color=Blue>-- | First argument is a transformer for pattern strings, e.g. map toLower,</font>
-<a name="(line72)"></a><font color=Blue>--   but only applying to parts of the pattern not in quotation marks.</font>
-<a name="(line73)"></a><font color=Blue>--   (Needed to canonicalise HTML where tags are case-insensitive, but</font>
-<a name="(line74)"></a><font color=Blue>--   attribute values are case sensitive.)</font>
-<a name="(line75)"></a>lexXtract <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
-<a name="(line76)"></a>lexXtract f <font color=Red>=</font> selAny f <font color=Cyan>(</font>Pn <font color=Magenta>1</font><font color=Cyan>)</font>
-<a name="(line77)"></a>
-<a name="(line78)"></a><a name="syms"></a>syms <font color=Red>=</font> <font color=Magenta>"/[]()@,=*&amp;|~$+-&lt;&gt;"</font>
-<a name="(line79)"></a>
-<a name="(line80)"></a><a name="selAny"></a>selAny <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
-<a name="(line81)"></a>selAny f p [] <font color=Red>=</font> []
-<a name="(line82)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>'/'</font><font color=Red><b>:</b></font><font color=Magenta>'/'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>"//"</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>2</font> p<font color=Cyan>)</font> ss
-<a name="(line83)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>'!'</font><font color=Red><b>:</b></font><font color=Magenta>'='</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>"!="</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>2</font> p<font color=Cyan>)</font> ss
-<a name="(line84)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>'&lt;'</font><font color=Red><b>:</b></font><font color=Magenta>'='</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>"&lt;="</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>2</font> p<font color=Cyan>)</font> ss
-<a name="(line85)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>'&gt;'</font><font color=Red><b>:</b></font><font color=Magenta>'='</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>"&gt;="</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>2</font> p<font color=Cyan>)</font> ss
-<a name="(line86)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>'\''</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>    <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>"'"</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>
-<a name="(line87)"></a>                          accumulateUntil <font color=Magenta>'\''</font> <font color=Cyan>(</font>Symbol <font color=Magenta>"'"</font><font color=Cyan>)</font> [] p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line88)"></a>                                          <font color=Cyan>(</font>selAny f<font color=Cyan>)</font>
-<a name="(line89)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>'"'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>     <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>"\""</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>
-<a name="(line90)"></a>                          accumulateUntil <font color=Magenta>'"'</font> <font color=Cyan>(</font>Symbol <font color=Magenta>"\""</font><font color=Cyan>)</font> [] p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line91)"></a>                                          <font color=Cyan>(</font>selAny f<font color=Cyan>)</font>
-<a name="(line92)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>'_'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>     <font color=Red>=</font> gatherName f <font color=Magenta>"_"</font> p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss <font color=Cyan>(</font>blank <font color=Cyan>(</font>selAny f<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line93)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>':'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>     <font color=Red>=</font> gatherName f <font color=Magenta>":"</font> p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss <font color=Cyan>(</font>blank <font color=Cyan>(</font>selAny f<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line94)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>'.'</font><font color=Red><b>:</b></font><font color=Magenta>'='</font><font color=Red><b>:</b></font><font color=Magenta>'.'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>".=."</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>3</font> p<font color=Cyan>)</font> ss
-<a name="(line95)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>'.'</font><font color=Red><b>:</b></font><font color=Magenta>'!'</font><font color=Red><b>:</b></font><font color=Magenta>'='</font><font color=Red><b>:</b></font><font color=Magenta>'.'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
-<a name="(line96)"></a>                            <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>".!=."</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font> selAny f <font color=Cyan>(</font>addcol <font color=Magenta>4</font> p<font color=Cyan>)</font> ss
-<a name="(line97)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>'.'</font><font color=Red><b>:</b></font><font color=Magenta>'&lt;'</font><font color=Red><b>:</b></font><font color=Magenta>'.'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>".&lt;."</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>3</font> p<font color=Cyan>)</font> ss
-<a name="(line98)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>'.'</font><font color=Red><b>:</b></font><font color=Magenta>'&lt;'</font><font color=Red><b>:</b></font><font color=Magenta>'='</font><font color=Red><b>:</b></font><font color=Magenta>'.'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
-<a name="(line99)"></a>                            <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>".&lt;=."</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font> selAny f <font color=Cyan>(</font>addcol <font color=Magenta>4</font> p<font color=Cyan>)</font> ss
-<a name="(line100)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>'.'</font><font color=Red><b>:</b></font><font color=Magenta>'&gt;'</font><font color=Red><b>:</b></font><font color=Magenta>'.'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>".&gt;."</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>3</font> p<font color=Cyan>)</font> ss
-<a name="(line101)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>'.'</font><font color=Red><b>:</b></font><font color=Magenta>'&gt;'</font><font color=Red><b>:</b></font><font color=Magenta>'='</font><font color=Red><b>:</b></font><font color=Magenta>'.'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
-<a name="(line102)"></a>                            <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>".&gt;=."</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font> selAny f <font color=Cyan>(</font>addcol <font color=Magenta>4</font> p<font color=Cyan>)</font> ss
-<a name="(line103)"></a>selAny f p <font color=Cyan>(</font><font color=Magenta>'.'</font><font color=Red><b>:</b></font><font color=Magenta>'/'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>     <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>"./"</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>2</font> p<font color=Cyan>)</font> ss
-<a name="(line104)"></a>selAny f p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
-<a name="(line105)"></a>    <font color=Red>|</font> s <font color=Cyan>`elem`</font> syms   <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Red>[</font>s<font color=Red>]</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>     selAny f <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line106)"></a>    <font color=Red>|</font> isSpace s       <font color=Red>=</font> blank <font color=Cyan>(</font>selAny f<font color=Cyan>)</font> p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
-<a name="(line107)"></a>    <font color=Red>|</font> isAlpha s       <font color=Red>=</font> gatherName f <font color=Red>[</font>s<font color=Red>]</font> p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss <font color=Cyan>(</font>blank <font color=Cyan>(</font>selAny f<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line108)"></a>    <font color=Red>|</font> isDigit s       <font color=Red>=</font> gatherNum    <font color=Red>[</font>s<font color=Red>]</font> p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss <font color=Cyan>(</font>blank <font color=Cyan>(</font>selAny f<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line109)"></a>    <font color=Red>|</font> otherwise       <font color=Red>=</font> lexerror <font color=Magenta>"unrecognised pattern"</font> p
-<a name="(line110)"></a>
-<a name="(line111)"></a><a name="gatherName"></a>gatherName f acc pos p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font> k
-<a name="(line112)"></a>  <font color=Red>|</font> isAlphaNum s <font color=Cyan>||</font> s <font color=Cyan>`elem`</font> <font color=Magenta>"-_:"</font> <font color=Red>=</font> gatherName f <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
-<a name="(line113)"></a>gatherName f acc pos p ss k <font color=Red>=</font>
-<a name="(line114)"></a>  emit <font color=Cyan>(</font>TokString <font color=Cyan>(</font>f <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> k p ss
-<a name="(line115)"></a>
-<a name="(line116)"></a><a name="gatherNum"></a>gatherNum acc pos p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font> k
-<a name="(line117)"></a>  <font color=Red>|</font> isHexDigit s <font color=Red>=</font> gatherNum <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
-<a name="(line118)"></a>gatherNum acc pos p ss k <font color=Red>=</font>
-<a name="(line119)"></a>  emit <font color=Cyan>(</font>TokNum <font color=Cyan>(</font>read <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> k p ss
-<a name="(line120)"></a>
-<a name="(line121)"></a><a name="accumulateUntil"></a>accumulateUntil c tok acc pos  p  [] k <font color=Red>=</font>
-<a name="(line122)"></a>    lexerror <font color=Cyan>(</font><font color=Magenta>"found end of pattern while looking for "</font><font color=Cyan>++</font>c
-<a name="(line123)"></a>              <font color=Red><b>:</b></font><font color=Magenta>" to match opening quote at "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font> p
-<a name="(line124)"></a>accumulateUntil c tok acc pos  p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font> k
-<a name="(line125)"></a>    <font color=Red>|</font> c<font color=Cyan>==</font>s       <font color=Red>=</font> emit <font color=Cyan>(</font>TokString <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font>
-<a name="(line126)"></a>                                  emit tok p<font color=Red><b>:</b></font> k <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
-<a name="(line127)"></a>    <font color=Red>|</font> isSpace s  <font color=Red>=</font> accumulateUntil c tok <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>white s p<font color=Cyan>)</font> ss k
-<a name="(line128)"></a>    <font color=Red>|</font> otherwise  <font color=Red>=</font> accumulateUntil c tok <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Xtract/Lex.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | This is another hand-written lexer, this time for the Xtract</font>
+<a name="line-2"></a><font color=Blue>--   command-language.  The entry point is lexXtract.  You don't</font>
+<a name="line-3"></a><font color=Blue>--   normally need to use this module directly - the lexer is called</font>
+<a name="line-4"></a><font color=Blue>--   automatically by the parser.  (We only expose this interface</font>
+<a name="line-5"></a><font color=Blue>--   for debugging purposes.)</font>
+<a name="line-6"></a><font color=Blue>--</font>
+<a name="line-7"></a><font color=Blue>--   The Xtract command language is very like the XPath specification.</font>
+<a name="line-8"></a>
+<a name="line-9"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Xtract<font color=Cyan>.</font>Lex
+<a name="line-10"></a>  <font color=Cyan>(</font> lexXtract
+<a name="line-11"></a>  <font color=Cyan>,</font> Posn<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-12"></a>  <font color=Cyan>,</font> TokenT<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>
+<a name="line-13"></a>  <font color=Cyan>,</font> Token
+<a name="line-14"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-15"></a>
+<a name="line-16"></a><font color=Green><u>import</u></font> Char
+<a name="line-17"></a><font color=Green><u>import</u></font> List<font color=Cyan>(</font>isPrefixOf<font color=Cyan>)</font>
+<a name="line-18"></a>
+<a name="line-19"></a>
+<a name="line-20"></a><a name="Token"></a><font color=Green><u>type</u></font> Token <font color=Red>=</font> Either String <font color=Cyan>(</font>Posn<font color=Cyan>,</font> TokenT<font color=Cyan>)</font>
+<a name="line-21"></a>
+<a name="line-22"></a><a name="Posn"></a><font color=Green><u>data</u></font> Posn <font color=Red>=</font> Pn Int		<font color=Blue>-- char index only</font>
+<a name="line-23"></a>        <font color=Green><u>deriving</u></font> Eq
+<a name="line-24"></a>
+<a name="line-25"></a><font color=Green><u>instance</u></font> Show Posn <font color=Green><u>where</u></font>
+<a name="line-26"></a>      showsPrec p <font color=Cyan>(</font>Pn c<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"char pos "</font> <font color=Cyan>.</font> shows c
+<a name="line-27"></a>
+<a name="line-28"></a><a name="TokenT"></a><font color=Green><u>data</u></font> TokenT <font color=Red>=</font>
+<a name="line-29"></a>      Symbol String
+<a name="line-30"></a>    <font color=Red>|</font> TokString String		<font color=Blue>--     begins with letter</font>
+<a name="line-31"></a>    <font color=Red>|</font> TokNum Integer		<font color=Blue>--     begins with digit</font>
+<a name="line-32"></a>    <font color=Green><u>deriving</u></font> Eq
+<a name="line-33"></a>
+<a name="line-34"></a><font color=Green><u>instance</u></font> Show TokenT <font color=Green><u>where</u></font>
+<a name="line-35"></a>    showsPrec p <font color=Cyan>(</font>Symbol s<font color=Cyan>)</font> <font color=Red>=</font> showString s
+<a name="line-36"></a>    showsPrec p <font color=Cyan>(</font>TokString s<font color=Cyan>)</font> <font color=Red>=</font> showString s
+<a name="line-37"></a>    showsPrec p <font color=Cyan>(</font>TokNum n<font color=Cyan>)</font> <font color=Red>=</font> shows n
+<a name="line-38"></a>
+<a name="line-39"></a><a name="emit"></a><font color=Blue>emit</font> <font color=Red>::</font> TokenT <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> Token
+<a name="line-40"></a><font color=Blue>emit</font> tok p <font color=Red>=</font> forcep p <font color=Cyan>`seq`</font> Right <font color=Cyan>(</font>p<font color=Cyan>,</font>tok<font color=Cyan>)</font>
+<a name="line-41"></a>  <font color=Green><u>where</u></font> forcep <font color=Cyan>(</font>Pn n<font color=Cyan>)</font> <font color=Red>=</font> n
+<a name="line-42"></a>
+<a name="line-43"></a><a name="lexerror"></a><font color=Blue>lexerror</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
+<a name="line-44"></a><font color=Blue>lexerror</font> s p <font color=Red>=</font> <font color=Red>[</font>Left <font color=Cyan>(</font><font color=Magenta>"Lexical error in selection pattern at "</font><font color=Cyan>++</font>show p<font color=Cyan>++</font><font color=Magenta>": "</font>
+<a name="line-45"></a>                       <font color=Cyan>++</font>s<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-46"></a>
+<a name="line-47"></a><a name="addcol"></a><font color=Blue>addcol</font> <font color=Red>::</font> Int <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> Posn
+<a name="line-48"></a><font color=Blue>addcol</font> n <font color=Cyan>(</font>Pn c<font color=Cyan>)</font> <font color=Red>=</font> Pn <font color=Cyan>(</font>c<font color=Cyan>+</font>n<font color=Cyan>)</font>
+<a name="line-49"></a>
+<a name="line-50"></a><a name="newline"></a><font color=Blue>newline</font><font color=Cyan>,</font> tab <font color=Red>::</font> Posn <font color=Red>-&gt;</font> Posn
+<a name="line-51"></a><font color=Blue>newline</font> <font color=Cyan>(</font>Pn c<font color=Cyan>)</font> <font color=Red>=</font> Pn <font color=Cyan>(</font>c<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font>
+<a name="line-52"></a><a name="tab"></a><font color=Blue>tab</font>     <font color=Cyan>(</font>Pn c<font color=Cyan>)</font> <font color=Red>=</font> Pn <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>
+<a name="line-53"></a>
+<a name="line-54"></a><a name="white"></a><font color=Blue>white</font> <font color=Red>::</font> Char <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> Posn
+<a name="line-55"></a><font color=Blue>white</font> <font color=Magenta>'\t'</font> <font color=Red>=</font> tab
+<a name="line-56"></a><font color=Blue>white</font> <font color=Magenta>' '</font>  <font color=Red>=</font> addcol <font color=Magenta>1</font>
+<a name="line-57"></a><font color=Blue>white</font> <font color=Magenta>'\n'</font> <font color=Red>=</font> addcol <font color=Magenta>1</font>
+<a name="line-58"></a><font color=Blue>white</font> <font color=Magenta>'\r'</font> <font color=Red>=</font> addcol <font color=Magenta>1</font>
+<a name="line-59"></a><font color=Blue>white</font> <font color=Magenta>'\xa0'</font> <font color=Red>=</font> addcol <font color=Magenta>1</font>
+<a name="line-60"></a>
+<a name="line-61"></a><a name="blank"></a><font color=Blue>blank</font> <font color=Red>::</font> <font color=Cyan>(</font>Posn<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font><font color=Red>[</font>Token<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> Posn<font color=Red>-&gt;</font> String<font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
+<a name="line-62"></a><font color=Blue>blank</font> k p []       <font color=Red>=</font> []
+<a name="line-63"></a><font color=Blue>blank</font> k p <font color=Cyan>(</font><font color=Magenta>' '</font><font color=Red><b>:</b></font> s<font color=Cyan>)</font> <font color=Red>=</font> blank k <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> s
+<a name="line-64"></a><font color=Blue>blank</font> k p <font color=Cyan>(</font><font color=Magenta>'\t'</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font> <font color=Red>=</font> blank k <font color=Cyan>(</font>tab p<font color=Cyan>)</font> s
+<a name="line-65"></a><font color=Blue>blank</font> k p <font color=Cyan>(</font><font color=Magenta>'\n'</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font> <font color=Red>=</font> blank k <font color=Cyan>(</font>newline p<font color=Cyan>)</font> s
+<a name="line-66"></a><font color=Blue>blank</font> k p <font color=Cyan>(</font><font color=Magenta>'\r'</font><font color=Red><b>:</b></font>s<font color=Cyan>)</font> <font color=Red>=</font> blank k p s
+<a name="line-67"></a><font color=Blue>blank</font> k p <font color=Cyan>(</font><font color=Magenta>'\xa0'</font><font color=Red><b>:</b></font> s<font color=Cyan>)</font> <font color=Red>=</font> blank k <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> s
+<a name="line-68"></a><font color=Blue>blank</font> k p    s     <font color=Red>=</font> k p s
+<a name="line-69"></a>
+<a name="line-70"></a><a name="lexXtract"></a><font color=Blue>----</font>
+<a name="line-71"></a><font color=Blue>-- | First argument is a transformer for pattern strings, e.g. map toLower,</font>
+<a name="line-72"></a><font color=Blue>--   but only applying to parts of the pattern not in quotation marks.</font>
+<a name="line-73"></a><font color=Blue>--   (Needed to canonicalise HTML where tags are case-insensitive, but</font>
+<a name="line-74"></a><font color=Blue>--   attribute values are case sensitive.)</font>
+<a name="line-75"></a><font color=Blue>lexXtract</font> <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
+<a name="line-76"></a><font color=Blue>lexXtract</font> f <font color=Red>=</font> selAny f <font color=Cyan>(</font>Pn <font color=Magenta>1</font><font color=Cyan>)</font>
+<a name="line-77"></a>
+<a name="line-78"></a><a name="syms"></a><font color=Blue>syms</font> <font color=Red>=</font> <font color=Magenta>"/[]()@,=*&amp;|~$+-&lt;&gt;"</font>
+<a name="line-79"></a>
+<a name="line-80"></a><a name="selAny"></a><font color=Blue>selAny</font> <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Token<font color=Red>]</font>
+<a name="line-81"></a><font color=Blue>selAny</font> f p [] <font color=Red>=</font> []
+<a name="line-82"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>'/'</font><font color=Red><b>:</b></font><font color=Magenta>'/'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>"//"</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>2</font> p<font color=Cyan>)</font> ss
+<a name="line-83"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>'!'</font><font color=Red><b>:</b></font><font color=Magenta>'='</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>"!="</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>2</font> p<font color=Cyan>)</font> ss
+<a name="line-84"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>'&lt;'</font><font color=Red><b>:</b></font><font color=Magenta>'='</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>"&lt;="</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>2</font> p<font color=Cyan>)</font> ss
+<a name="line-85"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>'&gt;'</font><font color=Red><b>:</b></font><font color=Magenta>'='</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>"&gt;="</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>2</font> p<font color=Cyan>)</font> ss
+<a name="line-86"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>'\''</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>    <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>"'"</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>
+<a name="line-87"></a>                          accumulateUntil <font color=Magenta>'\''</font> <font color=Cyan>(</font>Symbol <font color=Magenta>"'"</font><font color=Cyan>)</font> [] p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-88"></a>                                          <font color=Cyan>(</font>selAny f<font color=Cyan>)</font>
+<a name="line-89"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>'"'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>     <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>"\""</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>
+<a name="line-90"></a>                          accumulateUntil <font color=Magenta>'"'</font> <font color=Cyan>(</font>Symbol <font color=Magenta>"\""</font><font color=Cyan>)</font> [] p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-91"></a>                                          <font color=Cyan>(</font>selAny f<font color=Cyan>)</font>
+<a name="line-92"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>'_'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>     <font color=Red>=</font> gatherName f <font color=Magenta>"_"</font> p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss <font color=Cyan>(</font>blank <font color=Cyan>(</font>selAny f<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-93"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>':'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>     <font color=Red>=</font> gatherName f <font color=Magenta>":"</font> p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss <font color=Cyan>(</font>blank <font color=Cyan>(</font>selAny f<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-94"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>'.'</font><font color=Red><b>:</b></font><font color=Magenta>'='</font><font color=Red><b>:</b></font><font color=Magenta>'.'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>".=."</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>3</font> p<font color=Cyan>)</font> ss
+<a name="line-95"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>'.'</font><font color=Red><b>:</b></font><font color=Magenta>'!'</font><font color=Red><b>:</b></font><font color=Magenta>'='</font><font color=Red><b>:</b></font><font color=Magenta>'.'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
+<a name="line-96"></a>                            <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>".!=."</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font> selAny f <font color=Cyan>(</font>addcol <font color=Magenta>4</font> p<font color=Cyan>)</font> ss
+<a name="line-97"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>'.'</font><font color=Red><b>:</b></font><font color=Magenta>'&lt;'</font><font color=Red><b>:</b></font><font color=Magenta>'.'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>".&lt;."</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>3</font> p<font color=Cyan>)</font> ss
+<a name="line-98"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>'.'</font><font color=Red><b>:</b></font><font color=Magenta>'&lt;'</font><font color=Red><b>:</b></font><font color=Magenta>'='</font><font color=Red><b>:</b></font><font color=Magenta>'.'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
+<a name="line-99"></a>                            <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>".&lt;=."</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font> selAny f <font color=Cyan>(</font>addcol <font color=Magenta>4</font> p<font color=Cyan>)</font> ss
+<a name="line-100"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>'.'</font><font color=Red><b>:</b></font><font color=Magenta>'&gt;'</font><font color=Red><b>:</b></font><font color=Magenta>'.'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font> <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>".&gt;."</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>3</font> p<font color=Cyan>)</font> ss
+<a name="line-101"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>'.'</font><font color=Red><b>:</b></font><font color=Magenta>'&gt;'</font><font color=Red><b>:</b></font><font color=Magenta>'='</font><font color=Red><b>:</b></font><font color=Magenta>'.'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
+<a name="line-102"></a>                            <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>".&gt;=."</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font> selAny f <font color=Cyan>(</font>addcol <font color=Magenta>4</font> p<font color=Cyan>)</font> ss
+<a name="line-103"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font><font color=Magenta>'.'</font><font color=Red><b>:</b></font><font color=Magenta>'/'</font><font color=Red><b>:</b></font>ss<font color=Cyan>)</font>     <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Magenta>"./"</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>  selAny f <font color=Cyan>(</font>addcol <font color=Magenta>2</font> p<font color=Cyan>)</font> ss
+<a name="line-104"></a><font color=Blue>selAny</font> f p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
+<a name="line-105"></a>    <font color=Red>|</font> s <font color=Cyan>`elem`</font> syms   <font color=Red>=</font> emit <font color=Cyan>(</font>Symbol <font color=Red>[</font>s<font color=Red>]</font><font color=Cyan>)</font> p<font color=Red><b>:</b></font>     selAny f <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-106"></a>    <font color=Red>|</font> isSpace s       <font color=Red>=</font> blank <font color=Cyan>(</font>selAny f<font color=Cyan>)</font> p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font>
+<a name="line-107"></a>    <font color=Red>|</font> isAlpha s       <font color=Red>=</font> gatherName f <font color=Red>[</font>s<font color=Red>]</font> p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss <font color=Cyan>(</font>blank <font color=Cyan>(</font>selAny f<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-108"></a>    <font color=Red>|</font> isDigit s       <font color=Red>=</font> gatherNum    <font color=Red>[</font>s<font color=Red>]</font> p <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss <font color=Cyan>(</font>blank <font color=Cyan>(</font>selAny f<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-109"></a>    <font color=Red>|</font> otherwise       <font color=Red>=</font> lexerror <font color=Magenta>"unrecognised pattern"</font> p
+<a name="line-110"></a>
+<a name="line-111"></a><a name="gatherName"></a><font color=Blue>gatherName</font> f acc pos p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font> k
+<a name="line-112"></a>  <font color=Red>|</font> isAlphaNum s <font color=Cyan>||</font> s <font color=Cyan>`elem`</font> <font color=Magenta>"-_:"</font> <font color=Red>=</font> gatherName f <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
+<a name="line-113"></a><font color=Blue>gatherName</font> f acc pos p ss k <font color=Red>=</font>
+<a name="line-114"></a>  emit <font color=Cyan>(</font>TokString <font color=Cyan>(</font>f <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> k p ss
+<a name="line-115"></a>
+<a name="line-116"></a><a name="gatherNum"></a><font color=Blue>gatherNum</font> acc pos p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font> k
+<a name="line-117"></a>  <font color=Red>|</font> isHexDigit s <font color=Red>=</font> gatherNum <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
+<a name="line-118"></a><font color=Blue>gatherNum</font> acc pos p ss k <font color=Red>=</font>
+<a name="line-119"></a>  emit <font color=Cyan>(</font>TokNum <font color=Cyan>(</font>read <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> k p ss
+<a name="line-120"></a>
+<a name="line-121"></a><a name="accumulateUntil"></a><font color=Blue>accumulateUntil</font> c tok acc pos  p  [] k <font color=Red>=</font>
+<a name="line-122"></a>    lexerror <font color=Cyan>(</font><font color=Magenta>"found end of pattern while looking for "</font><font color=Cyan>++</font>c
+<a name="line-123"></a>              <font color=Red><b>:</b></font><font color=Magenta>" to match opening quote at "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font> p
+<a name="line-124"></a><font color=Blue>accumulateUntil</font> c tok acc pos  p <font color=Cyan>(</font>s<font color=Red><b>:</b></font>ss<font color=Cyan>)</font> k
+<a name="line-125"></a>    <font color=Red>|</font> c<font color=Cyan>==</font>s       <font color=Red>=</font> emit <font color=Cyan>(</font>TokString <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font>
+<a name="line-126"></a>                                  emit tok p<font color=Red><b>:</b></font> k <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss
+<a name="line-127"></a>    <font color=Red>|</font> isSpace s  <font color=Red>=</font> accumulateUntil c tok <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>white s p<font color=Cyan>)</font> ss k
+<a name="line-128"></a>    <font color=Red>|</font> otherwise  <font color=Red>=</font> accumulateUntil c tok <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font> pos <font color=Cyan>(</font>addcol <font color=Magenta>1</font> p<font color=Cyan>)</font> ss k
 </pre>
+</body>
 </html>
diff --git a/docs/HaXml/src/Text/XML/HaXml/Xtract/Parse.html b/docs/HaXml/src/Text/XML/HaXml/Xtract/Parse.html
--- a/docs/HaXml/src/Text/XML/HaXml/Xtract/Parse.html
+++ b/docs/HaXml/src/Text/XML/HaXml/Xtract/Parse.html
@@ -1,421 +1,427 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <html>
-<pre><a name="(line1)"></a><font color=Blue>-- | A parser for the Xtract command-language.  (The string input is</font>
-<a name="(line2)"></a><font color=Blue>--   tokenised internally by the lexer 'lexXtract'.)</font>
-<a name="(line3)"></a><font color=Blue>--   See &lt;<a href="http://www.haskell.org/HaXml/Xtract.html">http://www.haskell.org/HaXml/Xtract.html</a>&gt; for the grammar that</font>
-<a name="(line4)"></a><font color=Blue>--   is accepted.</font>
-<a name="(line5)"></a>
-<a name="(line6)"></a><font color=Blue>--   Because the original Xtract grammar was left-recursive, we have</font>
-<a name="(line7)"></a><font color=Blue>--   transformed it into a non-left-recursive form.</font>
-<a name="(line8)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Xtract<font color=Cyan>.</font>Parse <font color=Cyan>(</font>parseXtract<font color=Cyan>,</font>xtract<font color=Cyan>)</font> <font color=Green><u>where</u></font>
-<a name="(line9)"></a>
-<a name="(line10)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly hiding <font color=Cyan>(</font>bracket<font color=Cyan>)</font>
-<a name="(line11)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Xtract<font color=Cyan>.</font>Lex
-<a name="(line12)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Xtract<font color=Cyan>.</font>Combinators <font color=Green><u>as</u></font> D
-<a name="(line13)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators <font color=Green><u>as</u></font> C
-<a name="(line14)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types <font color=Cyan>(</font>Content<font color=Cyan>)</font>
-<a name="(line15)"></a><font color=Green><u>import</u></font> List<font color=Cyan>(</font>isPrefixOf<font color=Cyan>)</font>
-<a name="(line16)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Escape <font color=Cyan>(</font>xmlUnEscapeContent<font color=Cyan>,</font>stdXmlEscaper<font color=Cyan>)</font>
-<a name="(line17)"></a>
-<a name="(line18)"></a><a name="unescape"></a><font color=Blue>-- output transformer - to ensure that text/references are glued together</font>
-<a name="(line19)"></a>unescape <font color=Red>=</font> xmlUnEscapeContent stdXmlEscaper
-<a name="(line20)"></a>
-<a name="(line21)"></a>
-<a name="(line22)"></a><a name="xtract"></a><font color=Blue>-- | To convert an Xtract query into an ordinary HaXml combinator expression.</font>
-<a name="(line23)"></a><font color=Blue>--   First arg is a tag-transformation function (e.g. map toLower) applied</font>
-<a name="(line24)"></a><font color=Blue>---  before matching.  Second arg is the query string.</font>
-<a name="(line25)"></a>xtract <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> CFilter i
-<a name="(line26)"></a>xtract f query
-<a name="(line27)"></a>    <font color=Red>|</font> interiorRef lexedQ <font color=Red>=</font> dfilter <font color=Cyan>(</font>parseXtract lexedQ<font color=Cyan>)</font>
-<a name="(line28)"></a>    <font color=Red>|</font> otherwise          <font color=Red>=</font> cfilter <font color=Cyan>(</font>parseXtract lexedQ<font color=Cyan>)</font>
-<a name="(line29)"></a>  <font color=Green><u>where</u></font>
-<a name="(line30)"></a>    lexedQ <font color=Red>=</font> lexXtract f query
-<a name="(line31)"></a>    <font color=Blue>-- test whether query has interior reference to doc root</font>
-<a name="(line32)"></a>    interiorRef <font color=Cyan>(</font>Right <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>Symbol s<font color=Cyan>)</font><font color=Red><b>:</b></font> Right <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>Symbol <font color=Magenta>"//"</font><font color=Cyan>)</font><font color=Red><b>:</b></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>
-<a name="(line33)"></a>                                          <font color=Red>|</font> s <font color=Cyan>`elem`</font> predicateIntro <font color=Red>=</font> True
-<a name="(line34)"></a>    interiorRef <font color=Cyan>(</font>Right <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>Symbol s<font color=Cyan>)</font><font color=Red><b>:</b></font> Right <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>Symbol <font color=Magenta>"/"</font><font color=Cyan>)</font><font color=Red><b>:</b></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>
-<a name="(line35)"></a>                                          <font color=Red>|</font> s <font color=Cyan>`elem`</font> predicateIntro <font color=Red>=</font> True
-<a name="(line36)"></a>    interiorRef <font color=Cyan>(</font><font color=Green><u>_</u></font> <font color=Red><b>:</b></font> rest<font color=Cyan>)</font> <font color=Red>=</font> interiorRef rest
-<a name="(line37)"></a>    interiorRef [] <font color=Red>=</font> False
-<a name="(line38)"></a>    predicateIntro <font color=Red>=</font> <font color=Red>[</font> <font color=Magenta>"["</font><font color=Cyan>,</font> <font color=Magenta>"("</font>
-<a name="(line39)"></a>                     <font color=Cyan>,</font>  <font color=Magenta>"&amp;"</font><font color=Cyan>,</font>   <font color=Magenta>"|"</font><font color=Cyan>,</font>  <font color=Magenta>"~"</font>
-<a name="(line40)"></a>                     <font color=Cyan>,</font>  <font color=Magenta>"="</font><font color=Cyan>,</font>  <font color=Magenta>"!="</font><font color=Cyan>,</font>  <font color=Magenta>"&lt;"</font><font color=Cyan>,</font>  <font color=Magenta>"&lt;="</font><font color=Cyan>,</font>  <font color=Magenta>"&gt;"</font><font color=Cyan>,</font>  <font color=Magenta>"&gt;="</font>
-<a name="(line41)"></a>                     <font color=Cyan>,</font> <font color=Magenta>".=."</font><font color=Cyan>,</font><font color=Magenta>".!=."</font><font color=Cyan>,</font><font color=Magenta>".&lt;."</font><font color=Cyan>,</font><font color=Magenta>".&lt;=."</font><font color=Cyan>,</font><font color=Magenta>".&gt;."</font><font color=Cyan>,</font><font color=Magenta>".&gt;=."</font> <font color=Red>]</font>
-<a name="(line42)"></a>
-<a name="(line43)"></a><a name="parseXtract"></a><font color=Blue>-- | The cool thing is that the Xtract command parser directly builds</font>
-<a name="(line44)"></a><font color=Blue>--   a higher-order 'DFilter' (see "Text.XML.HaXml.Xtract.Combinators")</font>
-<a name="(line45)"></a><font color=Blue>--   which can be applied to an XML document without further ado.</font>
-<a name="(line46)"></a><font color=Blue>--   (@parseXtract@ halts the program if a parse error is found.)</font>
-<a name="(line47)"></a>parseXtract <font color=Red>::</font> <font color=Red>[</font>Token<font color=Red>]</font> <font color=Red>-&gt;</font> DFilter i
-<a name="(line48)"></a>parseXtract <font color=Red>=</font> either error id <font color=Cyan>.</font> parseXtract'
-<a name="(line49)"></a>
-<a name="(line50)"></a><a name="parseXtract'"></a><font color=Blue>-- | @parseXtract'@ returns error messages through the Either type.</font>
-<a name="(line51)"></a>parseXtract' <font color=Red>::</font> <font color=Red>[</font>Token<font color=Red>]</font> <font color=Red>-&gt;</font> Either String <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
-<a name="(line52)"></a>parseXtract' <font color=Red>=</font> fst <font color=Cyan>.</font> runParser <font color=Cyan>(</font>aquery liftLocal<font color=Cyan>)</font>
-<a name="(line53)"></a>
-<a name="(line54)"></a><a name="XParser"></a><font color=Blue>---- Auxiliary Parsing Functions ----</font>
-<a name="(line55)"></a><a name="XParser"></a><font color=Green><u>type</u></font> XParser a <font color=Red>=</font> Parser <font color=Cyan>(</font>Either String <font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font><font color=Cyan>)</font> a
-<a name="(line56)"></a>
-<a name="(line57)"></a><a name="string"></a>string <font color=Red>::</font> XParser String
-<a name="(line58)"></a>string <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>inp <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> inp <font color=Green><u>of</u></font>
-<a name="(line59)"></a>                <font color=Cyan>(</font>Left err<font color=Red><b>:</b></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>err<font color=Cyan>)</font><font color=Cyan>,</font> inp<font color=Cyan>)</font>
-<a name="(line60)"></a>                <font color=Cyan>(</font>Right <font color=Cyan>(</font>p<font color=Cyan>,</font>TokString n<font color=Cyan>)</font><font color=Red><b>:</b></font>ts<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right n<font color=Cyan>,</font> ts<font color=Cyan>)</font>
-<a name="(line61)"></a>                ts <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font><font color=Magenta>"expected a string"</font><font color=Cyan>)</font><font color=Cyan>,</font> ts<font color=Cyan>)</font> <font color=Cyan>)</font>
-<a name="(line62)"></a><a name="number"></a>number <font color=Red>::</font> XParser Integer
-<a name="(line63)"></a>number <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>inp <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> inp <font color=Green><u>of</u></font>
-<a name="(line64)"></a>                <font color=Cyan>(</font>Left err<font color=Red><b>:</b></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>err<font color=Cyan>)</font><font color=Cyan>,</font> inp<font color=Cyan>)</font>
-<a name="(line65)"></a>                <font color=Cyan>(</font>Right <font color=Cyan>(</font>p<font color=Cyan>,</font>TokNum n<font color=Cyan>)</font><font color=Red><b>:</b></font>ts<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right n<font color=Cyan>,</font> ts<font color=Cyan>)</font>
-<a name="(line66)"></a>                ts <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font><font color=Magenta>"expected a number"</font><font color=Cyan>)</font><font color=Cyan>,</font> ts<font color=Cyan>)</font> <font color=Cyan>)</font>
-<a name="(line67)"></a><a name="symbol"></a>symbol <font color=Red>::</font> String <font color=Red>-&gt;</font> XParser ()
-<a name="(line68)"></a>symbol s <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>inp <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> inp <font color=Green><u>of</u></font>
-<a name="(line69)"></a>                <font color=Cyan>(</font>Left err<font color=Red><b>:</b></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>err<font color=Cyan>)</font><font color=Cyan>,</font> inp<font color=Cyan>)</font>
-<a name="(line70)"></a>                <font color=Cyan>(</font>Right <font color=Cyan>(</font>p<font color=Cyan>,</font> Symbol n<font color=Cyan>)</font><font color=Red><b>:</b></font>ts<font color=Cyan>)</font> <font color=Red>|</font> n<font color=Cyan>==</font>s <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right ()<font color=Cyan>,</font> ts<font color=Cyan>)</font>
-<a name="(line71)"></a>                ts <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font><font color=Magenta>"expected symbol "</font><font color=Cyan>++</font>s<font color=Cyan>)</font><font color=Cyan>,</font> ts<font color=Cyan>)</font> <font color=Cyan>)</font>
-<a name="(line72)"></a>
-<a name="(line73)"></a><a name="quote"></a>quote <font color=Red>=</font> oneOf <font color=Red>[</font> symbol <font color=Magenta>"'"</font><font color=Cyan>,</font>  symbol <font color=Magenta>"\""</font> <font color=Red>]</font>
-<a name="(line74)"></a>
-<a name="(line75)"></a><a name="pam"></a>pam fs x <font color=Red>=</font> <font color=Red>[</font> f x <font color=Red>|</font> f <font color=Red>&lt;-</font> fs <font color=Red>]</font>
-<a name="(line76)"></a>
-<a name="(line77)"></a>
-<a name="(line78)"></a><font color=Blue>{--- original Xtract grammar ----
-<a name="(line79)"></a>      query     = string			tagname
-<a name="(line80)"></a>                | string *			tagname prefix
-<a name="(line81)"></a>                | * string			tagname suffix
-<a name="(line82)"></a>                | *				any element
-<a name="(line83)"></a>                | -				chardata
-<a name="(line84)"></a>                | ( query )
-<a name="(line85)"></a>                | query / query			parent/child relationship
-<a name="(line86)"></a>                | query // query		deep inside
-<a name="(line87)"></a>                | query + query			union of queries
-<a name="(line88)"></a>                | query [predicate]
-<a name="(line89)"></a>                | query [positions]
-<a name="(line90)"></a>
-<a name="(line91)"></a>      predicate = quattr			has attribute
-<a name="(line92)"></a>                | quattr op ' string '		attribute has value
-<a name="(line93)"></a>                | quattr op " string "		attribute has value
-<a name="(line94)"></a>                | quattr op  quattr		attribute value comparison (lexical)
-<a name="(line95)"></a>                | quattr nop integer  		attribute has value (numerical)
-<a name="(line96)"></a>                | quattr nop quattr		attribute value comparison (numerical)
-<a name="(line97)"></a>                | ( predicate )			bracketting
-<a name="(line98)"></a>                | predicate &amp; predicate		logical and
-<a name="(line99)"></a>                | predicate | predicate		logical or
-<a name="(line100)"></a>                | ~ predicate			logical not
-<a name="(line101)"></a>
-<a name="(line102)"></a>      attribute = @ string			has attribute
-<a name="(line103)"></a>                | query / @ string		child has attribute
-<a name="(line104)"></a>                | -				has textual content
-<a name="(line105)"></a>                | query / -			child has textual content
-<a name="(line106)"></a>
-<a name="(line107)"></a>      quattr    = query
-<a name="(line108)"></a>                | attribute
-<a name="(line109)"></a>
-<a name="(line110)"></a>      op        =  =				equal to
-<a name="(line111)"></a>                |  !=				not equal to
-<a name="(line112)"></a>                |  &lt;				less than
-<a name="(line113)"></a>                |  &lt;=				less than or equal to
-<a name="(line114)"></a>                |  &gt;				greater than
-<a name="(line115)"></a>                |  &gt;=				greater than or equal to
-<a name="(line116)"></a>
-<a name="(line117)"></a>      nop       =  .=.				equal to
-<a name="(line118)"></a>                |  .!=.				not equal to
-<a name="(line119)"></a>                |  .&lt;.				less than
-<a name="(line120)"></a>                |  .&lt;=.				less than or equal to
-<a name="(line121)"></a>                |  .&gt;.				greater than
-<a name="(line122)"></a>                |  .&gt;=.				greater than or equal to
-<a name="(line123)"></a>
-<a name="(line124)"></a>      positions = position {, positions}	multiple positions
-<a name="(line125)"></a>                | position - position		ranges
-<a name="(line126)"></a>
-<a name="(line127)"></a>      position  = integer			numbering is from 0 upwards
-<a name="(line128)"></a>                | $				last
-<a name="(line129)"></a>
-<a name="(line130)"></a>
-<a name="(line131)"></a>---- transformed grammar (removing left recursion)
-<a name="(line132)"></a>      aquery = ./ tquery	-- current context
-<a name="(line133)"></a>             | tquery		-- also current context
-<a name="(line134)"></a>             | / tquery		-- root context
-<a name="(line135)"></a>             | // tquery	-- deep context from root
-<a name="(line136)"></a>
-<a name="(line137)"></a>      tquery = ( tquery ) xquery
-<a name="(line138)"></a>             | tag xquery
-<a name="(line139)"></a>             | -		-- fixes original grammar ("-/*" is incorrect)
-<a name="(line140)"></a>      
-<a name="(line141)"></a>      tag    = string *
-<a name="(line142)"></a>             | string
-<a name="(line143)"></a>             | * string
-<a name="(line144)"></a>             | *
-<a name="(line145)"></a>      
-<a name="(line146)"></a>      xquery = / tquery
-<a name="(line147)"></a>             | // tquery
-<a name="(line148)"></a>             | / @ string	-- new: print attribute value
-<a name="(line149)"></a>             | + tquery
-<a name="(line150)"></a>             | [ tpredicate ] xquery
-<a name="(line151)"></a>             | [ positions ] xquery
-<a name="(line152)"></a>             | lambda
-<a name="(line153)"></a>
-<a name="(line154)"></a>      tpredicate = vpredicate upredicate
-<a name="(line155)"></a>      upredicate = &amp; tpredicate
-<a name="(line156)"></a>                 | | tpredicate
-<a name="(line157)"></a>                 | lambda
-<a name="(line158)"></a>      vpredicate = ( tpredicate )
-<a name="(line159)"></a>                 | ~ tpredicate
-<a name="(line160)"></a>                 | tattribute
-<a name="(line161)"></a>
-<a name="(line162)"></a>      tattribute = aquery uattribute
-<a name="(line163)"></a>                 | @ string vattribute
-<a name="(line164)"></a>      uattribute = / @ string vattribute
-<a name="(line165)"></a>                 | vattribute
-<a name="(line166)"></a>      vattribute = op wattribute
-<a name="(line167)"></a>                 | op ' string '
-<a name="(line168)"></a>                 | nop wattribute
-<a name="(line169)"></a>                 | nop integer
-<a name="(line170)"></a>                 | lambda
-<a name="(line171)"></a>      wattribute = @ string
-<a name="(line172)"></a>                 | aquery / @ string
-<a name="(line173)"></a>                 | aquery
-<a name="(line174)"></a>
-<a name="(line175)"></a>      positions  = simplepos commapos
-<a name="(line176)"></a>      simplepos  = integer range
-<a name="(line177)"></a>                 | $
-<a name="(line178)"></a>      range      = - integer
-<a name="(line179)"></a>                 | - $
-<a name="(line180)"></a>                 | lambda
-<a name="(line181)"></a>      commapos   = , simplepos commapos
-<a name="(line182)"></a>                 | lambda
-<a name="(line183)"></a>
-<a name="(line184)"></a>      op         =  =
-<a name="(line185)"></a>                 |  !=
-<a name="(line186)"></a>                 |  &lt;
-<a name="(line187)"></a>                 |  &lt;=
-<a name="(line188)"></a>                 |  &gt;
-<a name="(line189)"></a>                 |  &gt;=
-<a name="(line190)"></a>
-<a name="(line191)"></a>      nop        =  .=.
-<a name="(line192)"></a>                 |  .!=.
-<a name="(line193)"></a>                 |  .&lt;.
-<a name="(line194)"></a>                 |  .&lt;=.
-<a name="(line195)"></a>                 |  .&gt;.
-<a name="(line196)"></a>                 |  .&gt;=.
-<a name="(line197)"></a>-}</font>
-<a name="(line198)"></a>
-<a name="(line199)"></a><a name="bracket"></a>bracket <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser a
-<a name="(line200)"></a>bracket p <font color=Red>=</font>
-<a name="(line201)"></a>  <font color=Green><u>do</u></font> symbol <font color=Magenta>"("</font>
-<a name="(line202)"></a>     x <font color=Red>&lt;-</font> p
-<a name="(line203)"></a>     symbol <font color=Magenta>")"</font>
-<a name="(line204)"></a>     return x
-<a name="(line205)"></a>
-<a name="(line206)"></a>
-<a name="(line207)"></a><font color=Blue>---- Xtract parsers ----</font>
-<a name="(line208)"></a>
-<a name="(line209)"></a><a name="aquery"></a><font color=Blue>-- aquery chooses to search from the root, or only in local context</font>
-<a name="(line210)"></a>aquery <font color=Red>::</font>  <font color=Cyan>(</font><font color=Cyan>(</font>CFilter i<font color=Red>-&gt;</font>CFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>DFilter i<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line211)"></a>           <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
-<a name="(line212)"></a>aquery lift <font color=Red>=</font> oneOf
-<a name="(line213)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"//"</font>
-<a name="(line214)"></a>         tquery <font color=Red>[</font>lift C<font color=Cyan>.</font>multi<font color=Red>]</font>
-<a name="(line215)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"/"</font>
-<a name="(line216)"></a>         tquery <font color=Red>[</font>lift id<font color=Red>]</font>
-<a name="(line217)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"./"</font>
-<a name="(line218)"></a>         tquery <font color=Red>[</font><font color=Cyan>(</font>local C<font color=Cyan>.</font>keep D<font color=Cyan>./&gt;</font><font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line219)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> tquery <font color=Red>[</font><font color=Cyan>(</font>local C<font color=Cyan>.</font>keep D<font color=Cyan>./&gt;</font><font color=Cyan>)</font><font color=Red>]</font>
-<a name="(line220)"></a>    <font color=Red>]</font>
-<a name="(line221)"></a>
-<a name="(line222)"></a><a name="tquery"></a>tquery <font color=Red>::</font> <font color=Red>[</font>DFilter i<font color=Red>-&gt;</font>DFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
-<a name="(line223)"></a>tquery [] <font color=Red>=</font> tquery <font color=Red>[</font>id<font color=Red>]</font>
-<a name="(line224)"></a>tquery <font color=Cyan>(</font>qf<font color=Red><b>:</b></font>cxt<font color=Cyan>)</font> <font color=Red>=</font> oneOf
-<a name="(line225)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> q <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tquery <font color=Cyan>(</font>qf<font color=Red><b>:</b></font>qf<font color=Red><b>:</b></font>cxt<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line226)"></a>         xquery cxt q
-<a name="(line227)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> q <font color=Red>&lt;-</font> xtag
-<a name="(line228)"></a>         xquery cxt <font color=Cyan>(</font>qf <font color=Cyan>(</font><font color=Cyan>(</font>unescape <font color=Cyan>.</font><font color=Cyan>)</font><font color=Cyan>.</font>q<font color=Cyan>)</font><font color=Cyan>)</font>	<font color=Blue>-- glue inners texts together</font>
-<a name="(line229)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"-"</font>
-<a name="(line230)"></a>         return <font color=Cyan>(</font>qf <font color=Cyan>(</font>local C<font color=Cyan>.</font>txt<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line231)"></a>    <font color=Red>]</font>
-<a name="(line232)"></a>
-<a name="(line233)"></a><a name="xtag"></a>xtag <font color=Red>::</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
-<a name="(line234)"></a>xtag <font color=Red>=</font> oneOf
-<a name="(line235)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> s <font color=Red>&lt;-</font> string
-<a name="(line236)"></a>         symbol <font color=Magenta>"*"</font>
-<a name="(line237)"></a>         return <font color=Cyan>(</font>local <font color=Cyan>(</font>C<font color=Cyan>.</font>tagWith <font color=Cyan>(</font>s <font color=Cyan>`isPrefixOf`</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line238)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> s <font color=Red>&lt;-</font> string
-<a name="(line239)"></a>         return <font color=Cyan>(</font>local <font color=Cyan>(</font>C<font color=Cyan>.</font>tag s<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line240)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"*"</font>
-<a name="(line241)"></a>         s <font color=Red>&lt;-</font> string
-<a name="(line242)"></a>         return <font color=Cyan>(</font>local <font color=Cyan>(</font>C<font color=Cyan>.</font>tagWith <font color=Cyan>(</font><font color=Cyan>(</font><font color=Cyan>(</font>reverse s<font color=Cyan>)</font> <font color=Cyan>`isPrefixOf`</font><font color=Cyan>)</font> <font color=Cyan>.</font> reverse<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line243)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"*"</font>
-<a name="(line244)"></a>         return <font color=Cyan>(</font>local C<font color=Cyan>.</font>elm<font color=Cyan>)</font>
-<a name="(line245)"></a>    <font color=Red>]</font>
-<a name="(line246)"></a>
-<a name="(line247)"></a>
-<a name="(line248)"></a><a name="xquery"></a>xquery <font color=Red>::</font> <font color=Red>[</font>DFilter i<font color=Red>-&gt;</font>DFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
-<a name="(line249)"></a>xquery cxt q1 <font color=Red>=</font> oneOf
-<a name="(line250)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"/"</font>
-<a name="(line251)"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"@"</font>
-<a name="(line252)"></a>              attr <font color=Red>&lt;-</font> string
-<a name="(line253)"></a>              return <font color=Cyan>(</font>D<font color=Cyan>.</font>iffind attr <font color=Cyan>(</font><font color=Red>\</font>s<font color=Red>-&gt;</font>local <font color=Cyan>(</font>C<font color=Cyan>.</font>literal s<font color=Cyan>)</font><font color=Cyan>)</font> D<font color=Cyan>.</font>none <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> q1<font color=Cyan>)</font>
-<a name="(line254)"></a>           <font color=Cyan>`onFail`</font>
-<a name="(line255)"></a>           tquery <font color=Cyan>(</font><font color=Cyan>(</font>q1 D<font color=Cyan>./&gt;</font><font color=Cyan>)</font><font color=Red><b>:</b></font>cxt<font color=Cyan>)</font> <font color=Cyan>)</font>
-<a name="(line256)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"//"</font>
-<a name="(line257)"></a>         tquery <font color=Cyan>(</font><font color=Cyan>(</font><font color=Red>\</font>q2<font color=Red>-&gt;</font> <font color=Cyan>(</font>liftLocal C<font color=Cyan>.</font>multi<font color=Cyan>)</font> q2
-<a name="(line258)"></a>                            <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> local C<font color=Cyan>.</font>children <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> q1<font color=Cyan>)</font><font color=Red><b>:</b></font>cxt<font color=Cyan>)</font>
-<a name="(line259)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"+"</font>
-<a name="(line260)"></a>         q2 <font color=Red>&lt;-</font> tquery cxt
-<a name="(line261)"></a>         return <font color=Cyan>(</font>D<font color=Cyan>.</font>cat <font color=Red>[</font>q1<font color=Cyan>,</font>q2<font color=Red>]</font><font color=Cyan>)</font>
-<a name="(line262)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"["</font>
-<a name="(line263)"></a>         is <font color=Red>&lt;-</font> iindex	<font color=Blue>-- now extended to multiple indexes</font>
-<a name="(line264)"></a>         symbol <font color=Magenta>"]"</font>
-<a name="(line265)"></a>         xquery cxt <font color=Cyan>(</font><font color=Red>\</font>xml<font color=Red>-&gt;</font> concat <font color=Cyan>.</font> pam is <font color=Cyan>.</font> q1 xml<font color=Cyan>)</font>
-<a name="(line266)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"["</font>
-<a name="(line267)"></a>         p <font color=Red>&lt;-</font> tpredicate
-<a name="(line268)"></a>         symbol <font color=Magenta>"]"</font>
-<a name="(line269)"></a>         xquery cxt <font color=Cyan>(</font>q1 <font color=Cyan>`</font>D<font color=Cyan>.</font>with<font color=Cyan>`</font> p<font color=Cyan>)</font>
-<a name="(line270)"></a>    <font color=Cyan>,</font> return q1
-<a name="(line271)"></a>    <font color=Red>]</font>
-<a name="(line272)"></a>
-<a name="(line273)"></a><a name="tpredicate"></a>tpredicate <font color=Red>::</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
-<a name="(line274)"></a>tpredicate <font color=Red>=</font>
-<a name="(line275)"></a>  <font color=Green><u>do</u></font> p <font color=Red>&lt;-</font> vpredicate
-<a name="(line276)"></a>     f <font color=Red>&lt;-</font> upredicate
-<a name="(line277)"></a>     return <font color=Cyan>(</font>f p<font color=Cyan>)</font>
-<a name="(line278)"></a>
-<a name="(line279)"></a><a name="upredicate"></a>upredicate <font color=Red>::</font> XParser <font color=Cyan>(</font>DFilter i<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font>
-<a name="(line280)"></a>upredicate <font color=Red>=</font> oneOf
-<a name="(line281)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"&amp;"</font>
-<a name="(line282)"></a>         p2 <font color=Red>&lt;-</font> tpredicate
-<a name="(line283)"></a>         return <font color=Cyan>(</font><font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> p2<font color=Cyan>)</font>
-<a name="(line284)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"|"</font>
-<a name="(line285)"></a>         p2 <font color=Red>&lt;-</font> tpredicate
-<a name="(line286)"></a>         return <font color=Cyan>(</font>D<font color=Cyan>.|&gt;|</font> p2<font color=Cyan>)</font>
-<a name="(line287)"></a>    <font color=Cyan>,</font> return id
-<a name="(line288)"></a>    <font color=Red>]</font>
-<a name="(line289)"></a>
-<a name="(line290)"></a><a name="vpredicate"></a>vpredicate <font color=Red>::</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
-<a name="(line291)"></a>vpredicate <font color=Red>=</font> oneOf
-<a name="(line292)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> bracket tpredicate
-<a name="(line293)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"~"</font>
-<a name="(line294)"></a>         p <font color=Red>&lt;-</font> tpredicate
-<a name="(line295)"></a>         return <font color=Cyan>(</font>local C<font color=Cyan>.</font>keep <font color=Cyan>`</font>D<font color=Cyan>.</font>without<font color=Cyan>`</font> p<font color=Cyan>)</font>
-<a name="(line296)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> tattribute
-<a name="(line297)"></a>    <font color=Red>]</font>
-<a name="(line298)"></a>
-<a name="(line299)"></a><a name="tattribute"></a>tattribute <font color=Red>::</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
-<a name="(line300)"></a>tattribute <font color=Red>=</font> oneOf
-<a name="(line301)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> q <font color=Red>&lt;-</font> aquery liftGlobal
-<a name="(line302)"></a>         uattribute q
-<a name="(line303)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"@"</font>
-<a name="(line304)"></a>         s <font color=Red>&lt;-</font> string
-<a name="(line305)"></a>         vattribute <font color=Cyan>(</font>local C<font color=Cyan>.</font>keep<font color=Cyan>,</font> local <font color=Cyan>(</font>C<font color=Cyan>.</font>attr s<font color=Cyan>)</font><font color=Cyan>,</font> D<font color=Cyan>.</font>iffind s<font color=Cyan>)</font>
-<a name="(line306)"></a>    <font color=Red>]</font>
-<a name="(line307)"></a>
-<a name="(line308)"></a><a name="uattribute"></a>uattribute <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
-<a name="(line309)"></a>uattribute q <font color=Red>=</font> oneOf
-<a name="(line310)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"/"</font>
-<a name="(line311)"></a>         symbol <font color=Magenta>"@"</font>
-<a name="(line312)"></a>         s <font color=Red>&lt;-</font> string
-<a name="(line313)"></a>         vattribute <font color=Cyan>(</font>q<font color=Cyan>,</font> local <font color=Cyan>(</font>C<font color=Cyan>.</font>attr s<font color=Cyan>)</font><font color=Cyan>,</font> D<font color=Cyan>.</font>iffind s<font color=Cyan>)</font>
-<a name="(line314)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> vattribute <font color=Cyan>(</font>q<font color=Cyan>,</font> local C<font color=Cyan>.</font>keep<font color=Cyan>,</font>     D<font color=Cyan>.</font>ifTxt<font color=Cyan>)</font>
-<a name="(line315)"></a>    <font color=Red>]</font>
-<a name="(line316)"></a>
-<a name="(line317)"></a><a name="vattribute"></a>vattribute <font color=Red>::</font> <font color=Cyan>(</font>DFilter i<font color=Cyan>,</font> DFilter i<font color=Cyan>,</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font><font color=Red>-&gt;</font>DFilter i<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font>
-<a name="(line318)"></a>              <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
-<a name="(line319)"></a>vattribute <font color=Cyan>(</font>q<font color=Cyan>,</font>a<font color=Cyan>,</font>iffn<font color=Cyan>)</font> <font color=Red>=</font> oneOf
-<a name="(line320)"></a>  <font color=Red>[</font> <font color=Green><u>do</u></font> cmp <font color=Red>&lt;-</font> op
-<a name="(line321)"></a>       quote
-<a name="(line322)"></a>       s2 <font color=Red>&lt;-</font> string
-<a name="(line323)"></a>       quote
-<a name="(line324)"></a>       return <font color=Cyan>(</font><font color=Cyan>(</font>iffn <font color=Cyan>(</font><font color=Red>\</font>s1<font color=Red>-&gt;</font><font color=Green><u>if</u></font> cmp s1 s2 <font color=Green><u>then</u></font> D<font color=Cyan>.</font>keep <font color=Green><u>else</u></font> D<font color=Cyan>.</font>none<font color=Cyan>)</font> D<font color=Cyan>.</font>none<font color=Cyan>)</font>
-<a name="(line325)"></a>               <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> q<font color=Cyan>)</font>
-<a name="(line326)"></a>  <font color=Cyan>,</font> <font color=Green><u>do</u></font> cmp <font color=Red>&lt;-</font> op
-<a name="(line327)"></a>       <font color=Cyan>(</font>q2<font color=Cyan>,</font>iffn2<font color=Cyan>)</font> <font color=Red>&lt;-</font> wattribute
-<a name="(line328)"></a>       return <font color=Cyan>(</font><font color=Cyan>(</font>iffn <font color=Cyan>(</font><font color=Red>\</font>s1<font color=Red>-&gt;</font> iffn2 <font color=Cyan>(</font><font color=Red>\</font>s2<font color=Red>-&gt;</font> <font color=Green><u>if</u></font> cmp s1 s2 <font color=Green><u>then</u></font> D<font color=Cyan>.</font>keep <font color=Green><u>else</u></font> D<font color=Cyan>.</font>none<font color=Cyan>)</font>
-<a name="(line329)"></a>                                  D<font color=Cyan>.</font>none<font color=Cyan>)</font>
-<a name="(line330)"></a>                     D<font color=Cyan>.</font>none<font color=Cyan>)</font> <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> q<font color=Cyan>)</font>
-<a name="(line331)"></a>  <font color=Cyan>,</font> <font color=Green><u>do</u></font> cmp <font color=Red>&lt;-</font> nop
-<a name="(line332)"></a>       n <font color=Red>&lt;-</font> number
-<a name="(line333)"></a>       return <font color=Cyan>(</font><font color=Cyan>(</font>iffn <font color=Cyan>(</font><font color=Red>\</font>s<font color=Red>-&gt;</font><font color=Green><u>if</u></font> cmp <font color=Cyan>(</font>read s<font color=Cyan>)</font> n <font color=Green><u>then</u></font> D<font color=Cyan>.</font>keep <font color=Green><u>else</u></font> D<font color=Cyan>.</font>none<font color=Cyan>)</font> D<font color=Cyan>.</font>none<font color=Cyan>)</font>
-<a name="(line334)"></a>               <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> q<font color=Cyan>)</font>
-<a name="(line335)"></a>  <font color=Cyan>,</font> <font color=Green><u>do</u></font> cmp <font color=Red>&lt;-</font> nop
-<a name="(line336)"></a>       <font color=Cyan>(</font>q2<font color=Cyan>,</font>iffn2<font color=Cyan>)</font> <font color=Red>&lt;-</font> wattribute
-<a name="(line337)"></a>       return <font color=Cyan>(</font><font color=Cyan>(</font>iffn <font color=Cyan>(</font><font color=Red>\</font>s1<font color=Red>-&gt;</font> iffn2 <font color=Cyan>(</font><font color=Red>\</font>s2<font color=Red>-&gt;</font> <font color=Green><u>if</u></font> cmp <font color=Cyan>(</font>read s1<font color=Cyan>)</font> <font color=Cyan>(</font>read s2<font color=Cyan>)</font> <font color=Green><u>then</u></font> D<font color=Cyan>.</font>keep
-<a name="(line338)"></a>                                                                    <font color=Green><u>else</u></font> D<font color=Cyan>.</font>none<font color=Cyan>)</font>
-<a name="(line339)"></a>                                  D<font color=Cyan>.</font>none<font color=Cyan>)</font>
-<a name="(line340)"></a>                     D<font color=Cyan>.</font>none<font color=Cyan>)</font> <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> q<font color=Cyan>)</font>
-<a name="(line341)"></a>  <font color=Cyan>,</font> <font color=Green><u>do</u></font> return <font color=Cyan>(</font><font color=Cyan>(</font>a <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> q<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line342)"></a>  <font color=Red>]</font>
-<a name="(line343)"></a>
-<a name="(line344)"></a><a name="wattribute"></a>wattribute <font color=Red>::</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>,</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font><font color=Red>-&gt;</font>DFilter i<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font>
-<a name="(line345)"></a>wattribute <font color=Red>=</font> oneOf
-<a name="(line346)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"@"</font>
-<a name="(line347)"></a>         s <font color=Red>&lt;-</font> string
-<a name="(line348)"></a>         return <font color=Cyan>(</font>D<font color=Cyan>.</font>keep<font color=Cyan>,</font> D<font color=Cyan>.</font>iffind s<font color=Cyan>)</font>
-<a name="(line349)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> q <font color=Red>&lt;-</font> aquery liftGlobal
-<a name="(line350)"></a>         symbol <font color=Magenta>"/"</font>
-<a name="(line351)"></a>         symbol <font color=Magenta>"@"</font>
-<a name="(line352)"></a>         s <font color=Red>&lt;-</font> string
-<a name="(line353)"></a>         return <font color=Cyan>(</font>q<font color=Cyan>,</font> D<font color=Cyan>.</font>iffind s<font color=Cyan>)</font>
-<a name="(line354)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> q <font color=Red>&lt;-</font> aquery liftGlobal
-<a name="(line355)"></a>         return <font color=Cyan>(</font>q<font color=Cyan>,</font> D<font color=Cyan>.</font>ifTxt<font color=Cyan>)</font>
-<a name="(line356)"></a>    <font color=Red>]</font>
-<a name="(line357)"></a>
-<a name="(line358)"></a>
-<a name="(line359)"></a><a name="iindex"></a>iindex <font color=Red>::</font> XParser <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>]</font>
-<a name="(line360)"></a>iindex <font color=Red>=</font>
-<a name="(line361)"></a>    <font color=Green><u>do</u></font> i <font color=Red>&lt;-</font> simpleindex
-<a name="(line362)"></a>       is <font color=Red>&lt;-</font> idxcomma
-<a name="(line363)"></a>       return <font color=Cyan>(</font>i<font color=Red><b>:</b></font>is<font color=Cyan>)</font>
-<a name="(line364)"></a>
-<a name="(line365)"></a><a name="simpleindex"></a>simpleindex <font color=Red>::</font> XParser <font color=Cyan>(</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=Cyan>)</font>
-<a name="(line366)"></a>simpleindex <font color=Red>=</font> oneOf
-<a name="(line367)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> n <font color=Red>&lt;-</font> number
-<a name="(line368)"></a>         r <font color=Red>&lt;-</font> rrange n
-<a name="(line369)"></a>         return r
-<a name="(line370)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"$"</font>
-<a name="(line371)"></a>         return <font color=Cyan>(</font>C<font color=Cyan>.</font>keep <font color=Cyan>.</font> last<font color=Cyan>)</font>
-<a name="(line372)"></a>    <font color=Red>]</font>
-<a name="(line373)"></a>
-<a name="(line374)"></a><a name="rrange"></a>rrange<font color=Cyan>,</font> numberdollar <font color=Red>::</font> Integer <font color=Red>-&gt;</font> XParser <font color=Cyan>(</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=Cyan>)</font>
-<a name="(line375)"></a>rrange n1 <font color=Red>=</font> oneOf
-<a name="(line376)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"-"</font>
-<a name="(line377)"></a>         numberdollar n1
-<a name="(line378)"></a>    <font color=Cyan>,</font> return <font color=Cyan>(</font>C<font color=Cyan>.</font>keep<font color=Cyan>.</font><font color=Cyan>(</font><font color=Cyan>!!</font><font color=Cyan>(</font>fromInteger n1<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line379)"></a>    <font color=Red>]</font>
-<a name="(line380)"></a>
-<a name="(line381)"></a><a name="numberdollar"></a>numberdollar n1 <font color=Red>=</font> oneOf
-<a name="(line382)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> n2 <font color=Red>&lt;-</font> number
-<a name="(line383)"></a>         return <font color=Cyan>(</font>take <font color=Cyan>(</font>fromInteger <font color=Cyan>(</font><font color=Magenta>1</font><font color=Cyan>+</font>n2<font color=Blue>-</font>n1<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>.</font> drop <font color=Cyan>(</font>fromInteger n1<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line384)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"$"</font>
-<a name="(line385)"></a>         return <font color=Cyan>(</font>drop <font color=Cyan>(</font>fromInteger n1<font color=Cyan>)</font><font color=Cyan>)</font>
-<a name="(line386)"></a>    <font color=Red>]</font>
-<a name="(line387)"></a>
-<a name="(line388)"></a><a name="idxcomma"></a>idxcomma <font color=Red>::</font> XParser <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>]</font>
-<a name="(line389)"></a>idxcomma <font color=Red>=</font> oneOf
-<a name="(line390)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>","</font>
-<a name="(line391)"></a>         r <font color=Red>&lt;-</font> simpleindex
-<a name="(line392)"></a>         rs <font color=Red>&lt;-</font> idxcomma
-<a name="(line393)"></a>         return <font color=Cyan>(</font>r<font color=Red><b>:</b></font>rs<font color=Cyan>)</font>
-<a name="(line394)"></a>    <font color=Cyan>,</font> return []
-<a name="(line395)"></a>    <font color=Red>]</font>
-<a name="(line396)"></a>
-<a name="(line397)"></a>
-<a name="(line398)"></a><a name="op"></a>op <font color=Red>::</font> XParser <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font>
-<a name="(line399)"></a>op <font color=Red>=</font> oneOf
-<a name="(line400)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"="</font><font color=Cyan>;</font>  return <font color=Cyan>(</font><font color=Cyan>==</font><font color=Cyan>)</font>
-<a name="(line401)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"!="</font><font color=Cyan>;</font> return <font color=Cyan>(</font><font color=Cyan>/=</font><font color=Cyan>)</font>
-<a name="(line402)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"&lt;"</font><font color=Cyan>;</font>  return <font color=Cyan>(</font><font color=Cyan>&lt;</font><font color=Cyan>)</font>
-<a name="(line403)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"&lt;="</font><font color=Cyan>;</font> return <font color=Cyan>(</font><font color=Cyan>&lt;=</font><font color=Cyan>)</font>
-<a name="(line404)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"&gt;"</font><font color=Cyan>;</font>  return <font color=Cyan>(</font><font color=Cyan>&gt;</font><font color=Cyan>)</font>
-<a name="(line405)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"&gt;="</font><font color=Cyan>;</font> return <font color=Cyan>(</font><font color=Cyan>&gt;=</font><font color=Cyan>)</font>
-<a name="(line406)"></a>    <font color=Red>]</font>
-<a name="(line407)"></a>
-<a name="(line408)"></a><a name="nop"></a>nop <font color=Red>::</font> XParser <font color=Cyan>(</font>Integer<font color=Red>-&gt;</font>Integer<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font>
-<a name="(line409)"></a>nop <font color=Red>=</font> oneOf
-<a name="(line410)"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>".=."</font><font color=Cyan>;</font>  return <font color=Cyan>(</font><font color=Cyan>==</font><font color=Cyan>)</font>
-<a name="(line411)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>".!=."</font><font color=Cyan>;</font> return <font color=Cyan>(</font><font color=Cyan>/=</font><font color=Cyan>)</font>
-<a name="(line412)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>".&lt;."</font><font color=Cyan>;</font>  return <font color=Cyan>(</font><font color=Cyan>&lt;</font><font color=Cyan>)</font>
-<a name="(line413)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>".&lt;=."</font><font color=Cyan>;</font> return <font color=Cyan>(</font><font color=Cyan>&lt;=</font><font color=Cyan>)</font>
-<a name="(line414)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>".&gt;."</font><font color=Cyan>;</font>  return <font color=Cyan>(</font><font color=Cyan>&gt;</font><font color=Cyan>)</font>
-<a name="(line415)"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>".&gt;=."</font><font color=Cyan>;</font> return <font color=Cyan>(</font><font color=Cyan>&gt;=</font><font color=Cyan>)</font>
-<a name="(line416)"></a>    <font color=Red>]</font>
-<a name="(line417)"></a>
+<head>
+<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
+<title>src/Text/XML/HaXml/Xtract/Parse.hs</title>
+</head>
+<body>
+<pre><a name="line-1"></a><font color=Blue>-- | A parser for the Xtract command-language.  (The string input is</font>
+<a name="line-2"></a><font color=Blue>--   tokenised internally by the lexer 'lexXtract'.)</font>
+<a name="line-3"></a><font color=Blue>--   See &lt;<a href="http://www.haskell.org/HaXml/Xtract.html">http://www.haskell.org/HaXml/Xtract.html</a>&gt; for the grammar that</font>
+<a name="line-4"></a><font color=Blue>--   is accepted.</font>
+<a name="line-5"></a>
+<a name="line-6"></a><font color=Blue>--   Because the original Xtract grammar was left-recursive, we have</font>
+<a name="line-7"></a><font color=Blue>--   transformed it into a non-left-recursive form.</font>
+<a name="line-8"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Xtract<font color=Cyan>.</font>Parse <font color=Cyan>(</font>parseXtract<font color=Cyan>,</font>xtract<font color=Cyan>)</font> <font color=Green><u>where</u></font>
+<a name="line-9"></a>
+<a name="line-10"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly hiding <font color=Cyan>(</font>bracket<font color=Cyan>)</font>
+<a name="line-11"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Xtract<font color=Cyan>.</font>Lex
+<a name="line-12"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Xtract<font color=Cyan>.</font>Combinators <font color=Green><u>as</u></font> D
+<a name="line-13"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators <font color=Green><u>as</u></font> C
+<a name="line-14"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types <font color=Cyan>(</font>Content<font color=Cyan>)</font>
+<a name="line-15"></a><font color=Green><u>import</u></font> List<font color=Cyan>(</font>isPrefixOf<font color=Cyan>)</font>
+<a name="line-16"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Escape <font color=Cyan>(</font>xmlUnEscapeContent<font color=Cyan>,</font>stdXmlEscaper<font color=Cyan>)</font>
+<a name="line-17"></a>
+<a name="line-18"></a><a name="unescape"></a><font color=Blue>-- output transformer - to ensure that text/references are glued together</font>
+<a name="line-19"></a><font color=Blue>unescape</font> <font color=Red>=</font> xmlUnEscapeContent stdXmlEscaper
+<a name="line-20"></a>
+<a name="line-21"></a>
+<a name="line-22"></a><a name="xtract"></a><font color=Blue>-- | To convert an Xtract query into an ordinary HaXml combinator expression.</font>
+<a name="line-23"></a><font color=Blue>--   First arg is a tag-transformation function (e.g. map toLower) applied</font>
+<a name="line-24"></a><font color=Blue>---  before matching.  Second arg is the query string.</font>
+<a name="line-25"></a><font color=Blue>xtract</font> <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> CFilter i
+<a name="line-26"></a><font color=Blue>xtract</font> f query
+<a name="line-27"></a>    <font color=Red>|</font> interiorRef lexedQ <font color=Red>=</font> dfilter <font color=Cyan>(</font>parseXtract lexedQ<font color=Cyan>)</font>
+<a name="line-28"></a>    <font color=Red>|</font> otherwise          <font color=Red>=</font> cfilter <font color=Cyan>(</font>parseXtract lexedQ<font color=Cyan>)</font>
+<a name="line-29"></a>  <font color=Green><u>where</u></font>
+<a name="line-30"></a>    lexedQ <font color=Red>=</font> lexXtract f query
+<a name="line-31"></a>    <font color=Blue>-- test whether query has interior reference to doc root</font>
+<a name="line-32"></a>    interiorRef <font color=Cyan>(</font>Right <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>Symbol s<font color=Cyan>)</font><font color=Red><b>:</b></font> Right <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>Symbol <font color=Magenta>"//"</font><font color=Cyan>)</font><font color=Red><b>:</b></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>
+<a name="line-33"></a>                                          <font color=Red>|</font> s <font color=Cyan>`elem`</font> predicateIntro <font color=Red>=</font> True
+<a name="line-34"></a>    interiorRef <font color=Cyan>(</font>Right <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>Symbol s<font color=Cyan>)</font><font color=Red><b>:</b></font> Right <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font>Symbol <font color=Magenta>"/"</font><font color=Cyan>)</font><font color=Red><b>:</b></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>
+<a name="line-35"></a>                                          <font color=Red>|</font> s <font color=Cyan>`elem`</font> predicateIntro <font color=Red>=</font> True
+<a name="line-36"></a>    interiorRef <font color=Cyan>(</font><font color=Green><u>_</u></font> <font color=Red><b>:</b></font> rest<font color=Cyan>)</font> <font color=Red>=</font> interiorRef rest
+<a name="line-37"></a>    interiorRef [] <font color=Red>=</font> False
+<a name="line-38"></a>    predicateIntro <font color=Red>=</font> <font color=Red>[</font> <font color=Magenta>"["</font><font color=Cyan>,</font> <font color=Magenta>"("</font>
+<a name="line-39"></a>                     <font color=Cyan>,</font>  <font color=Magenta>"&amp;"</font><font color=Cyan>,</font>   <font color=Magenta>"|"</font><font color=Cyan>,</font>  <font color=Magenta>"~"</font>
+<a name="line-40"></a>                     <font color=Cyan>,</font>  <font color=Magenta>"="</font><font color=Cyan>,</font>  <font color=Magenta>"!="</font><font color=Cyan>,</font>  <font color=Magenta>"&lt;"</font><font color=Cyan>,</font>  <font color=Magenta>"&lt;="</font><font color=Cyan>,</font>  <font color=Magenta>"&gt;"</font><font color=Cyan>,</font>  <font color=Magenta>"&gt;="</font>
+<a name="line-41"></a>                     <font color=Cyan>,</font> <font color=Magenta>".=."</font><font color=Cyan>,</font><font color=Magenta>".!=."</font><font color=Cyan>,</font><font color=Magenta>".&lt;."</font><font color=Cyan>,</font><font color=Magenta>".&lt;=."</font><font color=Cyan>,</font><font color=Magenta>".&gt;."</font><font color=Cyan>,</font><font color=Magenta>".&gt;=."</font> <font color=Red>]</font>
+<a name="line-42"></a>
+<a name="line-43"></a><a name="parseXtract"></a><font color=Blue>-- | The cool thing is that the Xtract command parser directly builds</font>
+<a name="line-44"></a><font color=Blue>--   a higher-order 'DFilter' (see "Text.XML.HaXml.Xtract.Combinators")</font>
+<a name="line-45"></a><font color=Blue>--   which can be applied to an XML document without further ado.</font>
+<a name="line-46"></a><font color=Blue>--   (@parseXtract@ halts the program if a parse error is found.)</font>
+<a name="line-47"></a><font color=Blue>parseXtract</font> <font color=Red>::</font> <font color=Red>[</font>Token<font color=Red>]</font> <font color=Red>-&gt;</font> DFilter i
+<a name="line-48"></a><font color=Blue>parseXtract</font> <font color=Red>=</font> either error id <font color=Cyan>.</font> parseXtract'
+<a name="line-49"></a>
+<a name="line-50"></a><a name="parseXtract'"></a><font color=Blue>-- | @parseXtract'@ returns error messages through the Either type.</font>
+<a name="line-51"></a><font color=Blue>parseXtract'</font> <font color=Red>::</font> <font color=Red>[</font>Token<font color=Red>]</font> <font color=Red>-&gt;</font> Either String <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
+<a name="line-52"></a><font color=Blue>parseXtract'</font> <font color=Red>=</font> fst <font color=Cyan>.</font> runParser <font color=Cyan>(</font>aquery liftLocal<font color=Cyan>)</font>
+<a name="line-53"></a>
+<a name="line-54"></a><a name="XParser"></a><font color=Blue>---- Auxiliary Parsing Functions ----</font>
+<a name="line-55"></a><a name="XParser"></a><font color=Green><u>type</u></font> XParser a <font color=Red>=</font> Parser <font color=Cyan>(</font>Either String <font color=Cyan>(</font>Posn<font color=Cyan>,</font>TokenT<font color=Cyan>)</font><font color=Cyan>)</font> a
+<a name="line-56"></a>
+<a name="line-57"></a><a name="string"></a><font color=Blue>string</font> <font color=Red>::</font> XParser String
+<a name="line-58"></a><font color=Blue>string</font> <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>inp <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> inp <font color=Green><u>of</u></font>
+<a name="line-59"></a>                <font color=Cyan>(</font>Left err<font color=Red><b>:</b></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>err<font color=Cyan>)</font><font color=Cyan>,</font> inp<font color=Cyan>)</font>
+<a name="line-60"></a>                <font color=Cyan>(</font>Right <font color=Cyan>(</font>p<font color=Cyan>,</font>TokString n<font color=Cyan>)</font><font color=Red><b>:</b></font>ts<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right n<font color=Cyan>,</font> ts<font color=Cyan>)</font>
+<a name="line-61"></a>                ts <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font><font color=Magenta>"expected a string"</font><font color=Cyan>)</font><font color=Cyan>,</font> ts<font color=Cyan>)</font> <font color=Cyan>)</font>
+<a name="line-62"></a><a name="number"></a><font color=Blue>number</font> <font color=Red>::</font> XParser Integer
+<a name="line-63"></a><font color=Blue>number</font> <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>inp <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> inp <font color=Green><u>of</u></font>
+<a name="line-64"></a>                <font color=Cyan>(</font>Left err<font color=Red><b>:</b></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>err<font color=Cyan>)</font><font color=Cyan>,</font> inp<font color=Cyan>)</font>
+<a name="line-65"></a>                <font color=Cyan>(</font>Right <font color=Cyan>(</font>p<font color=Cyan>,</font>TokNum n<font color=Cyan>)</font><font color=Red><b>:</b></font>ts<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right n<font color=Cyan>,</font> ts<font color=Cyan>)</font>
+<a name="line-66"></a>                ts <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font><font color=Magenta>"expected a number"</font><font color=Cyan>)</font><font color=Cyan>,</font> ts<font color=Cyan>)</font> <font color=Cyan>)</font>
+<a name="line-67"></a><a name="symbol"></a><font color=Blue>symbol</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> XParser ()
+<a name="line-68"></a><font color=Blue>symbol</font> s <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>inp <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> inp <font color=Green><u>of</u></font>
+<a name="line-69"></a>                <font color=Cyan>(</font>Left err<font color=Red><b>:</b></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>err<font color=Cyan>)</font><font color=Cyan>,</font> inp<font color=Cyan>)</font>
+<a name="line-70"></a>                <font color=Cyan>(</font>Right <font color=Cyan>(</font>p<font color=Cyan>,</font> Symbol n<font color=Cyan>)</font><font color=Red><b>:</b></font>ts<font color=Cyan>)</font> <font color=Red>|</font> n<font color=Cyan>==</font>s <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right ()<font color=Cyan>,</font> ts<font color=Cyan>)</font>
+<a name="line-71"></a>                ts <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font><font color=Magenta>"expected symbol "</font><font color=Cyan>++</font>s<font color=Cyan>)</font><font color=Cyan>,</font> ts<font color=Cyan>)</font> <font color=Cyan>)</font>
+<a name="line-72"></a>
+<a name="line-73"></a><a name="quote"></a><font color=Blue>quote</font> <font color=Red>=</font> oneOf <font color=Red>[</font> symbol <font color=Magenta>"'"</font><font color=Cyan>,</font>  symbol <font color=Magenta>"\""</font> <font color=Red>]</font>
+<a name="line-74"></a>
+<a name="line-75"></a><a name="pam"></a><font color=Blue>pam</font> fs x <font color=Red>=</font> <font color=Red>[</font> f x <font color=Red>|</font> f <font color=Red>&lt;-</font> fs <font color=Red>]</font>
+<a name="line-76"></a>
+<a name="line-77"></a>
+<a name="line-78"></a><font color=Blue>{--- original Xtract grammar ----
+<a name="line-79"></a>      query     = string			tagname
+<a name="line-80"></a>                | string *			tagname prefix
+<a name="line-81"></a>                | * string			tagname suffix
+<a name="line-82"></a>                | *				any element
+<a name="line-83"></a>                | -				chardata
+<a name="line-84"></a>                | ( query )
+<a name="line-85"></a>                | query / query			parent/child relationship
+<a name="line-86"></a>                | query // query		deep inside
+<a name="line-87"></a>                | query + query			union of queries
+<a name="line-88"></a>                | query [predicate]
+<a name="line-89"></a>                | query [positions]
+<a name="line-90"></a>
+<a name="line-91"></a>      predicate = quattr			has attribute
+<a name="line-92"></a>                | quattr op ' string '		attribute has value
+<a name="line-93"></a>                | quattr op " string "		attribute has value
+<a name="line-94"></a>                | quattr op  quattr		attribute value comparison (lexical)
+<a name="line-95"></a>                | quattr nop integer  		attribute has value (numerical)
+<a name="line-96"></a>                | quattr nop quattr		attribute value comparison (numerical)
+<a name="line-97"></a>                | ( predicate )			bracketting
+<a name="line-98"></a>                | predicate &amp; predicate		logical and
+<a name="line-99"></a>                | predicate | predicate		logical or
+<a name="line-100"></a>                | ~ predicate			logical not
+<a name="line-101"></a>
+<a name="line-102"></a>      attribute = @ string			has attribute
+<a name="line-103"></a>                | query / @ string		child has attribute
+<a name="line-104"></a>                | -				has textual content
+<a name="line-105"></a>                | query / -			child has textual content
+<a name="line-106"></a>
+<a name="line-107"></a>      quattr    = query
+<a name="line-108"></a>                | attribute
+<a name="line-109"></a>
+<a name="line-110"></a>      op        =  =				equal to
+<a name="line-111"></a>                |  !=				not equal to
+<a name="line-112"></a>                |  &lt;				less than
+<a name="line-113"></a>                |  &lt;=				less than or equal to
+<a name="line-114"></a>                |  &gt;				greater than
+<a name="line-115"></a>                |  &gt;=				greater than or equal to
+<a name="line-116"></a>
+<a name="line-117"></a>      nop       =  .=.				equal to
+<a name="line-118"></a>                |  .!=.				not equal to
+<a name="line-119"></a>                |  .&lt;.				less than
+<a name="line-120"></a>                |  .&lt;=.				less than or equal to
+<a name="line-121"></a>                |  .&gt;.				greater than
+<a name="line-122"></a>                |  .&gt;=.				greater than or equal to
+<a name="line-123"></a>
+<a name="line-124"></a>      positions = position {, positions}	multiple positions
+<a name="line-125"></a>                | position - position		ranges
+<a name="line-126"></a>
+<a name="line-127"></a>      position  = integer			numbering is from 0 upwards
+<a name="line-128"></a>                | $				last
+<a name="line-129"></a>
+<a name="line-130"></a>
+<a name="line-131"></a>---- transformed grammar (removing left recursion)
+<a name="line-132"></a>      aquery = ./ tquery	-- current context
+<a name="line-133"></a>             | tquery		-- also current context
+<a name="line-134"></a>             | / tquery		-- root context
+<a name="line-135"></a>             | // tquery	-- deep context from root
+<a name="line-136"></a>
+<a name="line-137"></a>      tquery = ( tquery ) xquery
+<a name="line-138"></a>             | tag xquery
+<a name="line-139"></a>             | -		-- fixes original grammar ("-/*" is incorrect)
+<a name="line-140"></a>      
+<a name="line-141"></a>      tag    = string *
+<a name="line-142"></a>             | string
+<a name="line-143"></a>             | * string
+<a name="line-144"></a>             | *
+<a name="line-145"></a>      
+<a name="line-146"></a>      xquery = / tquery
+<a name="line-147"></a>             | // tquery
+<a name="line-148"></a>             | / @ string	-- new: print attribute value
+<a name="line-149"></a>             | + tquery
+<a name="line-150"></a>             | [ tpredicate ] xquery
+<a name="line-151"></a>             | [ positions ] xquery
+<a name="line-152"></a>             | lambda
+<a name="line-153"></a>
+<a name="line-154"></a>      tpredicate = vpredicate upredicate
+<a name="line-155"></a>      upredicate = &amp; tpredicate
+<a name="line-156"></a>                 | | tpredicate
+<a name="line-157"></a>                 | lambda
+<a name="line-158"></a>      vpredicate = ( tpredicate )
+<a name="line-159"></a>                 | ~ tpredicate
+<a name="line-160"></a>                 | tattribute
+<a name="line-161"></a>
+<a name="line-162"></a>      tattribute = aquery uattribute
+<a name="line-163"></a>                 | @ string vattribute
+<a name="line-164"></a>      uattribute = / @ string vattribute
+<a name="line-165"></a>                 | vattribute
+<a name="line-166"></a>      vattribute = op wattribute
+<a name="line-167"></a>                 | op ' string '
+<a name="line-168"></a>                 | nop wattribute
+<a name="line-169"></a>                 | nop integer
+<a name="line-170"></a>                 | lambda
+<a name="line-171"></a>      wattribute = @ string
+<a name="line-172"></a>                 | aquery / @ string
+<a name="line-173"></a>                 | aquery
+<a name="line-174"></a>
+<a name="line-175"></a>      positions  = simplepos commapos
+<a name="line-176"></a>      simplepos  = integer range
+<a name="line-177"></a>                 | $
+<a name="line-178"></a>      range      = - integer
+<a name="line-179"></a>                 | - $
+<a name="line-180"></a>                 | lambda
+<a name="line-181"></a>      commapos   = , simplepos commapos
+<a name="line-182"></a>                 | lambda
+<a name="line-183"></a>
+<a name="line-184"></a>      op         =  =
+<a name="line-185"></a>                 |  !=
+<a name="line-186"></a>                 |  &lt;
+<a name="line-187"></a>                 |  &lt;=
+<a name="line-188"></a>                 |  &gt;
+<a name="line-189"></a>                 |  &gt;=
+<a name="line-190"></a>
+<a name="line-191"></a>      nop        =  .=.
+<a name="line-192"></a>                 |  .!=.
+<a name="line-193"></a>                 |  .&lt;.
+<a name="line-194"></a>                 |  .&lt;=.
+<a name="line-195"></a>                 |  .&gt;.
+<a name="line-196"></a>                 |  .&gt;=.
+<a name="line-197"></a>-}</font>
+<a name="line-198"></a>
+<a name="line-199"></a><a name="bracket"></a><font color=Blue>bracket</font> <font color=Red>::</font> XParser a <font color=Red>-&gt;</font> XParser a
+<a name="line-200"></a><font color=Blue>bracket</font> p <font color=Red>=</font>
+<a name="line-201"></a>  <font color=Green><u>do</u></font> symbol <font color=Magenta>"("</font>
+<a name="line-202"></a>     x <font color=Red>&lt;-</font> p
+<a name="line-203"></a>     symbol <font color=Magenta>")"</font>
+<a name="line-204"></a>     return x
+<a name="line-205"></a>
+<a name="line-206"></a>
+<a name="line-207"></a><font color=Blue>---- Xtract parsers ----</font>
+<a name="line-208"></a>
+<a name="line-209"></a><a name="aquery"></a><font color=Blue>-- aquery chooses to search from the root, or only in local context</font>
+<a name="line-210"></a><font color=Blue>aquery</font> <font color=Red>::</font>  <font color=Cyan>(</font><font color=Cyan>(</font>CFilter i<font color=Red>-&gt;</font>CFilter i<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>DFilter i<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-211"></a>           <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
+<a name="line-212"></a><font color=Blue>aquery</font> lift <font color=Red>=</font> oneOf
+<a name="line-213"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"//"</font>
+<a name="line-214"></a>         tquery <font color=Red>[</font>lift C<font color=Cyan>.</font>multi<font color=Red>]</font>
+<a name="line-215"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"/"</font>
+<a name="line-216"></a>         tquery <font color=Red>[</font>lift id<font color=Red>]</font>
+<a name="line-217"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"./"</font>
+<a name="line-218"></a>         tquery <font color=Red>[</font><font color=Cyan>(</font>local C<font color=Cyan>.</font>keep D<font color=Cyan>./&gt;</font><font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-219"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> tquery <font color=Red>[</font><font color=Cyan>(</font>local C<font color=Cyan>.</font>keep D<font color=Cyan>./&gt;</font><font color=Cyan>)</font><font color=Red>]</font>
+<a name="line-220"></a>    <font color=Red>]</font>
+<a name="line-221"></a>
+<a name="line-222"></a><a name="tquery"></a><font color=Blue>tquery</font> <font color=Red>::</font> <font color=Red>[</font>DFilter i<font color=Red>-&gt;</font>DFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
+<a name="line-223"></a><font color=Blue>tquery</font> [] <font color=Red>=</font> tquery <font color=Red>[</font>id<font color=Red>]</font>
+<a name="line-224"></a><font color=Blue>tquery</font> <font color=Cyan>(</font>qf<font color=Red><b>:</b></font>cxt<font color=Cyan>)</font> <font color=Red>=</font> oneOf
+<a name="line-225"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> q <font color=Red>&lt;-</font> bracket <font color=Cyan>(</font>tquery <font color=Cyan>(</font>qf<font color=Red><b>:</b></font>qf<font color=Red><b>:</b></font>cxt<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-226"></a>         xquery cxt q
+<a name="line-227"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> q <font color=Red>&lt;-</font> xtag
+<a name="line-228"></a>         xquery cxt <font color=Cyan>(</font>qf <font color=Cyan>(</font><font color=Cyan>(</font>unescape <font color=Cyan>.</font><font color=Cyan>)</font><font color=Cyan>.</font>q<font color=Cyan>)</font><font color=Cyan>)</font>	<font color=Blue>-- glue inners texts together</font>
+<a name="line-229"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"-"</font>
+<a name="line-230"></a>         return <font color=Cyan>(</font>qf <font color=Cyan>(</font>local C<font color=Cyan>.</font>txt<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-231"></a>    <font color=Red>]</font>
+<a name="line-232"></a>
+<a name="line-233"></a><a name="xtag"></a><font color=Blue>xtag</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
+<a name="line-234"></a><font color=Blue>xtag</font> <font color=Red>=</font> oneOf
+<a name="line-235"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> s <font color=Red>&lt;-</font> string
+<a name="line-236"></a>         symbol <font color=Magenta>"*"</font>
+<a name="line-237"></a>         return <font color=Cyan>(</font>local <font color=Cyan>(</font>C<font color=Cyan>.</font>tagWith <font color=Cyan>(</font>s <font color=Cyan>`isPrefixOf`</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-238"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> s <font color=Red>&lt;-</font> string
+<a name="line-239"></a>         return <font color=Cyan>(</font>local <font color=Cyan>(</font>C<font color=Cyan>.</font>tag s<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-240"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"*"</font>
+<a name="line-241"></a>         s <font color=Red>&lt;-</font> string
+<a name="line-242"></a>         return <font color=Cyan>(</font>local <font color=Cyan>(</font>C<font color=Cyan>.</font>tagWith <font color=Cyan>(</font><font color=Cyan>(</font><font color=Cyan>(</font>reverse s<font color=Cyan>)</font> <font color=Cyan>`isPrefixOf`</font><font color=Cyan>)</font> <font color=Cyan>.</font> reverse<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-243"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"*"</font>
+<a name="line-244"></a>         return <font color=Cyan>(</font>local C<font color=Cyan>.</font>elm<font color=Cyan>)</font>
+<a name="line-245"></a>    <font color=Red>]</font>
+<a name="line-246"></a>
+<a name="line-247"></a>
+<a name="line-248"></a><a name="xquery"></a><font color=Blue>xquery</font> <font color=Red>::</font> <font color=Red>[</font>DFilter i<font color=Red>-&gt;</font>DFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> DFilter i <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
+<a name="line-249"></a><font color=Blue>xquery</font> cxt q1 <font color=Red>=</font> oneOf
+<a name="line-250"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"/"</font>
+<a name="line-251"></a>         <font color=Cyan>(</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"@"</font>
+<a name="line-252"></a>              attr <font color=Red>&lt;-</font> string
+<a name="line-253"></a>              return <font color=Cyan>(</font>D<font color=Cyan>.</font>iffind attr <font color=Cyan>(</font><font color=Red>\</font>s<font color=Red>-&gt;</font>local <font color=Cyan>(</font>C<font color=Cyan>.</font>literal s<font color=Cyan>)</font><font color=Cyan>)</font> D<font color=Cyan>.</font>none <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> q1<font color=Cyan>)</font>
+<a name="line-254"></a>           <font color=Cyan>`onFail`</font>
+<a name="line-255"></a>           tquery <font color=Cyan>(</font><font color=Cyan>(</font>q1 D<font color=Cyan>./&gt;</font><font color=Cyan>)</font><font color=Red><b>:</b></font>cxt<font color=Cyan>)</font> <font color=Cyan>)</font>
+<a name="line-256"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"//"</font>
+<a name="line-257"></a>         tquery <font color=Cyan>(</font><font color=Cyan>(</font><font color=Red>\</font>q2<font color=Red>-&gt;</font> <font color=Cyan>(</font>liftLocal C<font color=Cyan>.</font>multi<font color=Cyan>)</font> q2
+<a name="line-258"></a>                            <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> local C<font color=Cyan>.</font>children <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> q1<font color=Cyan>)</font><font color=Red><b>:</b></font>cxt<font color=Cyan>)</font>
+<a name="line-259"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"+"</font>
+<a name="line-260"></a>         q2 <font color=Red>&lt;-</font> tquery cxt
+<a name="line-261"></a>         return <font color=Cyan>(</font>D<font color=Cyan>.</font>cat <font color=Red>[</font>q1<font color=Cyan>,</font>q2<font color=Red>]</font><font color=Cyan>)</font>
+<a name="line-262"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"["</font>
+<a name="line-263"></a>         is <font color=Red>&lt;-</font> iindex	<font color=Blue>-- now extended to multiple indexes</font>
+<a name="line-264"></a>         symbol <font color=Magenta>"]"</font>
+<a name="line-265"></a>         xquery cxt <font color=Cyan>(</font><font color=Red>\</font>xml<font color=Red>-&gt;</font> concat <font color=Cyan>.</font> pam is <font color=Cyan>.</font> q1 xml<font color=Cyan>)</font>
+<a name="line-266"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"["</font>
+<a name="line-267"></a>         p <font color=Red>&lt;-</font> tpredicate
+<a name="line-268"></a>         symbol <font color=Magenta>"]"</font>
+<a name="line-269"></a>         xquery cxt <font color=Cyan>(</font>q1 <font color=Cyan>`</font>D<font color=Cyan>.</font>with<font color=Cyan>`</font> p<font color=Cyan>)</font>
+<a name="line-270"></a>    <font color=Cyan>,</font> return q1
+<a name="line-271"></a>    <font color=Red>]</font>
+<a name="line-272"></a>
+<a name="line-273"></a><a name="tpredicate"></a><font color=Blue>tpredicate</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
+<a name="line-274"></a><font color=Blue>tpredicate</font> <font color=Red>=</font>
+<a name="line-275"></a>  <font color=Green><u>do</u></font> p <font color=Red>&lt;-</font> vpredicate
+<a name="line-276"></a>     f <font color=Red>&lt;-</font> upredicate
+<a name="line-277"></a>     return <font color=Cyan>(</font>f p<font color=Cyan>)</font>
+<a name="line-278"></a>
+<a name="line-279"></a><a name="upredicate"></a><font color=Blue>upredicate</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>DFilter i<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font>
+<a name="line-280"></a><font color=Blue>upredicate</font> <font color=Red>=</font> oneOf
+<a name="line-281"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"&amp;"</font>
+<a name="line-282"></a>         p2 <font color=Red>&lt;-</font> tpredicate
+<a name="line-283"></a>         return <font color=Cyan>(</font><font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> p2<font color=Cyan>)</font>
+<a name="line-284"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"|"</font>
+<a name="line-285"></a>         p2 <font color=Red>&lt;-</font> tpredicate
+<a name="line-286"></a>         return <font color=Cyan>(</font>D<font color=Cyan>.|&gt;|</font> p2<font color=Cyan>)</font>
+<a name="line-287"></a>    <font color=Cyan>,</font> return id
+<a name="line-288"></a>    <font color=Red>]</font>
+<a name="line-289"></a>
+<a name="line-290"></a><a name="vpredicate"></a><font color=Blue>vpredicate</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
+<a name="line-291"></a><font color=Blue>vpredicate</font> <font color=Red>=</font> oneOf
+<a name="line-292"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> bracket tpredicate
+<a name="line-293"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"~"</font>
+<a name="line-294"></a>         p <font color=Red>&lt;-</font> tpredicate
+<a name="line-295"></a>         return <font color=Cyan>(</font>local C<font color=Cyan>.</font>keep <font color=Cyan>`</font>D<font color=Cyan>.</font>without<font color=Cyan>`</font> p<font color=Cyan>)</font>
+<a name="line-296"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> tattribute
+<a name="line-297"></a>    <font color=Red>]</font>
+<a name="line-298"></a>
+<a name="line-299"></a><a name="tattribute"></a><font color=Blue>tattribute</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
+<a name="line-300"></a><font color=Blue>tattribute</font> <font color=Red>=</font> oneOf
+<a name="line-301"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> q <font color=Red>&lt;-</font> aquery liftGlobal
+<a name="line-302"></a>         uattribute q
+<a name="line-303"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"@"</font>
+<a name="line-304"></a>         s <font color=Red>&lt;-</font> string
+<a name="line-305"></a>         vattribute <font color=Cyan>(</font>local C<font color=Cyan>.</font>keep<font color=Cyan>,</font> local <font color=Cyan>(</font>C<font color=Cyan>.</font>attr s<font color=Cyan>)</font><font color=Cyan>,</font> D<font color=Cyan>.</font>iffind s<font color=Cyan>)</font>
+<a name="line-306"></a>    <font color=Red>]</font>
+<a name="line-307"></a>
+<a name="line-308"></a><a name="uattribute"></a><font color=Blue>uattribute</font> <font color=Red>::</font> DFilter i <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
+<a name="line-309"></a><font color=Blue>uattribute</font> q <font color=Red>=</font> oneOf
+<a name="line-310"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"/"</font>
+<a name="line-311"></a>         symbol <font color=Magenta>"@"</font>
+<a name="line-312"></a>         s <font color=Red>&lt;-</font> string
+<a name="line-313"></a>         vattribute <font color=Cyan>(</font>q<font color=Cyan>,</font> local <font color=Cyan>(</font>C<font color=Cyan>.</font>attr s<font color=Cyan>)</font><font color=Cyan>,</font> D<font color=Cyan>.</font>iffind s<font color=Cyan>)</font>
+<a name="line-314"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> vattribute <font color=Cyan>(</font>q<font color=Cyan>,</font> local C<font color=Cyan>.</font>keep<font color=Cyan>,</font>     D<font color=Cyan>.</font>ifTxt<font color=Cyan>)</font>
+<a name="line-315"></a>    <font color=Red>]</font>
+<a name="line-316"></a>
+<a name="line-317"></a><a name="vattribute"></a><font color=Blue>vattribute</font> <font color=Red>::</font> <font color=Cyan>(</font>DFilter i<font color=Cyan>,</font> DFilter i<font color=Cyan>,</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font><font color=Red>-&gt;</font>DFilter i<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font>
+<a name="line-318"></a>              <font color=Red>-&gt;</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>)</font>
+<a name="line-319"></a><font color=Blue>vattribute</font> <font color=Cyan>(</font>q<font color=Cyan>,</font>a<font color=Cyan>,</font>iffn<font color=Cyan>)</font> <font color=Red>=</font> oneOf
+<a name="line-320"></a>  <font color=Red>[</font> <font color=Green><u>do</u></font> cmp <font color=Red>&lt;-</font> op
+<a name="line-321"></a>       quote
+<a name="line-322"></a>       s2 <font color=Red>&lt;-</font> string
+<a name="line-323"></a>       quote
+<a name="line-324"></a>       return <font color=Cyan>(</font><font color=Cyan>(</font>iffn <font color=Cyan>(</font><font color=Red>\</font>s1<font color=Red>-&gt;</font><font color=Green><u>if</u></font> cmp s1 s2 <font color=Green><u>then</u></font> D<font color=Cyan>.</font>keep <font color=Green><u>else</u></font> D<font color=Cyan>.</font>none<font color=Cyan>)</font> D<font color=Cyan>.</font>none<font color=Cyan>)</font>
+<a name="line-325"></a>               <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> q<font color=Cyan>)</font>
+<a name="line-326"></a>  <font color=Cyan>,</font> <font color=Green><u>do</u></font> cmp <font color=Red>&lt;-</font> op
+<a name="line-327"></a>       <font color=Cyan>(</font>q2<font color=Cyan>,</font>iffn2<font color=Cyan>)</font> <font color=Red>&lt;-</font> wattribute
+<a name="line-328"></a>       return <font color=Cyan>(</font><font color=Cyan>(</font>iffn <font color=Cyan>(</font><font color=Red>\</font>s1<font color=Red>-&gt;</font> iffn2 <font color=Cyan>(</font><font color=Red>\</font>s2<font color=Red>-&gt;</font> <font color=Green><u>if</u></font> cmp s1 s2 <font color=Green><u>then</u></font> D<font color=Cyan>.</font>keep <font color=Green><u>else</u></font> D<font color=Cyan>.</font>none<font color=Cyan>)</font>
+<a name="line-329"></a>                                  D<font color=Cyan>.</font>none<font color=Cyan>)</font>
+<a name="line-330"></a>                     D<font color=Cyan>.</font>none<font color=Cyan>)</font> <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> q<font color=Cyan>)</font>
+<a name="line-331"></a>  <font color=Cyan>,</font> <font color=Green><u>do</u></font> cmp <font color=Red>&lt;-</font> nop
+<a name="line-332"></a>       n <font color=Red>&lt;-</font> number
+<a name="line-333"></a>       return <font color=Cyan>(</font><font color=Cyan>(</font>iffn <font color=Cyan>(</font><font color=Red>\</font>s<font color=Red>-&gt;</font><font color=Green><u>if</u></font> cmp <font color=Cyan>(</font>read s<font color=Cyan>)</font> n <font color=Green><u>then</u></font> D<font color=Cyan>.</font>keep <font color=Green><u>else</u></font> D<font color=Cyan>.</font>none<font color=Cyan>)</font> D<font color=Cyan>.</font>none<font color=Cyan>)</font>
+<a name="line-334"></a>               <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> q<font color=Cyan>)</font>
+<a name="line-335"></a>  <font color=Cyan>,</font> <font color=Green><u>do</u></font> cmp <font color=Red>&lt;-</font> nop
+<a name="line-336"></a>       <font color=Cyan>(</font>q2<font color=Cyan>,</font>iffn2<font color=Cyan>)</font> <font color=Red>&lt;-</font> wattribute
+<a name="line-337"></a>       return <font color=Cyan>(</font><font color=Cyan>(</font>iffn <font color=Cyan>(</font><font color=Red>\</font>s1<font color=Red>-&gt;</font> iffn2 <font color=Cyan>(</font><font color=Red>\</font>s2<font color=Red>-&gt;</font> <font color=Green><u>if</u></font> cmp <font color=Cyan>(</font>read s1<font color=Cyan>)</font> <font color=Cyan>(</font>read s2<font color=Cyan>)</font> <font color=Green><u>then</u></font> D<font color=Cyan>.</font>keep
+<a name="line-338"></a>                                                                    <font color=Green><u>else</u></font> D<font color=Cyan>.</font>none<font color=Cyan>)</font>
+<a name="line-339"></a>                                  D<font color=Cyan>.</font>none<font color=Cyan>)</font>
+<a name="line-340"></a>                     D<font color=Cyan>.</font>none<font color=Cyan>)</font> <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> q<font color=Cyan>)</font>
+<a name="line-341"></a>  <font color=Cyan>,</font> <font color=Green><u>do</u></font> return <font color=Cyan>(</font><font color=Cyan>(</font>a <font color=Cyan>`</font>D<font color=Cyan>.</font>o<font color=Cyan>`</font> q<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-342"></a>  <font color=Red>]</font>
+<a name="line-343"></a>
+<a name="line-344"></a><a name="wattribute"></a><font color=Blue>wattribute</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>DFilter i<font color=Cyan>,</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font><font color=Red>-&gt;</font>DFilter i<font color=Red>-&gt;</font>DFilter i<font color=Cyan>)</font>
+<a name="line-345"></a><font color=Blue>wattribute</font> <font color=Red>=</font> oneOf
+<a name="line-346"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"@"</font>
+<a name="line-347"></a>         s <font color=Red>&lt;-</font> string
+<a name="line-348"></a>         return <font color=Cyan>(</font>D<font color=Cyan>.</font>keep<font color=Cyan>,</font> D<font color=Cyan>.</font>iffind s<font color=Cyan>)</font>
+<a name="line-349"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> q <font color=Red>&lt;-</font> aquery liftGlobal
+<a name="line-350"></a>         symbol <font color=Magenta>"/"</font>
+<a name="line-351"></a>         symbol <font color=Magenta>"@"</font>
+<a name="line-352"></a>         s <font color=Red>&lt;-</font> string
+<a name="line-353"></a>         return <font color=Cyan>(</font>q<font color=Cyan>,</font> D<font color=Cyan>.</font>iffind s<font color=Cyan>)</font>
+<a name="line-354"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> q <font color=Red>&lt;-</font> aquery liftGlobal
+<a name="line-355"></a>         return <font color=Cyan>(</font>q<font color=Cyan>,</font> D<font color=Cyan>.</font>ifTxt<font color=Cyan>)</font>
+<a name="line-356"></a>    <font color=Red>]</font>
+<a name="line-357"></a>
+<a name="line-358"></a>
+<a name="line-359"></a><a name="iindex"></a><font color=Blue>iindex</font> <font color=Red>::</font> XParser <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>]</font>
+<a name="line-360"></a><font color=Blue>iindex</font> <font color=Red>=</font>
+<a name="line-361"></a>    <font color=Green><u>do</u></font> i <font color=Red>&lt;-</font> simpleindex
+<a name="line-362"></a>       is <font color=Red>&lt;-</font> idxcomma
+<a name="line-363"></a>       return <font color=Cyan>(</font>i<font color=Red><b>:</b></font>is<font color=Cyan>)</font>
+<a name="line-364"></a>
+<a name="line-365"></a><a name="simpleindex"></a><font color=Blue>simpleindex</font> <font color=Red>::</font> XParser <font color=Cyan>(</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=Cyan>)</font>
+<a name="line-366"></a><font color=Blue>simpleindex</font> <font color=Red>=</font> oneOf
+<a name="line-367"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> n <font color=Red>&lt;-</font> number
+<a name="line-368"></a>         r <font color=Red>&lt;-</font> rrange n
+<a name="line-369"></a>         return r
+<a name="line-370"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"$"</font>
+<a name="line-371"></a>         return <font color=Cyan>(</font>C<font color=Cyan>.</font>keep <font color=Cyan>.</font> last<font color=Cyan>)</font>
+<a name="line-372"></a>    <font color=Red>]</font>
+<a name="line-373"></a>
+<a name="line-374"></a><a name="rrange"></a><font color=Blue>rrange</font><font color=Cyan>,</font> numberdollar <font color=Red>::</font> Integer <font color=Red>-&gt;</font> XParser <font color=Cyan>(</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=Cyan>)</font>
+<a name="line-375"></a><font color=Blue>rrange</font> n1 <font color=Red>=</font> oneOf
+<a name="line-376"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"-"</font>
+<a name="line-377"></a>         numberdollar n1
+<a name="line-378"></a>    <font color=Cyan>,</font> return <font color=Cyan>(</font>C<font color=Cyan>.</font>keep<font color=Cyan>.</font><font color=Cyan>(</font><font color=Cyan>!!</font><font color=Cyan>(</font>fromInteger n1<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-379"></a>    <font color=Red>]</font>
+<a name="line-380"></a>
+<a name="line-381"></a><a name="numberdollar"></a><font color=Blue>numberdollar</font> n1 <font color=Red>=</font> oneOf
+<a name="line-382"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> n2 <font color=Red>&lt;-</font> number
+<a name="line-383"></a>         return <font color=Cyan>(</font>take <font color=Cyan>(</font>fromInteger <font color=Cyan>(</font><font color=Magenta>1</font><font color=Cyan>+</font>n2<font color=Blue>-</font>n1<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>.</font> drop <font color=Cyan>(</font>fromInteger n1<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-384"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"$"</font>
+<a name="line-385"></a>         return <font color=Cyan>(</font>drop <font color=Cyan>(</font>fromInteger n1<font color=Cyan>)</font><font color=Cyan>)</font>
+<a name="line-386"></a>    <font color=Red>]</font>
+<a name="line-387"></a>
+<a name="line-388"></a><a name="idxcomma"></a><font color=Blue>idxcomma</font> <font color=Red>::</font> XParser <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>]</font>
+<a name="line-389"></a><font color=Blue>idxcomma</font> <font color=Red>=</font> oneOf
+<a name="line-390"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>","</font>
+<a name="line-391"></a>         r <font color=Red>&lt;-</font> simpleindex
+<a name="line-392"></a>         rs <font color=Red>&lt;-</font> idxcomma
+<a name="line-393"></a>         return <font color=Cyan>(</font>r<font color=Red><b>:</b></font>rs<font color=Cyan>)</font>
+<a name="line-394"></a>    <font color=Cyan>,</font> return []
+<a name="line-395"></a>    <font color=Red>]</font>
+<a name="line-396"></a>
+<a name="line-397"></a>
+<a name="line-398"></a><a name="op"></a><font color=Blue>op</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font>
+<a name="line-399"></a><font color=Blue>op</font> <font color=Red>=</font> oneOf
+<a name="line-400"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"="</font><font color=Cyan>;</font>  return <font color=Cyan>(</font><font color=Cyan>==</font><font color=Cyan>)</font>
+<a name="line-401"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"!="</font><font color=Cyan>;</font> return <font color=Cyan>(</font><font color=Cyan>/=</font><font color=Cyan>)</font>
+<a name="line-402"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"&lt;"</font><font color=Cyan>;</font>  return <font color=Cyan>(</font><font color=Cyan>&lt;</font><font color=Cyan>)</font>
+<a name="line-403"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"&lt;="</font><font color=Cyan>;</font> return <font color=Cyan>(</font><font color=Cyan>&lt;=</font><font color=Cyan>)</font>
+<a name="line-404"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"&gt;"</font><font color=Cyan>;</font>  return <font color=Cyan>(</font><font color=Cyan>&gt;</font><font color=Cyan>)</font>
+<a name="line-405"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>"&gt;="</font><font color=Cyan>;</font> return <font color=Cyan>(</font><font color=Cyan>&gt;=</font><font color=Cyan>)</font>
+<a name="line-406"></a>    <font color=Red>]</font>
+<a name="line-407"></a>
+<a name="line-408"></a><a name="nop"></a><font color=Blue>nop</font> <font color=Red>::</font> XParser <font color=Cyan>(</font>Integer<font color=Red>-&gt;</font>Integer<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font>
+<a name="line-409"></a><font color=Blue>nop</font> <font color=Red>=</font> oneOf
+<a name="line-410"></a>    <font color=Red>[</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>".=."</font><font color=Cyan>;</font>  return <font color=Cyan>(</font><font color=Cyan>==</font><font color=Cyan>)</font>
+<a name="line-411"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>".!=."</font><font color=Cyan>;</font> return <font color=Cyan>(</font><font color=Cyan>/=</font><font color=Cyan>)</font>
+<a name="line-412"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>".&lt;."</font><font color=Cyan>;</font>  return <font color=Cyan>(</font><font color=Cyan>&lt;</font><font color=Cyan>)</font>
+<a name="line-413"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>".&lt;=."</font><font color=Cyan>;</font> return <font color=Cyan>(</font><font color=Cyan>&lt;=</font><font color=Cyan>)</font>
+<a name="line-414"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>".&gt;."</font><font color=Cyan>;</font>  return <font color=Cyan>(</font><font color=Cyan>&gt;</font><font color=Cyan>)</font>
+<a name="line-415"></a>    <font color=Cyan>,</font> <font color=Green><u>do</u></font> symbol <font color=Magenta>".&gt;=."</font><font color=Cyan>;</font> return <font color=Cyan>(</font><font color=Cyan>&gt;=</font><font color=Cyan>)</font>
+<a name="line-416"></a>    <font color=Red>]</font>
+<a name="line-417"></a>
 </pre>
+</body>
 </html>
diff --git a/docs/changelog.html b/docs/changelog.html
--- a/docs/changelog.html
+++ b/docs/changelog.html
@@ -23,6 +23,10 @@
 <li> Version 1.19.4 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.
+<li> Version 1.19.5 adds XmlContent instances for larger (up to 15-) tuples.
+     It also fixes a couple of bugs in DtdToHaskell, when dealing with
+     larger datatypes (more than 26 components) and duplicate ATTLIST
+     specifications.
 </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,11 +132,11 @@
 <center><h3><a name="download">Downloads</a></h3></center>
 <p>
 <b>Development versions:</b><br>
-HaXml-1.19.4, release date 2008.06.17<br>
+HaXml-1.19.5, release date 2009.02.02<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.4.tar.gz">.tar.gz</a>,
-<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.4.zip">.zip</a>.
+<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.5.tar.gz">.tar.gz</a>,
+<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.5.zip">.zip</a>.
 <br>
 By FTP: 
 <a href="ftp://ftp.cs.york.ac.uk/pub/haskell/HaXml/">
@@ -203,6 +203,8 @@
 <center><h3><a name="news">Recent news</a></h3></center>
 
 <p>
+Version 1.19.5 has some bugfixes to DtdToHaskell, to cope with especially
+large datatypes.<br>
 Version 1.19.4 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
diff --git a/src/Makefile b/src/Makefile
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,5 +1,5 @@
 SOFTWARE = HaXml
-VERSION = 1.19.4
+VERSION = 1.19.5
 
 LIBSRCS = \
 	Text/XML/HaXml.hs Text/XML/HaXml/Combinators.hs Text/XML/HaXml/Lex.hs \
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
@@ -5,7 +5,7 @@
   ( dtd2TypeDef
   ) where
 
-import List (intersperse)
+import List (intersperse,nub)
 
 import Text.XML.HaXml.Types hiding (Name)
 import Text.XML.HaXml.DtdToHaskell.TypeDef
@@ -34,7 +34,7 @@
         (AttList (AttListDecl n as)) ->
           case lookup n db of
             Nothing -> database ((n, R as EMPTY):db) ms
-            (Just (R a cs)) -> database (replace n (R (a++as) cs) db) ms
+            (Just (R a cs)) -> database (replace n (R (nub (a++as)) cs) db) ms
     --  (MarkupPE _ m') -> database db (m':ms)
         _ -> database db ms
 
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
@@ -272,7 +272,9 @@
 mkCpat n i vs = ppHName n <+> i <+> fsep vs
 
 nameSupply :: [b] -> [Doc]
-nameSupply  ss = take (length ss) (map char ['a'..])
+nameSupply  ss = take (length ss) (map char ['a'..'z']
+                                  ++ map text [ a:n:[] | n <- ['0'..'9']
+                                                       , a <- ['a'..'z'] ])
 -- nameSupply2 ss = take (length ss) [ text ('c':v:[]) | v <- ['a'..]]
 
 mkTranslate :: [Name] -> Doc
diff --git a/src/Text/XML/HaXml/Lex.hs b/src/Text/XML/HaXml/Lex.hs
--- a/src/Text/XML/HaXml/Lex.hs
+++ b/src/Text/XML/HaXml/Lex.hs
@@ -180,7 +180,7 @@
 --   especially in error messages), and the second is the string content of
 --   the XML file.
 xmlLex :: String -> String -> [Token]
-xmlLex filename = xmlAny [] (posInNewCxt ("file "++filename) Nothing)
+xmlLex filename = xmlAny [] (posInNewCxt filename Nothing)
 
 -- | 'xmlReLex' is used when the parser expands a macro (PE reference).
 --    The expansion of the macro must be re-lexed as if for the first time.
diff --git a/src/Text/XML/HaXml/Parse.hs b/src/Text/XML/HaXml/Parse.hs
--- a/src/Text/XML/HaXml/Parse.hs
+++ b/src/Text/XML/HaXml/Parse.hs
@@ -42,7 +42,9 @@
 import Text.XML.HaXml.Lex
 import Text.ParserCombinators.Poly.NoLeak.State
 
+import System.FilePath (combine, dropFileName)
 
+
 #if ( defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ > 502 ) || \
     ( defined(__NHC__) && __NHC__ > 114 ) || defined(__HUGS__)
 import System.IO.Unsafe (unsafePerformIO)
@@ -151,6 +153,13 @@
 
 ---- Auxiliary Parsing Functions ----
 
+-- | Parse a bracketed item, discarding the brackets AND NOT using adjustErrBad
+myBracket :: PolyParse p => p bra -> p ket -> p a -> p a
+myBracket open close p = do
+    do { open    `adjustErr` ("Missing opening bracket:\n\t"++)
+       ; p `discard` (close `adjustErr` ("Missing closing bracket:\n\t"++))
+       }
+
 -- | XParser is just a specialisation of the PolyState parser.
 type XParser a = Parser SymTabs (Posn,TokenT) a
 
@@ -234,16 +243,18 @@
                                `debug` ("  defn:  "++flattenEV ev)
                          peRef p
            Just (PEDefExternalID (PUBLIC _ (SystemLiteral f))) ->
-                      do let val = unsafePerformIO (readFile f)
-                         reparse (xmlReLex (posInNewCxt ("file "++f)
+                      do let f' = combine (dropFileName $ posnFilename pn) f
+                             val = unsafePerformIO (readFile f')
+                         reparse (xmlReLex (posInNewCxt f'
                                                         (Just pn)) val)
-                               `debug` ("  reading from file "++f)
+                               `debug` ("  reading from file "++f')
                          peRef p
            Just (PEDefExternalID (SYSTEM (SystemLiteral f))) ->
-                      do let val = unsafePerformIO (readFile f)
-                         reparse (xmlReLex (posInNewCxt ("file "++f)
+                      do let f' = combine (dropFileName $ posnFilename pn) f
+                             val = unsafePerformIO (readFile f')
+                         reparse (xmlReLex (posInNewCxt f'
                                                         (Just pn)) val)
-                               `debug` ("  reading from file "++f)
+                               `debug` ("  reading from file "++f')
                          peRef p
            Nothing -> fail ("PEReference use before definition: "++"%"++n++";"
                            ++"\n    at "++show pn)
@@ -288,7 +299,7 @@
 -- | Return an XML comment.
 comment :: XParser Comment
 comment = do
-    bracket (tok TokCommentOpen) (tok TokCommentClose) freetext
+    myBracket (tok TokCommentOpen) (tok TokCommentClose) freetext
 --  tok TokCommentOpen
 --  commit $ do
 --    c <- freetext
@@ -509,19 +520,15 @@
 
 choice :: XParser [CP]
 choice = do
-    bracket (tok TokBraOpen `debug` "Trying choice")
-            (blank (tok TokBraClose `debug` "Succeeded with choice"))
-            (peRef cp `sepBy1` blank (tok TokPipe))
+    myBracket (tok TokBraOpen `debug` "Trying choice")
+              (blank (tok TokBraClose `debug` "Succeeded with choice"))
+              (peRef cp `sepBy1` blank (tok TokPipe))
 
 sequence :: XParser [CP]
-sequence = do	-- bracket is inappropriate because of inner failBad
- -- bracket (tok TokBraOpen `debug` "Trying sequence")
- --         (blank (tok TokBraClose `debug` "Succeeded with sequence"))
- --         (peRef cp `sepBy1` blank (tok TokComma))
-    tok TokBraOpen `debug` "Trying sequence"
-    cps <- peRef cp `sepBy1` blank (tok TokComma)
-    blank (tok TokBraClose `debug` "Succeeded with sequence")
-    return cps
+sequence = do
+ myBracket (tok TokBraOpen `debug` "Trying sequence")
+           (blank (tok TokBraClose `debug` "Succeeded with sequence"))
+           (peRef cp `sepBy1` blank (tok TokComma))
 
 cp :: XParser CP
 cp = oneOf [ ( do n <- name
@@ -701,7 +708,7 @@
 -- | Return either a general entity reference, or a character reference.
 reference :: XParser Reference
 reference = do
-    bracket (tok TokAmp) (tok TokSemi) (freetext >>= val)
+    myBracket (tok TokAmp) (tok TokSemi) (freetext >>= val)
   where
     val ('#':'x':i) | all isHexDigit i
                     = return . RefChar . fst . head . readHex $ i
@@ -729,11 +736,7 @@
 
 pereference :: XParser PEReference
 pereference = do
---  bracket (tok TokPercent) (tok TokSemi) nmtoken
-    tok TokPercent
-    p <- nmtoken
-    tok TokSemi
-    return p
+    myBracket (tok TokPercent) (tok TokSemi) nmtoken
 
 entitydecl :: XParser EntityDecl
 entitydecl =
diff --git a/src/Text/XML/HaXml/ParseLazy.hs b/src/Text/XML/HaXml/ParseLazy.hs
--- a/src/Text/XML/HaXml/ParseLazy.hs
+++ b/src/Text/XML/HaXml/ParseLazy.hs
@@ -42,7 +42,9 @@
 import Text.XML.HaXml.Lex
 import Text.ParserCombinators.Poly.NoLeak.StateLazy
 
+import System.FilePath (combine, dropFileName)
 
+
 #if ( defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ > 502 ) || \
     ( defined(__NHC__) && __NHC__ > 114 ) || defined(__HUGS__)
 import System.IO.Unsafe (unsafePerformIO)
@@ -154,6 +156,14 @@
 
 ---- Auxiliary Parsing Functions ----
 
+-- | Parse a bracketed item, discarding the brackets AND NOT using adjustErrBad
+myBracket :: PolyParse p => p bra -> p ket -> p a -> p a
+myBracket open close p = do
+    do { open    `adjustErr` ("Missing opening bracket:\n\t"++)
+       ; p `discard` (close `adjustErr` ("Missing closing bracket:\n\t"++))
+       }
+
+
 -- | XParser is just a specialisation of the PolyStateLazy parser.
 type XParser a = Parser SymTabs (Posn,TokenT) a
 
@@ -237,16 +247,18 @@
                                `debug` ("  defn:  "++flattenEV ev)
                          peRef p
            Just (PEDefExternalID (PUBLIC _ (SystemLiteral f))) ->
-                      do let val = unsafePerformIO (readFile f)
-                         reparse (xmlReLex (posInNewCxt ("file "++f)
+                      do let f' = combine (dropFileName $ posnFilename pn) f
+                             val = unsafePerformIO (readFile f')
+                         reparse (xmlReLex (posInNewCxt f'
                                                         (Just pn)) val)
-                               `debug` ("  reading from file "++f)
+                               `debug` ("  reading from file "++f')
                          peRef p
            Just (PEDefExternalID (SYSTEM (SystemLiteral f))) ->
-                      do let val = unsafePerformIO (readFile f)
-                         reparse (xmlReLex (posInNewCxt ("file "++f)
+                      do let f' = combine (dropFileName $ posnFilename pn) f
+                             val = unsafePerformIO (readFile f')
+                         reparse (xmlReLex (posInNewCxt f'
                                                         (Just pn)) val)
-                               `debug` ("  reading from file "++f)
+                               `debug` ("  reading from file "++f')
                          peRef p
            Nothing -> fail ("PEReference use before definition: "++"%"++n++";"
                            ++"\n    at "++show pn)
@@ -296,7 +308,7 @@
 -- | Return an XML comment.
 comment :: XParser Comment
 comment = do
-    bracket (tok TokCommentOpen) (tok TokCommentClose) freetext
+    myBracket (tok TokCommentOpen) (tok TokCommentClose) freetext
 --  tok TokCommentOpen
 --  commit $ do
 --    c <- freetext
@@ -517,19 +529,15 @@
 
 choice :: XParser [CP]
 choice = do
-    bracket (tok TokBraOpen `debug` "Trying choice")
-            (blank (tok TokBraClose `debug` "Succeeded with choice"))
-            (peRef cp `sepBy1` blank (tok TokPipe))
+    myBracket (tok TokBraOpen `debug` "Trying choice")
+              (blank (tok TokBraClose `debug` "Succeeded with choice"))
+              (peRef cp `sepBy1` blank (tok TokPipe))
 
 sequence :: XParser [CP]
-sequence = do	-- bracket is inappropriate because of inner failBad
- -- bracket (tok TokBraOpen `debug` "Trying sequence")
- --         (blank (tok TokBraClose `debug` "Succeeded with sequence"))
- --         (peRef cp `sepBy1` blank (tok TokComma))
-    tok TokBraOpen `debug` "Trying sequence"
-    cps <- peRef cp `sepBy1` blank (tok TokComma)
-    blank (tok TokBraClose `debug` "Succeeded with sequence")
-    return cps
+sequence = do
+ myBracket (tok TokBraOpen `debug` "Trying sequence")
+           (blank (tok TokBraClose `debug` "Succeeded with sequence"))
+           (peRef cp `sepBy1` blank (tok TokComma))
 
 cp :: XParser CP
 cp = oneOf [ ( do n <- name
@@ -737,7 +745,7 @@
 
 pereference :: XParser PEReference
 pereference = do
-    bracket (tok TokPercent) (tok TokSemi) nmtoken
+    myBracket (tok TokPercent) (tok TokSemi) nmtoken
 
 entitydecl :: XParser EntityDecl
 entitydecl =
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,8 @@
 posInNewCxt name pos = Pn name 1 1 pos
 
 instance Show Posn where
-      showsPrec _ (Pn f l c i) = showString f .
+      showsPrec _ (Pn f l c i) = showString "file " .
+                                 showString f .
                                  showString "  at line " . shows l .
                                  showString " col " . shows c .
                                  ( case i of
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
@@ -105,6 +105,76 @@
     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 b, HTypeable c, HTypeable d, HTypeable e
+         , HTypeable f, HTypeable g) =>
+         HTypeable (a,b,c,d,e,f,g) where
+    toHType p      = Tuple [ toHType a, toHType b, toHType c, toHType d
+                           , toHType e, toHType f, toHType g ]
+                   where  (a,b,c,d,e,f,g) = p
+instance ( HTypeable a, HTypeable b, HTypeable c, HTypeable d, HTypeable e
+         , HTypeable f, HTypeable g, HTypeable h) =>
+         HTypeable (a,b,c,d,e,f,g,h) where
+    toHType p      = Tuple [ toHType a, toHType b, toHType c, toHType d
+                           , toHType e, toHType f, toHType g, toHType h ]
+                   where  (a,b,c,d,e,f,g,h) = p
+instance ( HTypeable a, HTypeable b, HTypeable c, HTypeable d, HTypeable e
+         , HTypeable f, HTypeable g, HTypeable h, HTypeable i) =>
+         HTypeable (a,b,c,d,e,f,g,h,i) where
+    toHType p      = Tuple [ toHType a, toHType b, toHType c, toHType d
+                           , toHType e, toHType f, toHType g, toHType h
+                           , toHType i ]
+                   where  (a,b,c,d,e,f,g,h,i) = p
+instance ( HTypeable a, HTypeable b, HTypeable c, HTypeable d, HTypeable e
+         , HTypeable f, HTypeable g, HTypeable h, HTypeable i, HTypeable j) =>
+         HTypeable (a,b,c,d,e,f,g,h,i,j) where
+    toHType p      = Tuple [ toHType a, toHType b, toHType c, toHType d
+                           , toHType e, toHType f, toHType g, toHType h
+                           , toHType i, toHType j ]
+                   where  (a,b,c,d,e,f,g,h,i,j) = p
+instance ( HTypeable a, HTypeable b, HTypeable c, HTypeable d, HTypeable e
+         , HTypeable f, HTypeable g, HTypeable h, HTypeable i, HTypeable j
+         , HTypeable k) =>
+         HTypeable (a,b,c,d,e,f,g,h,i,j,k) where
+    toHType p      = Tuple [ toHType a, toHType b, toHType c, toHType d
+                           , toHType e, toHType f, toHType g, toHType h
+                           , toHType i, toHType j, toHType k ]
+                   where  (a,b,c,d,e,f,g,h,i,j,k) = p
+instance ( HTypeable a, HTypeable b, HTypeable c, HTypeable d, HTypeable e
+         , HTypeable f, HTypeable g, HTypeable h, HTypeable i, HTypeable j
+         , HTypeable k, HTypeable l) =>
+         HTypeable (a,b,c,d,e,f,g,h,i,j,k,l) where
+    toHType p      = Tuple [ toHType a, toHType b, toHType c, toHType d
+                           , toHType e, toHType f, toHType g, toHType h
+                           , toHType i, toHType j, toHType k, toHType l ]
+                   where  (a,b,c,d,e,f,g,h,i,j,k,l) = p
+instance ( HTypeable a, HTypeable b, HTypeable c, HTypeable d, HTypeable e
+         , HTypeable f, HTypeable g, HTypeable h, HTypeable i, HTypeable j
+         , HTypeable k, HTypeable l, HTypeable m) =>
+         HTypeable (a,b,c,d,e,f,g,h,i,j,k,l,m) where
+    toHType p      = Tuple [ toHType a, toHType b, toHType c, toHType d
+                           , toHType e, toHType f, toHType g, toHType h
+                           , toHType i, toHType j, toHType k, toHType l
+                           , toHType m ]
+                   where  (a,b,c,d,e,f,g,h,i,j,k,l,m) = p
+instance ( HTypeable a, HTypeable b, HTypeable c, HTypeable d, HTypeable e
+         , HTypeable f, HTypeable g, HTypeable h, HTypeable i, HTypeable j
+         , HTypeable k, HTypeable l, HTypeable m, HTypeable n) =>
+         HTypeable (a,b,c,d,e,f,g,h,i,j,k,l,m,n) where
+    toHType p      = Tuple [ toHType a, toHType b, toHType c, toHType d
+                           , toHType e, toHType f, toHType g, toHType h
+                           , toHType i, toHType j, toHType k, toHType l
+                           , toHType m, toHType n ]
+                   where  (a,b,c,d,e,f,g,h,i,j,k,l,m,n) = p
+instance ( HTypeable a, HTypeable b, HTypeable c, HTypeable d, HTypeable e
+         , HTypeable f, HTypeable g, HTypeable h, HTypeable i, HTypeable j
+         , HTypeable k, HTypeable l, HTypeable m, HTypeable n, HTypeable o) =>
+         HTypeable (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) where
+    toHType p      = Tuple [ toHType a, toHType b, toHType c, toHType d
+                           , toHType e, toHType f, toHType g, toHType h
+                           , toHType i, toHType j, toHType k, toHType l
+                           , toHType m, toHType n, toHType o ]
+                   where  (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) = 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/Wrappers.hs b/src/Text/XML/HaXml/Wrappers.hs
--- a/src/Text/XML/HaXml/Wrappers.hs
+++ b/src/Text/XML/HaXml/Wrappers.hs
@@ -1,6 +1,7 @@
 module Text.XML.HaXml.Wrappers
   ( fix2Args
   , processXmlWith
+  , onContent
   ) where
 
 -- imports required for processXmlWith and fix2Args
@@ -59,3 +60,12 @@
             [CElem e' _] -> Document p s e' m
             []           -> error "produced no output"
             _            -> error "produced more than one output"
+
+-- | The wrapper @onContent@ simply applies a given content filter to a
+--   document.  Ambiguous or empty results raise an error exception.
+onContent :: CFilter i -> Document i -> Document i
+onContent filter (Document p s e m) =
+    case filter (CElem e undefined) of
+      [CElem e' _] -> Document p s e' m
+      []           -> error "onContent: produced no output"
+      _            -> error "onContent: produced more than one output"
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
@@ -472,7 +472,7 @@
         }
 
 instance (XmlContent a, XmlContent b, XmlContent c) => XmlContent (a,b,c) where
-    toContents (x,y,z) = toContents x ++ toContents y ++ toContents z
+    toContents (a,b,c) = toContents a ++ toContents b ++ toContents c
     parseContents = do
         { a <- parseContents
         ; b <- parseContents
@@ -482,8 +482,8 @@
 
 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
+    toContents (a,b,c,d) = toContents a ++ toContents b ++ toContents c
+                           ++ toContents d
     parseContents = do
         { a <- parseContents
         ; b <- parseContents
@@ -495,8 +495,8 @@
 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
+    toContents (a,b,c,d,e) = toContents a ++ toContents b ++ toContents c
+                             ++ toContents d ++ toContents e
     parseContents = do
         { a <- parseContents
         ; b <- parseContents
@@ -509,8 +509,8 @@
 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
+    toContents (a,b,c,d,e,f) = toContents a ++ toContents b ++ toContents c
+                               ++ toContents d ++ toContents e ++ toContents f
     parseContents = do
         { a <- parseContents
         ; b <- parseContents
@@ -519,6 +519,215 @@
         ; e <- parseContents
         ; f <- parseContents
         ; return (a,b,c,d,e,f)
+        }
+
+instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d
+         , XmlContent e, XmlContent f, XmlContent g ) =>
+         XmlContent (a,b,c,d,e,f,g) where
+    toContents (a,b,c,d,e,f,g)
+        = toContents a ++ toContents b ++ toContents c ++ toContents d
+          ++ toContents e ++ toContents f ++ toContents g
+    parseContents = do
+        { a <- parseContents
+        ; b <- parseContents
+        ; c <- parseContents
+        ; d <- parseContents
+        ; e <- parseContents
+        ; f <- parseContents
+        ; g <- parseContents
+        ; return (a,b,c,d,e,f,g)
+        }
+
+instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d
+         , XmlContent e, XmlContent f, XmlContent g, XmlContent h ) =>
+         XmlContent (a,b,c,d,e,f,g,h) where
+    toContents (a,b,c,d,e,f,g,h)
+        = toContents a ++ toContents b ++ toContents c ++ toContents d
+          ++ toContents e ++ toContents f ++ toContents g ++ toContents h
+    parseContents = do
+        { a <- parseContents
+        ; b <- parseContents
+        ; c <- parseContents
+        ; d <- parseContents
+        ; e <- parseContents
+        ; f <- parseContents
+        ; g <- parseContents
+        ; h <- parseContents
+        ; return (a,b,c,d,e,f,g,h)
+        }
+
+instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d
+         , XmlContent e, XmlContent f, XmlContent g, XmlContent h
+         , XmlContent i ) =>
+         XmlContent (a,b,c,d,e,f,g,h,i) where
+    toContents (a,b,c,d,e,f,g,h,i)
+        = toContents a ++ toContents b ++ toContents c ++ toContents d
+          ++ toContents e ++ toContents f ++ toContents g ++ toContents h
+          ++ toContents i
+    parseContents = do
+        { a <- parseContents
+        ; b <- parseContents
+        ; c <- parseContents
+        ; d <- parseContents
+        ; e <- parseContents
+        ; f <- parseContents
+        ; g <- parseContents
+        ; h <- parseContents
+        ; i <- parseContents
+        ; return (a,b,c,d,e,f,g,h,i)
+        }
+
+instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d
+         , XmlContent e, XmlContent f, XmlContent g, XmlContent h
+         , XmlContent i, XmlContent j ) =>
+         XmlContent (a,b,c,d,e,f,g,h,i,j) where
+    toContents (a,b,c,d,e,f,g,h,i,j)
+        = toContents a ++ toContents b ++ toContents c ++ toContents d
+          ++ toContents e ++ toContents f ++ toContents g ++ toContents h
+          ++ toContents i ++ toContents j
+    parseContents = do
+        { a <- parseContents
+        ; b <- parseContents
+        ; c <- parseContents
+        ; d <- parseContents
+        ; e <- parseContents
+        ; f <- parseContents
+        ; g <- parseContents
+        ; h <- parseContents
+        ; i <- parseContents
+        ; j <- parseContents
+        ; return (a,b,c,d,e,f,g,h,i,j)
+        }
+
+instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d
+         , XmlContent e, XmlContent f, XmlContent g, XmlContent h
+         , XmlContent i, XmlContent j, XmlContent k ) =>
+         XmlContent (a,b,c,d,e,f,g,h,i,j,k) where
+    toContents (a,b,c,d,e,f,g,h,i,j,k)
+        = toContents a ++ toContents b ++ toContents c ++ toContents d
+          ++ toContents e ++ toContents f ++ toContents g ++ toContents h
+          ++ toContents i ++ toContents j ++ toContents k
+    parseContents = do
+        { a <- parseContents
+        ; b <- parseContents
+        ; c <- parseContents
+        ; d <- parseContents
+        ; e <- parseContents
+        ; f <- parseContents
+        ; g <- parseContents
+        ; h <- parseContents
+        ; i <- parseContents
+        ; j <- parseContents
+        ; k <- parseContents
+        ; return (a,b,c,d,e,f,g,h,i,j,k)
+        }
+
+instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d
+         , XmlContent e, XmlContent f, XmlContent g, XmlContent h
+         , XmlContent i, XmlContent j, XmlContent k, XmlContent l ) =>
+         XmlContent (a,b,c,d,e,f,g,h,i,j,k,l) where
+    toContents (a,b,c,d,e,f,g,h,i,j,k,l)
+        = toContents a ++ toContents b ++ toContents c ++ toContents d
+          ++ toContents e ++ toContents f ++ toContents g ++ toContents h
+          ++ toContents i ++ toContents j ++ toContents k ++ toContents l
+    parseContents = do
+        { a <- parseContents
+        ; b <- parseContents
+        ; c <- parseContents
+        ; d <- parseContents
+        ; e <- parseContents
+        ; f <- parseContents
+        ; g <- parseContents
+        ; h <- parseContents
+        ; i <- parseContents
+        ; j <- parseContents
+        ; k <- parseContents
+        ; l <- parseContents
+        ; return (a,b,c,d,e,f,g,h,i,j,k,l)
+        }
+
+instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d
+         , XmlContent e, XmlContent f, XmlContent g, XmlContent h
+         , XmlContent i, XmlContent j, XmlContent k, XmlContent l
+         , XmlContent m ) =>
+         XmlContent (a,b,c,d,e,f,g,h,i,j,k,l,m) where
+    toContents (a,b,c,d,e,f,g,h,i,j,k,l,m)
+        = toContents a ++ toContents b ++ toContents c ++ toContents d
+          ++ toContents e ++ toContents f ++ toContents g ++ toContents h
+          ++ toContents i ++ toContents j ++ toContents k ++ toContents l
+          ++ toContents m
+    parseContents = do
+        { a <- parseContents
+        ; b <- parseContents
+        ; c <- parseContents
+        ; d <- parseContents
+        ; e <- parseContents
+        ; f <- parseContents
+        ; g <- parseContents
+        ; h <- parseContents
+        ; i <- parseContents
+        ; j <- parseContents
+        ; k <- parseContents
+        ; l <- parseContents
+        ; m <- parseContents
+        ; return (a,b,c,d,e,f,g,h,i,j,k,l,m)
+        }
+
+instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d
+         , XmlContent e, XmlContent f, XmlContent g, XmlContent h
+         , XmlContent i, XmlContent j, XmlContent k, XmlContent l
+         , XmlContent m, XmlContent n ) =>
+         XmlContent (a,b,c,d,e,f,g,h,i,j,k,l,m,n) where
+    toContents (a,b,c,d,e,f,g,h,i,j,k,l,m,n)
+        = toContents a ++ toContents b ++ toContents c ++ toContents d
+          ++ toContents e ++ toContents f ++ toContents g ++ toContents h
+          ++ toContents i ++ toContents j ++ toContents k ++ toContents l
+          ++ toContents m ++ toContents n
+    parseContents = do
+        { a <- parseContents
+        ; b <- parseContents
+        ; c <- parseContents
+        ; d <- parseContents
+        ; e <- parseContents
+        ; f <- parseContents
+        ; g <- parseContents
+        ; h <- parseContents
+        ; i <- parseContents
+        ; j <- parseContents
+        ; k <- parseContents
+        ; l <- parseContents
+        ; m <- parseContents
+        ; n <- parseContents
+        ; return (a,b,c,d,e,f,g,h,i,j,k,l,m,n)
+        }
+
+instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d
+         , XmlContent e, XmlContent f, XmlContent g, XmlContent h
+         , XmlContent i, XmlContent j, XmlContent k, XmlContent l
+         , XmlContent m, XmlContent n, XmlContent o ) =>
+         XmlContent (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) where
+    toContents (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)
+        = toContents a ++ toContents b ++ toContents c ++ toContents d
+          ++ toContents e ++ toContents f ++ toContents g ++ toContents h
+          ++ toContents i ++ toContents j ++ toContents k ++ toContents l
+          ++ toContents m ++ toContents n ++ toContents o
+    parseContents = do
+        { a <- parseContents
+        ; b <- parseContents
+        ; c <- parseContents
+        ; d <- parseContents
+        ; e <- parseContents
+        ; f <- parseContents
+        ; g <- parseContents
+        ; h <- parseContents
+        ; i <- parseContents
+        ; j <- parseContents
+        ; k <- parseContents
+        ; l <- parseContents
+        ; m <- parseContents
+        ; n <- parseContents
+        ; o <- parseContents
+        ; return (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)
         }
 
 instance (XmlContent a) => XmlContent (Maybe a) where
