packages feed

HaXml 1.19.2 → 1.19.3

raw patch · 42 files changed

+3199/−2664 lines, 42 filesdep ~basedep ~bytestringdep ~polyparse

Dependency ranges changed: base, bytestring, polyparse

Files

HaXml.cabal view
@@ -1,5 +1,5 @@ name:		HaXml-version:	1.19.2+version:	1.19.3 license:	LGPL license-file:	COPYRIGHT author:		Malcolm Wallace <Malcolm.Wallace@cs.york.ac.uk>@@ -14,7 +14,9 @@ cabal-version:  >=1.2  flag splitBase+  default: True flag bytestringInBase+  default: False  library   exposed-modules:@@ -46,7 +48,7 @@         Text.XML.HaXml.Xtract.Combinators,         Text.XML.HaXml.Xtract.Lex,         Text.XML.HaXml.Xtract.Parse-  hs-source-dir: src+  hs-source-dirs: src   build-depends: base, haskell98, polyparse   if flag(splitBase)     build-depends: base >= 3, pretty, random, containers@@ -56,8 +58,8 @@     build-depends: base >= 2 && < 3   else     build-depends: base < 2 || >= 3, bytestring-  extensions: CPP-  cpp-options: -DVERSION=1.19.2+  extensions: CPP, ExistentialQuantification+  cpp-options: -DVERSION=1.19.3   nhc98-options: -K10M  Executable Canonicalise
Makefile view
@@ -1,5 +1,5 @@ SOFTWARE = HaXml-VERSION  = 1.19.2+VERSION  = 1.19.3  #CPP      = cpp -traditional CPP     = cpphs --text --noline	# useful e.g. on MacOS X
configure view
@@ -2,7 +2,7 @@ #       configure -- prepare to compile/install the HaXml package #       author:   Malcolm.Wallace@cs.york.ac.uk, August 2002 -VERSION="1.19.1"+VERSION="1.19.3"  if [ -f obj/prefix ] then INSTALLDIR=`cat obj/prefix`
docs/HaXml/Text-XML-HaXml-ShowXmlLazy.html view
@@ -122,7 +122,7 @@ ></TR ><TR ><TD CLASS="doc"->Convert a fully-typed XML document to a string (without DTD).                                         +>Convert a fully-typed XML document to a string (without DTD). </TD ></TR ><TR
docs/HaXml/Text-XML-HaXml-TypeMapping.html view
@@ -435,6 +435,54 @@ ></TR ><TR ><TD CLASS="decl"+>(<A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> a, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> b, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> c, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> d) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> (a, b, c, d)</TD+></TR+><TR+><TD CLASS="decl"+>(<A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> a, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> b, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> c, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> d, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> e) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> (a, b, c, d, e)</TD+></TR+><TR+><TD CLASS="decl"+>(<A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> a, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> b, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> c, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> d, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> e, <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> f) =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"+>HTypeable</A+> (a, b, c, d, e, f)</TD+></TR+><TR+><TD CLASS="decl" ><A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable" >HTypeable</A > a =&gt; <A HREF="Text-XML-HaXml-TypeMapping.html#t%3AHTypeable"
docs/HaXml/Text-XML-HaXml-Types.html view
@@ -391,6 +391,18 @@ ></TR ><TR ><TD CLASS="decl"+><A HREF="#v%3Ainfo"+>info</A+> :: <A HREF="Text-XML-HaXml-Types.html#t%3AContent"+>Content</A+> t -&gt; t</TD+></TR+><TR+><TD CLASS="s8"+></TD+></TR+><TR+><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3AProlog"@@ -2466,6 +2478,30 @@ ></TD ></TR ><TR+><TD CLASS="topdecl"+><TABLE CLASS="declbar"+><TR+><TD CLASS="declname"+><A NAME="v%3Ainfo"+></A+><B+>info</B+> :: <A HREF="Text-XML-HaXml-Types.html#t%3AContent"+>Content</A+> t -&gt; t</TD+><TD CLASS="declbut"+><A HREF="src/Text/XML/HaXml/Types.html#info"+>Source</A+></TD+></TR+></TABLE+></TD+></TR+><TR+><TD CLASS="s15"+></TD+></TR+><TR ><TD CLASS="section2" ><A NAME="6" >Administrative parts of the document@@ -3565,7 +3601,7 @@ >Plus</B ></TD ><TD CLASS="rdoc"->One Or More +>One Or More </TD ></TR ></TABLE
docs/HaXml/Text-XML-HaXml-XmlContent.html view
@@ -2069,6 +2069,54 @@ ></TR ><TR ><TD CLASS="decl"+>(<A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> a, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> b, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> c, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> d) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> (a, b, c, d)</TD+></TR+><TR+><TD CLASS="decl"+>(<A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> a, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> b, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> c, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> d, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> e) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> (a, b, c, d, e)</TD+></TR+><TR+><TD CLASS="decl"+>(<A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> a, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> b, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> c, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> d, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> e, <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> f) =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"+>XmlContent</A+> (a, b, c, d, e, f)</TD+></TR+><TR+><TD CLASS="decl" ><A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent" >XmlContent</A > a =&gt; <A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent"@@ -3201,7 +3249,7 @@ ><TR ><TD CLASS="doc" >Get the next content element, checking that it has one of the required-   tags, using the given matching function. +   tags, using the given matching function.    (Skips over comments and whitespace, rejects text and refs.     Also returns position of element.) </TD@@ -3469,7 +3517,7 @@ ></TR ><TR ><TD CLASS="doc"->Turn a simple string into XML text. +>Turn a simple string into XML text. </TD ></TR ><TR@@ -4370,12 +4418,12 @@ ><TR ><TD CLASS="ndoc" ><P->A type corresponding to XML's ANY contentspec. +>A type corresponding to XML's ANY contentspec.    It is either a list of unconverted xml <TT ><A HREF="Text-XML-HaXml-XmlContent.html#t%3AContent" >Content</A ></TT-> +>    or some <TT ><A HREF="Text-XML-HaXml-XmlContent.html#t%3AXmlContent" >XmlContent</A
docs/HaXml/doc-index-I.html view
@@ -351,9 +351,7 @@ ><TD CLASS="indexlinks" ><A HREF="Text-XML-HaXml-Types.html#v%3Ainfo" >Text.XML.HaXml.Types</A->, <A HREF="Text-XML-HaXml.html#v%3Ainfo"->Text.XML.HaXml</A-></TD+>, Text.XML.HaXml</TD ></TR ><TR ><TD CLASS="indexentry"
docs/HaXml/src/Text/XML/HaXml/ByteStringPP.html view
@@ -24,279 +24,321 @@ <a name="(line22)"></a> <a name="(line23)"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>maybe<font color=Cyan>,</font>either<font color=Cyan>,</font>elem<font color=Cyan>,</font>concat<font color=Cyan>)</font> <a name="(line24)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>-<a name="(line25)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font> +<a name="(line25)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List <font color=Cyan>(</font>intersperse<font color=Cyan>)</font> <a name="(line26)"></a><font color=Blue>--import Data.ByteString.Lazy hiding (pack,map,head,any,singleton,intersperse,join)</font>-<a name="(line27)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8 <font color=Cyan>(</font>ByteString()<font color=Cyan>,</font> concat<font color=Cyan>,</font> pack<font color=Cyan>,</font> singleton<font color=Cyan>,</font> join+<a name="(line27)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8 <font color=Cyan>(</font>ByteString()<font color=Cyan>,</font> concat<font color=Cyan>,</font> pack<font color=Cyan>,</font> singleton<font color=Cyan>,</font> intercalate <a name="(line28)"></a>                                  <font color=Cyan>,</font> append<font color=Cyan>,</font> elem<font color=Cyan>,</font> empty<font color=Cyan>)</font> <a name="(line29)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types <a name="(line30)"></a>-<a name="(line31)"></a><a name="either"></a>either f g <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> f x-<a name="(line32)"></a>either f g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x-<a name="(line33)"></a>-<a name="(line34)"></a><a name="maybe"></a>maybe f Nothing  <font color=Red>=</font> empty-<a name="(line35)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x-<a name="(line36)"></a>-<a name="(line37)"></a>-<a name="(line38)"></a><font color=Blue>-- A simple implementation of the pretty-printing combinator interface,</font>-<a name="(line39)"></a><font color=Blue>-- but for plain ByteStrings:</font>-<a name="(line40)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan>&lt;&gt;</font> -<a name="(line41)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line42)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>5</font> <font color=Cyan>$$</font><font color=Cyan>,</font> <font color=Cyan>$+$</font>-<a name="(line43)"></a><a name="<>"></a><font color=Cyan>(</font><font color=Cyan>&lt;&gt;</font><font color=Cyan>)</font>   <font color=Red>::</font> ByteString   <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString <font color=Blue>-- Beside</font>-<a name="(line44)"></a><a name="hcat"></a>hcat   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString		   <font color=Blue>-- List version of &lt;&gt;</font>-<a name="(line45)"></a><a name="<+>"></a><font color=Cyan>(</font><font color=Cyan>&lt;+&gt;</font><font color=Cyan>)</font>  <font color=Red>::</font> ByteString   <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString <font color=Blue>-- Beside, separated by space</font>-<a name="(line46)"></a><a name="hsep"></a>hsep   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString		   <font color=Blue>-- List version of &lt;+&gt;</font>-<a name="(line47)"></a><a name="$$"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font>   <font color=Red>::</font> ByteString   <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString <font color=Blue>-- Above; if there is no</font>-<a name="(line48)"></a>                                                   <font color=Blue>-- overlap, it "dovetails"</font>-<a name="(line49)"></a><a name="vcat"></a>vcat   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- List version of $$</font>-<a name="(line50)"></a><a name="cat"></a>cat    <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- Either hcat or vcat</font>-<a name="(line51)"></a><a name="sep"></a>sep    <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- Either hsep or vcat</font>-<a name="(line52)"></a><a name="fcat"></a>fcat   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- ``Paragraph fill'' version of cat</font>-<a name="(line53)"></a><a name="fsep"></a>fsep   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- ``Paragraph fill'' version of sep</font>-<a name="(line54)"></a><a name="nest"></a>nest   <font color=Red>::</font> Int <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString  <font color=Blue>-- Nested</font>-<a name="(line55)"></a>-<a name="(line56)"></a><font color=Cyan>(</font><font color=Cyan>&lt;&gt;</font><font color=Cyan>)</font>  b1 b2  <font color=Red>=</font> b1 <font color=Cyan>`append`</font> b2-<a name="(line57)"></a><font color=Cyan>(</font><font color=Cyan>&lt;+&gt;</font><font color=Cyan>)</font> b1 b2  <font color=Red>=</font> b1 <font color=Cyan>&lt;&gt;</font> pack <font color=Magenta>" "</font> <font color=Cyan>&lt;&gt;</font> b2-<a name="(line58)"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font>  b1 b2  <font color=Red>=</font> b1 <font color=Cyan>&lt;&gt;</font> pack <font color=Magenta>"\n"</font> <font color=Cyan>&lt;&gt;</font> b2-<a name="(line59)"></a><a name="$+$"></a><font color=Cyan>(</font><font color=Cyan>$+$</font><font color=Cyan>)</font>        <font color=Red>=</font> <font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font>-<a name="(line60)"></a>-<a name="(line61)"></a>hcat <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>concat -<a name="(line62)"></a>hsep <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>join <font color=Cyan>(</font>singleton <font color=Magenta>' '</font><font color=Cyan>)</font>-<a name="(line63)"></a>vcat <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>join <font color=Cyan>(</font>singleton <font color=Magenta>'\n'</font><font color=Cyan>)</font>-<a name="(line64)"></a>cat  <font color=Red>=</font> hcat-<a name="(line65)"></a>sep  <font color=Red>=</font> hsep-<a name="(line66)"></a><a name="text"></a>text <font color=Red>=</font> pack-<a name="(line67)"></a>fcat <font color=Red>=</font> cat-<a name="(line68)"></a>fsep <font color=Red>=</font> sep-<a name="(line69)"></a>nest <font color=Green><u>_</u></font> b <font color=Red>=</font> pack <font color=Magenta>" "</font> <font color=Cyan>&lt;&gt;</font> b-<a name="(line70)"></a><a name="parens"></a>parens p <font color=Red>=</font> pack <font color=Magenta>"("</font> <font color=Cyan>&lt;&gt;</font> p <font color=Cyan>&lt;&gt;</font> pack <font color=Magenta>")"</font>-<a name="(line71)"></a>-<a name="(line72)"></a>-<a name="(line73)"></a><font color=Blue>----</font>-<a name="(line74)"></a><font color=Blue>-- Now for the XML pretty-printing interface.</font>-<a name="(line75)"></a><font color=Blue>-- (Basically copied direct from Text.XML.HaXml.Pretty).</font>+<a name="(line31)"></a><a name="either"></a>either <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-&gt;</font> t1<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>t2 <font color=Red>-&gt;</font> t1<font color=Cyan>)</font> <font color=Red>-&gt;</font> Either t t2 <font color=Red>-&gt;</font> t1+<a name="(line32)"></a>either f <font color=Green><u>_</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> f x+<a name="(line33)"></a>either <font color=Green><u>_</u></font> g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x+<a name="(line34)"></a>+<a name="(line35)"></a><a name="maybe"></a>maybe <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-&gt;</font> ByteString<font color=Cyan>)</font> <font color=Red>-&gt;</font> Maybe t <font color=Red>-&gt;</font> ByteString+<a name="(line36)"></a>maybe <font color=Green><u>_</u></font> Nothing  <font color=Red>=</font> empty+<a name="(line37)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x+<a name="(line38)"></a>+<a name="(line39)"></a>+<a name="(line40)"></a><font color=Blue>-- A simple implementation of the pretty-printing combinator interface,</font>+<a name="(line41)"></a><font color=Blue>-- but for plain ByteStrings:</font>+<a name="(line42)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line43)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>6</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line44)"></a><font color=Green><u>infixl</u></font> <font color=Magenta>5</font> <font color=Cyan>$$</font>+<a name="(line45)"></a><a name="<>"></a><font color=Cyan>(</font><font color=Cyan>&lt;&gt;</font><font color=Cyan>)</font>   <font color=Red>::</font> ByteString   <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString <font color=Blue>-- Beside</font>+<a name="(line46)"></a><a name="hcat"></a>hcat   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString                 <font color=Blue>-- List version of &lt;&gt;</font>+<a name="(line47)"></a><a name="<+>"></a><font color=Cyan>(</font><font color=Cyan>&lt;+&gt;</font><font color=Cyan>)</font>  <font color=Red>::</font> ByteString   <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString <font color=Blue>-- Beside, separated by space</font>+<a name="(line48)"></a><a name="hsep"></a>hsep   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString                 <font color=Blue>-- List version of &lt;+&gt;</font>+<a name="(line49)"></a><a name="$$"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font>   <font color=Red>::</font> ByteString   <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString <font color=Blue>-- Above; if there is no</font>+<a name="(line50)"></a>                                                   <font color=Blue>-- overlap, it "dovetails"</font>+<a name="(line51)"></a><a name="vcat"></a>vcat   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- List version of $$</font>+<a name="(line52)"></a><a name="sep"></a><font color=Blue>-- cat    :: [ByteString] -&gt; ByteString       -- Either hcat or vcat</font>+<a name="(line53)"></a>sep    <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- Either hsep or vcat</font>+<a name="(line54)"></a><a name="fsep"></a><font color=Blue>-- fcat   :: [ByteString] -&gt; ByteString       -- ``Paragraph fill'' version of cat</font>+<a name="(line55)"></a>fsep   <font color=Red>::</font> <font color=Red>[</font>ByteString<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString       <font color=Blue>-- ``Paragraph fill'' version of sep</font>+<a name="(line56)"></a><a name="nest"></a>nest   <font color=Red>::</font> Int <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> ByteString  <font color=Blue>-- Nested</font>+<a name="(line57)"></a>+<a name="(line58)"></a><font color=Cyan>(</font><font color=Cyan>&lt;&gt;</font><font color=Cyan>)</font>  b1 b2  <font color=Red>=</font> b1 <font color=Cyan>`append`</font> b2+<a name="(line59)"></a><font color=Cyan>(</font><font color=Cyan>&lt;+&gt;</font><font color=Cyan>)</font> b1 b2  <font color=Red>=</font> b1 <font color=Cyan>&lt;&gt;</font> pack <font color=Magenta>" "</font> <font color=Cyan>&lt;&gt;</font> b2+<a name="(line60)"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font>  b1 b2  <font color=Red>=</font> b1 <font color=Cyan>&lt;&gt;</font> pack <font color=Magenta>"\n"</font> <font color=Cyan>&lt;&gt;</font> b2+<a name="(line61)"></a><font color=Blue>-- ($+$)        = ($$)</font>+<a name="(line62)"></a>+<a name="(line63)"></a>hcat <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>concat+<a name="(line64)"></a>hsep <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>intercalate <font color=Cyan>(</font>singleton <font color=Magenta>' '</font><font color=Cyan>)</font>+<a name="(line65)"></a>vcat <font color=Red>=</font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8<font color=Cyan>.</font>intercalate <font color=Cyan>(</font>singleton <font color=Magenta>'\n'</font><font color=Cyan>)</font>+<a name="(line66)"></a><font color=Green><u>_</u></font>  <font color=Red>=</font> hcat+<a name="(line67)"></a>sep  <font color=Red>=</font> hsep+<a name="(line68)"></a><a name="text"></a>text <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString+<a name="(line69)"></a>text <font color=Red>=</font> pack+<a name="(line70)"></a><font color=Blue>-- _ = cat</font>+<a name="(line71)"></a>fsep <font color=Red>=</font> sep+<a name="(line72)"></a>nest <font color=Green><u>_</u></font> b <font color=Red>=</font> pack <font color=Magenta>" "</font> <font color=Cyan>&lt;&gt;</font> b+<a name="(line73)"></a><a name="parens"></a>parens <font color=Red>::</font> ByteString <font color=Red>-&gt;</font> ByteString+<a name="(line74)"></a>parens p <font color=Red>=</font> pack <font color=Magenta>"("</font> <font color=Cyan>&lt;&gt;</font> p <font color=Cyan>&lt;&gt;</font> pack <font color=Magenta>")"</font>+<a name="(line75)"></a> <a name="(line76)"></a>-<a name="(line77)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-&gt;</font> ByteString-<a name="(line78)"></a><a name="prolog"></a>prolog   <font color=Red>::</font> Prolog     <font color=Red>-&gt;</font> ByteString-<a name="(line79)"></a><a name="xmldecl"></a>xmldecl  <font color=Red>::</font> XMLDecl    <font color=Red>-&gt;</font> ByteString-<a name="(line80)"></a><a name="misc"></a>misc     <font color=Red>::</font> Misc       <font color=Red>-&gt;</font> ByteString-<a name="(line81)"></a><a name="sddecl"></a>sddecl   <font color=Red>::</font> Bool       <font color=Red>-&gt;</font> ByteString-<a name="(line82)"></a>-<a name="(line83)"></a><a name="doctypedecl"></a>doctypedecl   <font color=Red>::</font> DocTypeDecl   <font color=Red>-&gt;</font> ByteString-<a name="(line84)"></a><a name="markupdecl"></a>markupdecl    <font color=Red>::</font> MarkupDecl    <font color=Red>-&gt;</font> ByteString-<a name="(line85)"></a><a name="extsubset"></a>extsubset     <font color=Red>::</font> ExtSubset     <font color=Red>-&gt;</font> ByteString-<a name="(line86)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> ExtSubsetDecl <font color=Red>-&gt;</font> ByteString-<a name="(line87)"></a><a name="cp"></a>cp            <font color=Red>::</font> CP            <font color=Red>-&gt;</font> ByteString-<a name="(line88)"></a>-<a name="(line89)"></a><a name="element"></a>element   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> ByteString-<a name="(line90)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> ByteString-<a name="(line91)"></a><a name="content"></a>content   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> ByteString+<a name="(line77)"></a><font color=Blue>----</font>+<a name="(line78)"></a><font color=Blue>-- Now for the XML pretty-printing interface.</font>+<a name="(line79)"></a><font color=Blue>-- (Basically copied direct from Text.XML.HaXml.Pretty).</font>+<a name="(line80)"></a>+<a name="(line81)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-&gt;</font> ByteString+<a name="(line82)"></a><a name="prolog"></a>prolog   <font color=Red>::</font> Prolog     <font color=Red>-&gt;</font> ByteString+<a name="(line83)"></a><a name="xmldecl"></a>xmldecl  <font color=Red>::</font> XMLDecl    <font color=Red>-&gt;</font> ByteString+<a name="(line84)"></a><a name="misc"></a>misc     <font color=Red>::</font> Misc       <font color=Red>-&gt;</font> ByteString+<a name="(line85)"></a><a name="sddecl"></a>sddecl   <font color=Red>::</font> Bool       <font color=Red>-&gt;</font> ByteString+<a name="(line86)"></a>+<a name="(line87)"></a><a name="doctypedecl"></a>doctypedecl   <font color=Red>::</font> DocTypeDecl   <font color=Red>-&gt;</font> ByteString+<a name="(line88)"></a><a name="markupdecl"></a>markupdecl    <font color=Red>::</font> MarkupDecl    <font color=Red>-&gt;</font> ByteString+<a name="(line89)"></a><a name="cp"></a><font color=Blue>-- extsubset     :: ExtSubset     -&gt; ByteString</font>+<a name="(line90)"></a><font color=Blue>-- extsubsetdecl :: ExtSubsetDecl -&gt; ByteString</font>+<a name="(line91)"></a>cp            <font color=Red>::</font> CP            <font color=Red>-&gt;</font> ByteString <a name="(line92)"></a>-<a name="(line93)"></a><font color=Blue>----</font>-<a name="(line94)"></a>-<a name="(line95)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m<font color=Cyan>)</font>-<a name="(line96)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>-<a name="(line97)"></a>                             vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line98)"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>-<a name="(line99)"></a>                             vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m2<font color=Cyan>)</font>-<a name="(line100)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font>   <font color=Red>=</font> text <font color=Magenta>"&lt;?xml version='"</font> <font color=Cyan>&lt;&gt;</font> text v <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line101)"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>-<a name="(line102)"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>-<a name="(line103)"></a>                             text <font color=Magenta>"?&gt;"</font>-<a name="(line104)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!--"</font> <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"--&gt;"</font>-<a name="(line105)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"&lt;?"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"?&gt;"</font>-<a name="(line106)"></a>sddecl sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>-<a name="(line107)"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>-<a name="(line108)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> Prelude<font color=Cyan>.</font>null ds <font color=Green><u>then</u></font> -<a name="(line109)"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>-<a name="(line110)"></a>                             <font color=Green><u>else</u></font> hd <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>-<a name="(line111)"></a>                                  vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]&gt;"</font>-<a name="(line112)"></a>                           <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"&lt;!DOCTYPE"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line113)"></a>                                      maybe externalid eid-<a name="(line114)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e-<a name="(line115)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a-<a name="(line116)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e-<a name="(line117)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n-<a name="(line118)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m-<a name="(line119)"></a><font color=Blue>--markupdecl (MarkupPE p m)  = peref p</font>-<a name="(line120)"></a>extsubset <font color=Cyan>(</font>ExtSubset t ds<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan>$$</font>-<a name="(line121)"></a>                             vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map extsubsetdecl ds<font color=Cyan>)</font>-<a name="(line122)"></a>extsubsetdecl <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font>      <font color=Red>=</font> markupdecl m-<a name="(line123)"></a>extsubsetdecl <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c-<a name="(line124)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e)   = peref p</font>-<a name="(line125)"></a>-<a name="(line126)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line127)"></a>                         fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"/&gt;"</font>-<a name="(line128)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>-<a name="(line129)"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>-<a name="(line130)"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>-<a name="(line131)"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>-<a name="(line132)"></a>    <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line133)"></a>                         text <font color=Magenta>"&gt;"</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map content cs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line134)"></a>                         text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>-<a name="(line135)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty-<a name="(line136)"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c-<a name="(line137)"></a>-<a name="(line138)"></a><a name="isText"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True-<a name="(line139)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> True-<a name="(line140)"></a>isText <font color=Green><u>_</u></font>               <font color=Red>=</font> False+<a name="(line93)"></a><a name="element"></a>element   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> ByteString+<a name="(line94)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> ByteString+<a name="(line95)"></a><a name="content"></a>content   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> ByteString+<a name="(line96)"></a>+<a name="(line97)"></a><font color=Blue>----</font>+<a name="(line98)"></a>+<a name="(line99)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m<font color=Cyan>)</font>+<a name="(line100)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>+<a name="(line101)"></a>                             vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>+<a name="(line102)"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>+<a name="(line103)"></a>                             vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map misc m2<font color=Cyan>)</font>+<a name="(line104)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font>   <font color=Red>=</font> text <font color=Magenta>"&lt;?xml version='"</font> <font color=Cyan>&lt;&gt;</font> text v <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line105)"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>+<a name="(line106)"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>+<a name="(line107)"></a>                             text <font color=Magenta>"?&gt;"</font>+<a name="(line108)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!--"</font> <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"--&gt;"</font>+<a name="(line109)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"&lt;?"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"?&gt;"</font>+<a name="(line110)"></a>sddecl sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>+<a name="(line111)"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>+<a name="(line112)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> Prelude<font color=Cyan>.</font>null ds <font color=Green><u>then</u></font>+<a name="(line113)"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>+<a name="(line114)"></a>                             <font color=Green><u>else</u></font> hd <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>+<a name="(line115)"></a>                                  vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]&gt;"</font>+<a name="(line116)"></a>                           <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"&lt;!DOCTYPE"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line117)"></a>                                      maybe externalid eid+<a name="(line118)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e+<a name="(line119)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a+<a name="(line120)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e+<a name="(line121)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n+<a name="(line122)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m+<a name="(line123)"></a><font color=Blue>--markupdecl (MarkupPE p m)  = peref p</font>+<a name="(line124)"></a><font color=Blue>-- _ (ExtSubset t ds) = maybe textdecl t $$</font>+<a name="(line125)"></a><font color=Blue>--                             vcat (Prelude.map extsubsetdecl ds)</font>+<a name="(line126)"></a><font color=Blue>-- _ (ExtMarkupDecl m)      = markupdecl m</font>+<a name="(line127)"></a><font color=Blue>-- extsubsetdecl (ExtConditionalSect c) = conditionalsect c</font>+<a name="(line128)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e)   = peref p</font>+<a name="(line129)"></a>+<a name="(line130)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line131)"></a>                         fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"/&gt;"</font>+<a name="(line132)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>+<a name="(line133)"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>+<a name="(line134)"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>+<a name="(line135)"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>+<a name="(line136)"></a>    <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line137)"></a>                         text <font color=Magenta>"&gt;"</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map content cs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line138)"></a>                         text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>+<a name="(line139)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty+<a name="(line140)"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c <a name="(line141)"></a>-<a name="(line142)"></a><a name="carryelem"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c-<a name="(line143)"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>-<a name="(line144)"></a>                           text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>-<a name="(line145)"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>-<a name="(line146)"></a>carryelem e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c-<a name="(line147)"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>-<a name="(line148)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font>  <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>-<a name="(line149)"></a>                          <font color=Green><u>in</u></font>-<a name="(line150)"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>-<a name="(line151)"></a>                            text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line152)"></a>                            nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> <font color=Blue>--- $$</font>-<a name="(line153)"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n-<a name="(line154)"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>-<a name="(line155)"></a><a name="carrycontent"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> carryelem e c-<a name="(line156)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line157)"></a>carrycontent <font color=Cyan>(</font>CString True  s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line158)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c    <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line159)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line160)"></a>-<a name="(line161)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>c<font color=Red>-&gt;</font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> c <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>-<a name="(line162)"></a>carryscan f []     c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>-<a name="(line163)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c-<a name="(line164)"></a>                           <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0-<a name="(line165)"></a>                       <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>-<a name="(line166)"></a>-<a name="(line167)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>-<a name="(line168)"></a><font color=Blue>--  | isText (head cs) =</font>-<a name="(line169)"></a><font color=Blue>--        ( start &lt;&gt;</font>-<a name="(line170)"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>-<a name="(line171)"></a><font color=Blue>--        , text "&gt;")</font>-<a name="(line172)"></a><font color=Blue>--  | otherwise =</font>-<a name="(line173)"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>-<a name="(line174)"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>-<a name="(line175)"></a><font color=Blue>--        , text "&gt;")</font>-<a name="(line176)"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>-<a name="(line177)"></a><font color=Blue>--</font>-<a name="(line178)"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>-<a name="(line179)"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>-<a name="(line180)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>-<a name="(line181)"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>-<a name="(line182)"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>-<a name="(line183)"></a>-<a name="(line184)"></a>-<a name="(line185)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>             <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;&gt;</font> attvalue v-<a name="(line186)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e-<a name="(line187)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s-<a name="(line188)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> cdsect s-<a name="(line189)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r-<a name="(line190)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m+<a name="(line142)"></a><a name="isText"></a>isText <font color=Red>::</font> Content t <font color=Red>-&gt;</font> Bool+<a name="(line143)"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True+<a name="(line144)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> True+<a name="(line145)"></a>isText <font color=Green><u>_</u></font>               <font color=Red>=</font> False+<a name="(line146)"></a>+<a name="(line147)"></a><a name="carryelem"></a>carryelem <font color=Red>::</font> Element t <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> <font color=Cyan>(</font>ByteString<font color=Cyan>,</font> ByteString<font color=Cyan>)</font>+<a name="(line148)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c+<a name="(line149)"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>+<a name="(line150)"></a>                           text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>+<a name="(line151)"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>+<a name="(line152)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c+<a name="(line153)"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>+<a name="(line154)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font>  <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>+<a name="(line155)"></a>                          <font color=Green><u>in</u></font>+<a name="(line156)"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>+<a name="(line157)"></a>                            text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>+<a name="(line158)"></a>                            nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> <font color=Blue>--- $$</font>+<a name="(line159)"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n+<a name="(line160)"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>+<a name="(line161)"></a><a name="carrycontent"></a>carrycontent <font color=Red>::</font> Content t <font color=Red>-&gt;</font> ByteString <font color=Red>-&gt;</font> <font color=Cyan>(</font>ByteString<font color=Cyan>,</font> ByteString<font color=Cyan>)</font>+<a name="(line162)"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> carryelem e c+<a name="(line163)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line164)"></a>carrycontent <font color=Cyan>(</font>CString True  s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line165)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c    <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line166)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line167)"></a>+<a name="(line168)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>c<font color=Red>-&gt;</font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> c <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>+<a name="(line169)"></a>carryscan <font color=Green><u>_</u></font> []     c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>+<a name="(line170)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c+<a name="(line171)"></a>                           <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0+<a name="(line172)"></a>                       <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>+<a name="(line173)"></a>+<a name="(line174)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>+<a name="(line175)"></a><font color=Blue>--  | isText (head cs) =</font>+<a name="(line176)"></a><font color=Blue>--        ( start &lt;&gt;</font>+<a name="(line177)"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>+<a name="(line178)"></a><font color=Blue>--        , text "&gt;")</font>+<a name="(line179)"></a><font color=Blue>--  | otherwise =</font>+<a name="(line180)"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>+<a name="(line181)"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>+<a name="(line182)"></a><font color=Blue>--        , text "&gt;")</font>+<a name="(line183)"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>+<a name="(line184)"></a><font color=Blue>--</font>+<a name="(line185)"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>+<a name="(line186)"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>+<a name="(line187)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>+<a name="(line188)"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>+<a name="(line189)"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>+<a name="(line190)"></a> <a name="(line191)"></a>-<a name="(line192)"></a><a name="elementdecl"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ELEMENT"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line193)"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>-<a name="(line194)"></a><a name="contentspec"></a>contentspec EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>-<a name="(line195)"></a>contentspec ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>-<a name="(line196)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m-<a name="(line197)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c-<a name="(line198)"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>-<a name="(line199)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font>       <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> modifier m-<a name="(line200)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line201)"></a>                           modifier m-<a name="(line202)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font>          <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line203)"></a>                           modifier m-<a name="(line204)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>-<a name="(line205)"></a>modifier None          <font color=Red>=</font> empty-<a name="(line206)"></a>modifier Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>-<a name="(line207)"></a>modifier Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>-<a name="(line208)"></a>modifier Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>-<a name="(line209)"></a><a name="mixed"></a>mixed  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>-<a name="(line210)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line211)"></a>                         hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line212)"></a>                         text <font color=Magenta>")*"</font>-<a name="(line213)"></a>-<a name="(line214)"></a><a name="attlistdecl"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ATTLIST"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line215)"></a>                                 fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>-<a name="(line216)"></a><a name="attdef"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>          <font color=Red>=</font> text n <font color=Cyan>&lt;+&gt;</font> atttype t <font color=Cyan>&lt;+&gt;</font> defaultdecl d-<a name="(line217)"></a><a name="atttype"></a>atttype  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>-<a name="(line218)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t-<a name="(line219)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t-<a name="(line220)"></a><a name="tokenizedtype"></a>tokenizedtype ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>-<a name="(line221)"></a>tokenizedtype IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>-<a name="(line222)"></a>tokenizedtype IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>-<a name="(line223)"></a>tokenizedtype ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>-<a name="(line224)"></a>tokenizedtype ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>-<a name="(line225)"></a>tokenizedtype NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>-<a name="(line226)"></a>tokenizedtype NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>-<a name="(line227)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n-<a name="(line228)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e-<a name="(line229)"></a><a name="notationtype"></a>notationtype ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line230)"></a>                                 parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line231)"></a><a name="enumeration"></a>enumeration ns                 <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line232)"></a><a name="defaultdecl"></a>defaultdecl  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>-<a name="(line233)"></a>defaultdecl  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>-<a name="(line234)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font>    <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan>&lt;+&gt;</font> attvalue a-<a name="(line235)"></a><a name="conditionalsect"></a>conditionalsect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Red>=</font> text <font color=Magenta>"&lt;![INCLUDE ["</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line236)"></a>                                 vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map extsubsetdecl i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>-<a name="(line237)"></a>conditionalsect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![IGNORE ["</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line238)"></a>                                 fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ignoresectcontents i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>-<a name="(line239)"></a><a name="ignore"></a>ignore <font color=Cyan>(</font>Ignore<font color=Cyan>)</font>                <font color=Red>=</font> empty-<a name="(line240)"></a><a name="ignoresectcontents"></a>ignoresectcontents <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>-<a name="(line241)"></a>                               <font color=Red>=</font> ignore i <font color=Cyan>&lt;+&gt;</font> vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map internal is<font color=Cyan>)</font>-<a name="(line242)"></a>                          <font color=Green><u>where</u></font> internal <font color=Cyan>(</font>ics<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![["</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line243)"></a>                                                   ignoresectcontents ics <font color=Cyan>&lt;+&gt;</font>-<a name="(line244)"></a>                                                   text <font color=Magenta>"]]&gt;"</font> <font color=Cyan>&lt;+&gt;</font> ignore i-<a name="(line245)"></a><a name="reference"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er-<a name="(line246)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr-<a name="(line247)"></a><a name="entityref"></a>entityref n                    <font color=Red>=</font> text <font color=Magenta>"&amp;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>-<a name="(line248)"></a><a name="charref"></a>charref c                      <font color=Red>=</font> text <font color=Magenta>"&amp;#"</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>-<a name="(line249)"></a><a name="entitydecl"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d-<a name="(line250)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d-<a name="(line251)"></a><a name="gedecl"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> entitydef ed <font color=Cyan>&lt;&gt;</font>-<a name="(line252)"></a>                                 text <font color=Magenta>"&gt;"</font>-<a name="(line253)"></a><a name="pedecl"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY %"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> pedef pd <font color=Cyan>&lt;&gt;</font>-<a name="(line254)"></a>                                 text <font color=Magenta>"&gt;"</font>-<a name="(line255)"></a><a name="entitydef"></a>entitydef <font color=Cyan>(</font>DefEntityValue ev<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ev-<a name="(line256)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan>&lt;+&gt;</font> maybe ndatadecl nd-<a name="(line257)"></a><a name="pedef"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ev-<a name="(line258)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid-<a name="(line259)"></a><a name="externalid"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font>         <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan>&lt;+&gt;</font> systemliteral sl-<a name="(line260)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font>       <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral i <font color=Cyan>&lt;+&gt;</font>-<a name="(line261)"></a>                                 systemliteral sl-<a name="(line262)"></a><a name="ndatadecl"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan>&lt;+&gt;</font> text n-<a name="(line263)"></a><a name="textdecl"></a>textdecl <font color=Cyan>(</font>TextDecl vi ed<font color=Cyan>)</font>      <font color=Red>=</font> text <font color=Magenta>"&lt;?xml"</font> <font color=Cyan>&lt;+&gt;</font> maybe text vi <font color=Cyan>&lt;+&gt;</font>-<a name="(line264)"></a>                                 encodingdecl ed <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"?&gt;"</font>-<a name="(line265)"></a><a name="extparsedent"></a>extparsedent <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font><font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font> content c-<a name="(line266)"></a><a name="extpe"></a>extpe <font color=Cyan>(</font>ExtPE t esd<font color=Cyan>)</font>            <font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font>-<a name="(line267)"></a>                                 vcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map extsubsetdecl esd<font color=Cyan>)</font>-<a name="(line268)"></a><a name="notationdecl"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>    <font color=Red>=</font> text <font color=Magenta>"&lt;!NOTATION"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line269)"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>-<a name="(line270)"></a>                                 text <font color=Magenta>"&gt;"</font>-<a name="(line271)"></a><a name="publicid"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>          <font color=Red>=</font> text <font color=Magenta>"PUBLICID"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral p-<a name="(line272)"></a><a name="encodingdecl"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>-<a name="(line273)"></a><a name="nmtoken"></a>nmtoken s                      <font color=Red>=</font> text s-<a name="(line274)"></a><a name="attvalue"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font>        <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line275)"></a>                                 hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line276)"></a>                                 text <font color=Magenta>"\""</font>-<a name="(line277)"></a><a name="entityvalue"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>-<a name="(line278)"></a>  <font color=Red>|</font> containsDoubleQuote evs    <font color=Red>=</font> text <font color=Magenta>"'"</font>  <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>-<a name="(line279)"></a>  <font color=Red>|</font> otherwise                  <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>-<a name="(line280)"></a><a name="ev"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s-<a name="(line281)"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>-<a name="(line282)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r-<a name="(line283)"></a><a name="pubidliteral"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>-<a name="(line284)"></a>    <font color=Red>|</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>-<a name="(line285)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>-<a name="(line286)"></a><a name="systemliteral"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>-<a name="(line287)"></a>    <font color=Red>|</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>-<a name="(line288)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>-<a name="(line289)"></a><a name="chardata"></a>chardata s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s-<a name="(line290)"></a><a name="cdsect"></a>cdsect c                       <font color=Red>=</font> text <font color=Magenta>"&lt;![CDATA["</font> <font color=Cyan>&lt;&gt;</font> chardata c <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"]]&gt;"</font>-<a name="(line291)"></a>-<a name="(line292)"></a><a name="toWord8"></a><font color=Blue>--toWord8 :: Char -&gt; Word8</font>-<a name="(line293)"></a>toWord8 <font color=Red>=</font> toEnum <font color=Cyan>.</font> fromEnum-<a name="(line294)"></a>-<a name="(line295)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>-<a name="(line296)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs-<a name="(line297)"></a>    <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font>-<a name="(line298)"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False+<a name="(line192)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>             <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;&gt;</font> attvalue v+<a name="(line193)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e+<a name="(line194)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s+<a name="(line195)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> cdsect s+<a name="(line196)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r+<a name="(line197)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m+<a name="(line198)"></a>+<a name="(line199)"></a><a name="elementdecl"></a>elementdecl <font color=Red>::</font> ElementDecl <font color=Red>-&gt;</font> ByteString+<a name="(line200)"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ELEMENT"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line201)"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>+<a name="(line202)"></a><a name="contentspec"></a>contentspec <font color=Red>::</font> ContentSpec <font color=Red>-&gt;</font> ByteString+<a name="(line203)"></a>contentspec EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>+<a name="(line204)"></a>contentspec ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>+<a name="(line205)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m+<a name="(line206)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c+<a name="(line207)"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>+<a name="(line208)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font>       <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> modifier m+<a name="(line209)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line210)"></a>                           modifier m+<a name="(line211)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font>          <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line212)"></a>                           modifier m+<a name="(line213)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>+<a name="(line214)"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-&gt;</font> ByteString+<a name="(line215)"></a>modifier None          <font color=Red>=</font> empty+<a name="(line216)"></a>modifier Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>+<a name="(line217)"></a>modifier Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>+<a name="(line218)"></a>modifier Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>+<a name="(line219)"></a><a name="mixed"></a>mixed <font color=Red>::</font> Mixed <font color=Red>-&gt;</font> ByteString+<a name="(line220)"></a>mixed  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>+<a name="(line221)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line222)"></a>                         hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line223)"></a>                         text <font color=Magenta>")*"</font>+<a name="(line224)"></a>+<a name="(line225)"></a><a name="attlistdecl"></a>attlistdecl <font color=Red>::</font> AttListDecl <font color=Red>-&gt;</font> ByteString+<a name="(line226)"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ATTLIST"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line227)"></a>                                 fsep <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>+<a name="(line228)"></a><a name="attdef"></a>attdef <font color=Red>::</font> AttDef <font color=Red>-&gt;</font> ByteString+<a name="(line229)"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>          <font color=Red>=</font> text n <font color=Cyan>&lt;+&gt;</font> atttype t <font color=Cyan>&lt;+&gt;</font> defaultdecl d+<a name="(line230)"></a><a name="atttype"></a>atttype <font color=Red>::</font> AttType <font color=Red>-&gt;</font> ByteString+<a name="(line231)"></a>atttype  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>+<a name="(line232)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t+<a name="(line233)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t+<a name="(line234)"></a><a name="tokenizedtype"></a>tokenizedtype <font color=Red>::</font> TokenizedType <font color=Red>-&gt;</font> ByteString+<a name="(line235)"></a>tokenizedtype ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>+<a name="(line236)"></a>tokenizedtype IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>+<a name="(line237)"></a>tokenizedtype IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>+<a name="(line238)"></a>tokenizedtype ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>+<a name="(line239)"></a>tokenizedtype ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>+<a name="(line240)"></a>tokenizedtype NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>+<a name="(line241)"></a>tokenizedtype NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>+<a name="(line242)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Red>::</font> EnumeratedType <font color=Red>-&gt;</font> ByteString+<a name="(line243)"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n+<a name="(line244)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e+<a name="(line245)"></a><a name="notationtype"></a>notationtype <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> ByteString+<a name="(line246)"></a>notationtype ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line247)"></a>                                 parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line248)"></a><a name="enumeration"></a>enumeration <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> ByteString+<a name="(line249)"></a>enumeration ns                 <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line250)"></a><a name="defaultdecl"></a>defaultdecl <font color=Red>::</font> DefaultDecl <font color=Red>-&gt;</font> ByteString+<a name="(line251)"></a>defaultdecl  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>+<a name="(line252)"></a>defaultdecl  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>+<a name="(line253)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font>    <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan>&lt;+&gt;</font> attvalue a+<a name="(line254)"></a><a name="reference"></a><font color=Blue>--_ (IncludeSect i)= text "&lt;![INCLUDE [" &lt;+&gt;</font>+<a name="(line255)"></a><font color=Blue>--                                 vcat (Prelude.map extsubsetdecl i) &lt;+&gt; text "]]&gt;"</font>+<a name="(line256)"></a><font color=Blue>-- conditionalsect (IgnoreSect i) = text "&lt;![IGNORE [" &lt;+&gt;</font>+<a name="(line257)"></a><font color=Blue>--                                  fsep (Prelude.map ignoresectcontents i) &lt;+&gt; text "]]&gt;"</font>+<a name="(line258)"></a><font color=Blue>-- -- _ (Ignore)                = empty</font>+<a name="(line259)"></a><font color=Blue>-- ignoresectcontents :: IgnoreSectContents -&gt; ByteString</font>+<a name="(line260)"></a><font color=Blue>-- _ (IgnoreSectContents i is)</font>+<a name="(line261)"></a><font color=Blue>--                                = ignore i &lt;+&gt; vcat (Prelude.map internal is)</font>+<a name="(line262)"></a><font color=Blue>--                           where internal (ics,i) = text "&lt;![[" &lt;+&gt;</font>+<a name="(line263)"></a><font color=Blue>--                                                    ignoresectcontents ics &lt;+&gt;</font>+<a name="(line264)"></a><font color=Blue>--                                                    text "]]&gt;" &lt;+&gt; ignore i</font>+<a name="(line265)"></a>reference <font color=Red>::</font> Reference <font color=Red>-&gt;</font> ByteString+<a name="(line266)"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er+<a name="(line267)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr+<a name="(line268)"></a><a name="entityref"></a>entityref <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString+<a name="(line269)"></a>entityref n                    <font color=Red>=</font> text <font color=Magenta>"&amp;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>+<a name="(line270)"></a><a name="charref"></a>charref <font color=Red>::</font> <font color=Cyan>(</font>Show a<font color=Cyan>)</font> <font color=Red>=&gt;</font> a <font color=Red>-&gt;</font> ByteString+<a name="(line271)"></a>charref c                      <font color=Red>=</font> text <font color=Magenta>"&amp;#"</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>+<a name="(line272)"></a><a name="entitydecl"></a>entitydecl <font color=Red>::</font> EntityDecl <font color=Red>-&gt;</font> ByteString+<a name="(line273)"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d+<a name="(line274)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d+<a name="(line275)"></a><a name="gedecl"></a>gedecl <font color=Red>::</font> GEDecl <font color=Red>-&gt;</font> ByteString+<a name="(line276)"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> entitydef ed <font color=Cyan>&lt;&gt;</font>+<a name="(line277)"></a>                                 text <font color=Magenta>"&gt;"</font>+<a name="(line278)"></a><a name="pedecl"></a>pedecl <font color=Red>::</font> PEDecl <font color=Red>-&gt;</font> ByteString+<a name="(line279)"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY %"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> pedef pd <font color=Cyan>&lt;&gt;</font>+<a name="(line280)"></a>                                 text <font color=Magenta>"&gt;"</font>+<a name="(line281)"></a><a name="entitydef"></a>entitydef <font color=Red>::</font> EntityDef <font color=Red>-&gt;</font> ByteString+<a name="(line282)"></a>entitydef <font color=Cyan>(</font>DefEntityValue ew<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ew+<a name="(line283)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan>&lt;+&gt;</font> maybe ndatadecl nd+<a name="(line284)"></a><a name="pedef"></a>pedef <font color=Red>::</font> PEDef <font color=Red>-&gt;</font> ByteString+<a name="(line285)"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ew<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ew+<a name="(line286)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid+<a name="(line287)"></a><a name="externalid"></a>externalid <font color=Red>::</font> ExternalID <font color=Red>-&gt;</font> ByteString+<a name="(line288)"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font>         <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan>&lt;+&gt;</font> systemliteral sl+<a name="(line289)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font>       <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral i <font color=Cyan>&lt;+&gt;</font>+<a name="(line290)"></a>                                 systemliteral sl+<a name="(line291)"></a><a name="ndatadecl"></a>ndatadecl <font color=Red>::</font> NDataDecl <font color=Red>-&gt;</font> ByteString+<a name="(line292)"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan>&lt;+&gt;</font> text n+<a name="(line293)"></a><a name="notationdecl"></a><font color=Blue>-- _ (TextDecl vi ed)      = text "&lt;?xml" &lt;+&gt; maybe text vi &lt;+&gt;</font>+<a name="(line294)"></a><font color=Blue>--                                  encodingdecl ed &lt;&gt; text "?&gt;"</font>+<a name="(line295)"></a><font color=Blue>-- extparsedent :: ExtParsedEnt t -&gt; ByteString</font>+<a name="(line296)"></a><font color=Blue>-- _ (ExtParsedEnt t c)= maybe textdecl t &lt;+&gt; content c</font>+<a name="(line297)"></a><font color=Blue>-- _ (ExtPE t esd)            = maybe textdecl t &lt;+&gt;</font>+<a name="(line298)"></a><font color=Blue>--                                  vcat (Prelude.map extsubsetdecl esd)</font>+<a name="(line299)"></a>notationdecl <font color=Red>::</font> NotationDecl <font color=Red>-&gt;</font> ByteString+<a name="(line300)"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>    <font color=Red>=</font> text <font color=Magenta>"&lt;!NOTATION"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line301)"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>+<a name="(line302)"></a>                                 text <font color=Magenta>"&gt;"</font>+<a name="(line303)"></a><a name="publicid"></a>publicid <font color=Red>::</font> PublicID <font color=Red>-&gt;</font> ByteString+<a name="(line304)"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>          <font color=Red>=</font> text <font color=Magenta>"PUBLICID"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral p+<a name="(line305)"></a><a name="encodingdecl"></a>encodingdecl <font color=Red>::</font> EncodingDecl <font color=Red>-&gt;</font> ByteString+<a name="(line306)"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>+<a name="(line307)"></a><a name="nmtoken"></a>nmtoken <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString+<a name="(line308)"></a>nmtoken s                      <font color=Red>=</font> text s+<a name="(line309)"></a><a name="attvalue"></a>attvalue <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> ByteString+<a name="(line310)"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font>        <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line311)"></a>                                 hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line312)"></a>                                 text <font color=Magenta>"\""</font>+<a name="(line313)"></a><a name="entityvalue"></a>entityvalue <font color=Red>::</font> EntityValue <font color=Red>-&gt;</font> ByteString+<a name="(line314)"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>+<a name="(line315)"></a>  <font color=Red>|</font> containsDoubleQuote evs    <font color=Red>=</font> text <font color=Magenta>"'"</font>  <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>+<a name="(line316)"></a>  <font color=Red>|</font> otherwise                  <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>Prelude<font color=Cyan>.</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>+<a name="(line317)"></a><a name="ev"></a>ev <font color=Red>::</font> EV <font color=Red>-&gt;</font> ByteString+<a name="(line318)"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s+<a name="(line319)"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>+<a name="(line320)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r+<a name="(line321)"></a><a name="pubidliteral"></a>pubidliteral <font color=Red>::</font> PubidLiteral <font color=Red>-&gt;</font> ByteString+<a name="(line322)"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>+<a name="(line323)"></a>    <font color=Red>|</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>+<a name="(line324)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>+<a name="(line325)"></a><a name="systemliteral"></a>systemliteral <font color=Red>::</font> SystemLiteral <font color=Red>-&gt;</font> ByteString+<a name="(line326)"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>+<a name="(line327)"></a>    <font color=Red>|</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>+<a name="(line328)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>+<a name="(line329)"></a><a name="chardata"></a>chardata<font color=Cyan>,</font> cdsect <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> ByteString+<a name="(line330)"></a>chardata s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s+<a name="(line331)"></a><a name="cdsect"></a>cdsect c                       <font color=Red>=</font> text <font color=Magenta>"&lt;![CDATA["</font> <font color=Cyan>&lt;&gt;</font> chardata c <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"]]&gt;"</font>+<a name="(line332)"></a>+<a name="(line333)"></a><a name="toWord8"></a><font color=Blue>-- toWord8 :: Char -&gt; Word8</font>+<a name="(line334)"></a>toWord8 <font color=Red>::</font> <font color=Cyan>(</font>Enum a<font color=Cyan>,</font> Enum a1<font color=Cyan>)</font> <font color=Red>=&gt;</font> a1 <font color=Red>-&gt;</font> a+<a name="(line335)"></a>toWord8 <font color=Red>=</font> toEnum <font color=Cyan>.</font> fromEnum+<a name="(line336)"></a>+<a name="(line337)"></a><a name="containsDoubleQuote"></a>containsDoubleQuote <font color=Red>::</font> <font color=Red>[</font>EV<font color=Red>]</font> <font color=Red>-&gt;</font> Bool+<a name="(line338)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs+<a name="(line339)"></a>    <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> toWord8 <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> <font color=Cyan>(</font>pack s<font color=Cyan>)</font>+<a name="(line340)"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False </pre> </html>
docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/Convert.html view
@@ -15,7 +15,7 @@ <a name="(line13)"></a> <a name="(line14)"></a><a name="Record"></a><font color=Blue>---- Internal representation for database of DTD decls ----</font> <a name="(line15)"></a><a name="Record"></a><font color=Green><u>data</u></font> Record <font color=Red>=</font> R <font color=Red>[</font>AttDef<font color=Red>]</font> ContentSpec-<a name="(line16)"></a><a name="Db"></a><font color=Green><u>type</u></font> Db <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font>Record<font color=Cyan>)</font><font color=Red>]</font>+<a name="(line16)"></a><font color=Blue>-- type Db = [(String,Record)]</font> <a name="(line17)"></a> <a name="(line18)"></a> <a name="(line19)"></a><a name="dtd2TypeDef"></a><font color=Blue>---- Build a database of DTD decls then convert them to typedefs ----</font>@@ -23,7 +23,7 @@ <a name="(line21)"></a><font color=Blue>---- Apparently multiple ATTLIST decls for the same element are permitted,</font> <a name="(line22)"></a><font color=Blue>---- although only one ELEMENT decl for it is allowed.</font> <a name="(line23)"></a>dtd2TypeDef <font color=Red>::</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>TypeDef<font color=Red>]</font>-<a name="(line24)"></a>dtd2TypeDef mds <font color=Red>=</font> +<a name="(line24)"></a>dtd2TypeDef mds <font color=Red>=</font> <a name="(line25)"></a>  <font color=Cyan>(</font>concatMap convert <font color=Cyan>.</font> reverse <font color=Cyan>.</font> database []<font color=Cyan>)</font> mds <a name="(line26)"></a>  <font color=Green><u>where</u></font> <a name="(line27)"></a>  database db [] <font color=Red>=</font> db@@ -40,7 +40,7 @@ <a name="(line38)"></a>    <font color=Blue>--  (MarkupPE _ m') -&gt; database db (m':ms)</font> <a name="(line39)"></a>        <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> database db ms <a name="(line40)"></a>-<a name="(line41)"></a>  replace n v [] <font color=Red>=</font> error <font color=Magenta>"dtd2TypeDef.replace: no element to replace"</font>+<a name="(line41)"></a>  replace <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> [] <font color=Red>=</font> error <font color=Magenta>"dtd2TypeDef.replace: no element to replace"</font> <a name="(line42)"></a>  replace n v <font color=Cyan>(</font>x<font color=Red>@</font><font color=Cyan>(</font>n0<font color=Cyan>,</font><font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Red><b>:</b></font>db<font color=Cyan>)</font> <a name="(line43)"></a>      <font color=Red>|</font> n<font color=Cyan>==</font>n0     <font color=Red>=</font> <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font><font color=Red><b>:</b></font> db <a name="(line44)"></a>      <font color=Red>|</font> otherwise <font color=Red>=</font> x<font color=Red><b>:</b></font> replace n v db@@ -88,8 +88,8 @@ <a name="(line86)"></a>mkData <font color=Red>[</font>ts<font color=Red>]</font> fs aux n  <font color=Red>=</font> <font color=Red>[</font>DataDef aux n fs <font color=Red>[</font><font color=Cyan>(</font>n<font color=Cyan>,</font> ts<font color=Cyan>)</font><font color=Red>]</font><font color=Red>]</font> <a name="(line87)"></a>mkData tss  fs aux n  <font color=Red>=</font> <font color=Red>[</font>DataDef aux n fs <font color=Cyan>(</font>map <font color=Cyan>(</font>mkConstr n<font color=Cyan>)</font> tss<font color=Cyan>)</font><font color=Red>]</font> <a name="(line88)"></a>  <font color=Green><u>where</u></font>-<a name="(line89)"></a>    mkConstr n ts <font color=Red>=</font> <font color=Cyan>(</font>mkConsName n ts<font color=Cyan>,</font> ts<font color=Cyan>)</font>-<a name="(line90)"></a>    mkConsName <font color=Cyan>(</font>Name x n<font color=Cyan>)</font> sts <font color=Red>=</font> Name x <font color=Cyan>(</font>n<font color=Cyan>++</font>concat <font color=Cyan>(</font>intersperse <font color=Magenta>"_"</font> <font color=Cyan>(</font>map flatten sts<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line89)"></a>    mkConstr m ts <font color=Red>=</font> <font color=Cyan>(</font>mkConsName m ts<font color=Cyan>,</font> ts<font color=Cyan>)</font>+<a name="(line90)"></a>    mkConsName <font color=Cyan>(</font>Name x m<font color=Cyan>)</font> sts <font color=Red>=</font> Name x <font color=Cyan>(</font>m<font color=Cyan>++</font>concat <font color=Cyan>(</font>intersperse <font color=Magenta>"_"</font> <font color=Cyan>(</font>map flatten sts<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <a name="(line91)"></a>    flatten <font color=Cyan>(</font>Maybe st<font color=Cyan>)</font>   <font color=Red>=</font> <font color=Blue>{-"Maybe_" ++ -}</font> flatten st <a name="(line92)"></a>    flatten <font color=Cyan>(</font>List st<font color=Cyan>)</font>    <font color=Red>=</font> <font color=Blue>{-"List_" ++ -}</font> flatten st <a name="(line93)"></a>    flatten <font color=Cyan>(</font>List1 st<font color=Cyan>)</font>   <font color=Red>=</font> <font color=Blue>{-"List1_" ++ -}</font> flatten st@@ -99,32 +99,33 @@ <a name="(line97)"></a>    flatten <font color=Cyan>(</font>OneOf sts<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Blue>{-"OneOf" ++ show (length sts) ++ "_" ++ -}</font> <a name="(line98)"></a>                            concat <font color=Cyan>(</font>intersperse <font color=Magenta>"_"</font> <font color=Cyan>(</font>map flatten sts<font color=Cyan>)</font><font color=Cyan>)</font> <a name="(line99)"></a>    flatten Any          <font color=Red>=</font> <font color=Magenta>"Any"</font>-<a name="(line100)"></a>    flatten <font color=Cyan>(</font>Defined <font color=Cyan>(</font>Name <font color=Green><u>_</u></font> n<font color=Cyan>)</font><font color=Cyan>)</font>  <font color=Red>=</font> n+<a name="(line100)"></a>    flatten <font color=Cyan>(</font>Defined <font color=Cyan>(</font>Name <font color=Green><u>_</u></font> m<font color=Cyan>)</font><font color=Cyan>)</font>  <font color=Red>=</font> m <a name="(line101)"></a>-<a name="(line102)"></a><a name="mkAttrDef"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n StringType def<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line103)"></a>    []-<a name="(line104)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font> def<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line105)"></a>    [] <font color=Blue>-- mkData [[String]] [] False (name n)</font>-<a name="(line106)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>EnumeratedType <font color=Cyan>(</font>NotationType nt<font color=Cyan>)</font><font color=Cyan>)</font> def<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line107)"></a>    <font color=Red>[</font>EnumDef <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font> <font color=Cyan>(</font>map <font color=Cyan>(</font>name_ac e n<font color=Cyan>)</font> nt<font color=Cyan>)</font><font color=Red>]</font>-<a name="(line108)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>EnumeratedType <font color=Cyan>(</font>Enumeration es<font color=Cyan>)</font><font color=Cyan>)</font> def<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line109)"></a>    <font color=Red>[</font>EnumDef <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font> <font color=Cyan>(</font>map <font color=Cyan>(</font>name_ac e n<font color=Cyan>)</font> es<font color=Cyan>)</font><font color=Red>]</font>-<a name="(line110)"></a>        <font color=Blue>-- Default attribute values not handled here</font>-<a name="(line111)"></a>-<a name="(line112)"></a><a name="mkAttrField"></a>mkAttrField <font color=Red>::</font> String <font color=Red>-&gt;</font> AttDef <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font>-<a name="(line113)"></a>mkAttrField e <font color=Cyan>(</font>AttDef n typ req<font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font>name_f e n<font color=Cyan>,</font> mkType typ req<font color=Cyan>)</font>-<a name="(line114)"></a>  <font color=Green><u>where</u></font>-<a name="(line115)"></a>    mkType StringType REQUIRED <font color=Red>=</font> String-<a name="(line116)"></a>    mkType StringType IMPLIED  <font color=Red>=</font> Maybe String-<a name="(line117)"></a>    mkType StringType <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> f<font color=Cyan>)</font> <font color=Red>=</font> Defaultable String <font color=Cyan>(</font>show v<font color=Cyan>)</font>-<a name="(line118)"></a>    mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> REQUIRED  <font color=Red>=</font> String-<a name="(line119)"></a>    mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> IMPLIED   <font color=Red>=</font> Maybe String-<a name="(line120)"></a>    mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> f<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line121)"></a>							Defaultable String <font color=Cyan>(</font>show v<font color=Cyan>)</font>-<a name="(line122)"></a>    mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> REQUIRED <font color=Red>=</font> Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font>-<a name="(line123)"></a>    mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> IMPLIED  <font color=Red>=</font> Maybe <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line124)"></a>    mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> f<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line125)"></a>		Defaultable <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>hName <font color=Cyan>(</font>name_ac e n <font color=Cyan>(</font>show v<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line126)"></a>+<a name="(line102)"></a><a name="mkAttrDef"></a>mkAttrDef <font color=Red>::</font> String <font color=Red>-&gt;</font> AttDef <font color=Red>-&gt;</font> <font color=Red>[</font>TypeDef<font color=Red>]</font>+<a name="(line103)"></a>mkAttrDef <font color=Green><u>_</u></font> <font color=Cyan>(</font>AttDef <font color=Green><u>_</u></font> StringType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line104)"></a>    []+<a name="(line105)"></a>mkAttrDef <font color=Green><u>_</u></font> <font color=Cyan>(</font>AttDef <font color=Green><u>_</u></font> <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line106)"></a>    [] <font color=Blue>-- mkData [[String]] [] False (name n)</font>+<a name="(line107)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>EnumeratedType <font color=Cyan>(</font>NotationType nt<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line108)"></a>    <font color=Red>[</font>EnumDef <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font> <font color=Cyan>(</font>map <font color=Cyan>(</font>name_ac e n<font color=Cyan>)</font> nt<font color=Cyan>)</font><font color=Red>]</font>+<a name="(line109)"></a>mkAttrDef e <font color=Cyan>(</font>AttDef n <font color=Cyan>(</font>EnumeratedType <font color=Cyan>(</font>Enumeration es<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line110)"></a>    <font color=Red>[</font>EnumDef <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font> <font color=Cyan>(</font>map <font color=Cyan>(</font>name_ac e n<font color=Cyan>)</font> es<font color=Cyan>)</font><font color=Red>]</font>+<a name="(line111)"></a>        <font color=Blue>-- Default attribute values not handled here</font>+<a name="(line112)"></a>+<a name="(line113)"></a><a name="mkAttrField"></a>mkAttrField <font color=Red>::</font> String <font color=Red>-&gt;</font> AttDef <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font>+<a name="(line114)"></a>mkAttrField e <font color=Cyan>(</font>AttDef n typ req<font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font>name_f e n<font color=Cyan>,</font> mkType typ req<font color=Cyan>)</font>+<a name="(line115)"></a>  <font color=Green><u>where</u></font>+<a name="(line116)"></a>    mkType StringType REQUIRED <font color=Red>=</font> String+<a name="(line117)"></a>    mkType StringType IMPLIED  <font color=Red>=</font> Maybe String+<a name="(line118)"></a>    mkType StringType <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> Defaultable String <font color=Cyan>(</font>show v<font color=Cyan>)</font>+<a name="(line119)"></a>    mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> REQUIRED  <font color=Red>=</font> String+<a name="(line120)"></a>    mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> IMPLIED   <font color=Red>=</font> Maybe String+<a name="(line121)"></a>    mkType <font color=Cyan>(</font>TokenizedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line122)"></a>                                                        Defaultable String <font color=Cyan>(</font>show v<font color=Cyan>)</font>+<a name="(line123)"></a>    mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> REQUIRED <font color=Red>=</font> Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font>+<a name="(line124)"></a>    mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> IMPLIED  <font color=Red>=</font> Maybe <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line125)"></a>    mkType <font color=Cyan>(</font>EnumeratedType <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>(</font>DefaultTo v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line126)"></a>                Defaultable <font color=Cyan>(</font>Defined <font color=Cyan>(</font>name_a e n<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>hName <font color=Cyan>(</font>name_ac e n <font color=Cyan>(</font>show v<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line127)"></a> </pre> </html>
docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/Instance.html view
@@ -14,8 +14,8 @@ <a name="(line12)"></a>mkInstance <font color=Red>::</font> TypeDef <font color=Red>-&gt;</font> Doc <a name="(line13)"></a> <a name="(line14)"></a><font color=Blue>-- no constructors - represents an element with empty content but attributes.</font>-<a name="(line15)"></a>mkInstance <font color=Cyan>(</font>DataDef aux n fs []<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line16)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font>frpat<font color=Cyan>,</font> frattr<font color=Cyan>,</font> topat<font color=Cyan>,</font> toattr<font color=Cyan>)</font> <font color=Red>=</font> attrpats fs+<a name="(line15)"></a>mkInstance <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n fs []<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line16)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> frattr<font color=Cyan>,</font> topat<font color=Cyan>,</font> toattr<font color=Cyan>)</font> <font color=Red>=</font> attrpats fs <a name="(line17)"></a>        frretval <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> ppHName n <font color=Green><u>else</u></font> frattr <a name="(line18)"></a>        topatval <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> ppHName n <font color=Green><u>else</u></font> topat <a name="(line19)"></a>    <font color=Green><u>in</u></font>@@ -83,9 +83,9 @@ <a name="(line81)"></a> <a name="(line82)"></a><font color=Blue>-- multiple constructors (real)</font> <a name="(line83)"></a>mkInstance <font color=Cyan>(</font>DataDef False n fs cs<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line84)"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply cs+<a name="(line84)"></a>    <font color=Green><u>let</u></font> <font color=Green><u>_</u></font> <font color=Red>=</font> nameSupply cs <a name="(line85)"></a>        <font color=Cyan>(</font>frpat<font color=Cyan>,</font> frattr<font color=Cyan>,</font> topat<font color=Cyan>,</font> toattr<font color=Cyan>)</font> <font color=Red>=</font> attrpats fs-<a name="(line86)"></a>        mixattrs <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> False <font color=Green><u>else</u></font> True+<a name="(line86)"></a>        <font color=Green><u>_</u></font> <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> False <font color=Green><u>else</u></font> True <a name="(line87)"></a>    <font color=Green><u>in</u></font> <a name="(line88)"></a>    text <font color=Magenta>"instance HTypeable"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"where"</font> <font color=Cyan>$$</font> <a name="(line89)"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"toHType x = Defined \""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\" [] []"</font> <font color=Cyan>)</font>@@ -110,8 +110,8 @@ <a name="(line108)"></a> <a name="(line109)"></a><font color=Blue>-- multiple constructors (auxiliary)</font> <a name="(line110)"></a>mkInstance <font color=Cyan>(</font>DataDef True n fs cs<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line111)"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply cs-<a name="(line112)"></a>        <font color=Cyan>(</font>frpat<font color=Cyan>,</font> frattr<font color=Cyan>,</font> topat<font color=Cyan>,</font> toattr<font color=Cyan>)</font> <font color=Red>=</font> attrpats fs+<a name="(line111)"></a>    <font color=Green><u>let</u></font> <font color=Green><u>_</u></font> <font color=Red>=</font> nameSupply cs+<a name="(line112)"></a>        <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> frattr<font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> attrpats fs <a name="(line113)"></a>        mixattrs <font color=Red>=</font> <font color=Green><u>if</u></font> null fs <font color=Green><u>then</u></font> False <font color=Green><u>else</u></font> True <a name="(line114)"></a>    <font color=Green><u>in</u></font> <a name="(line115)"></a>    text <font color=Magenta>"instance HTypeable"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"where"</font> <font color=Cyan>$$</font>@@ -145,7 +145,7 @@ <a name="(line143)"></a><a name="SameName"></a><font color=Green><u>data</u></font> SameName <font color=Red>=</font> Same <font color=Red>|</font> Extended <a name="(line144)"></a> <a name="(line145)"></a><a name="mkInstanceAttrs"></a>mkInstanceAttrs        <font color=Red>::</font> SameName <font color=Red>-&gt;</font> Name <font color=Red>-&gt;</font> AttrFields <font color=Red>-&gt;</font> Doc-<a name="(line146)"></a>mkInstanceAttrs s n []  <font color=Red>=</font> empty+<a name="(line146)"></a>mkInstanceAttrs <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> []  <font color=Red>=</font> empty <a name="(line147)"></a>mkInstanceAttrs s n fs  <font color=Red>=</font> <a name="(line148)"></a>    <font color=Green><u>let</u></font> ppName <font color=Red>=</font> <font color=Green><u>case</u></font> s <font color=Green><u>of</u></font> <font color=Cyan>{</font> Same<font color=Red>-&gt;</font> ppHName<font color=Cyan>;</font>  Extended<font color=Red>-&gt;</font> ppAName<font color=Cyan>;</font> <font color=Cyan>}</font> <a name="(line149)"></a>    <font color=Green><u>in</u></font>@@ -172,46 +172,46 @@ <a name="(line170)"></a> <a name="(line171)"></a> <a name="(line172)"></a>-<a name="(line173)"></a><a name="mkFrElem"></a>mkFrElem <font color=Red>::</font> Name <font color=Red>-&gt;</font> <font color=Red>[</font>StructType<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> Doc-<a name="(line174)"></a>mkFrElem n sts vs inner <font color=Red>=</font>-<a name="(line175)"></a>    foldr <font color=Cyan>(</font>frElem n<font color=Cyan>)</font> inner <font color=Cyan>(</font>zip3 sts vs cvs<font color=Cyan>)</font>-<a name="(line176)"></a>  <font color=Green><u>where</u></font>-<a name="(line177)"></a>    cvs <font color=Red>=</font> <font color=Green><u>let</u></font> ns <font color=Red>=</font> nameSupply2 vs-<a name="(line178)"></a>          <font color=Green><u>in</u></font> zip ns <font color=Cyan>(</font>text <font color=Magenta>"c0"</font><font color=Red><b>:</b></font> init ns<font color=Cyan>)</font>-<a name="(line179)"></a>    frElem n <font color=Cyan>(</font>st<font color=Cyan>,</font>v<font color=Cyan>,</font><font color=Cyan>(</font>cvi<font color=Cyan>,</font>cvo<font color=Cyan>)</font><font color=Cyan>)</font> inner <font color=Red>=</font>-<a name="(line180)"></a>        parens <font color=Cyan>(</font>text <font color=Magenta>"\\"</font> <font color=Cyan>&lt;&gt;</font> parens <font color=Cyan>(</font>v<font color=Cyan>&lt;&gt;</font>comma<font color=Cyan>&lt;&gt;</font>cvi<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"-&gt;"</font> <font color=Cyan>$$</font>-<a name="(line181)"></a>                nest <font color=Magenta>2</font> inner<font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line182)"></a>        parens <font color=Cyan>(</font>-<a name="(line183)"></a>          <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line184)"></a>            <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"fromText"</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line185)"></a>            <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line186)"></a>            <font color=Cyan>(</font>List String<font color=Cyan>)</font>   <font color=Red>-&gt;</font> text <font color=Magenta>"many fromText"</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line187)"></a>            <font color=Cyan>(</font>List s<font color=Cyan>)</font>        <font color=Red>-&gt;</font> text <font color=Magenta>"many fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line188)"></a>            <font color=Cyan>(</font>List1 s<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"definite fromElem"</font>-<a name="(line189)"></a>                               <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show s<font color=Cyan>)</font><font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"+\""</font>-<a name="(line190)"></a>                               <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>-<a name="(line191)"></a>                               <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line192)"></a>            <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"definite fromElem"</font>-<a name="(line193)"></a>                           <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\"("</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font>-<a name="(line194)"></a>                                                           <font color=Cyan>(</font>map <font color=Cyan>(</font>text<font color=Cyan>.</font>show<font color=Cyan>)</font> ss<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line195)"></a>                                          <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>")\""</font>-<a name="(line196)"></a>                           <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>-<a name="(line197)"></a>                           <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line198)"></a>            <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"definite fromElem"</font>-<a name="(line199)"></a>                           <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\"OneOf\""</font>-<a name="(line200)"></a>                           <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>-<a name="(line201)"></a>                           <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line202)"></a>            <font color=Cyan>(</font>String<font color=Cyan>)</font>    <font color=Red>-&gt;</font> text <font color=Magenta>"definite fromText"</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\"text\" \""</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line203)"></a>                                                 ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line204)"></a>            <font color=Cyan>(</font>Any<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"definite fromElem"</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\"ANY\" \""</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line205)"></a>                                                 ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line206)"></a>            <font color=Cyan>(</font>Defined m<font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"definite fromElem"</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line207)"></a>				 text <font color=Magenta>"\"&lt;"</font> <font color=Cyan>&lt;&gt;</font> ppXName m <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;\" \""</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line208)"></a>                                                 ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line209)"></a>            <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"nyi_fromElem_Defaultable"</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line210)"></a>          <font color=Cyan>)</font>+<a name="(line173)"></a><font color=Blue>-- mkFrElem :: Name -&gt; [StructType] -&gt; [Doc] -&gt; Doc -&gt; Doc</font>+<a name="(line174)"></a><font color=Blue>-- mkFrElem n sts vs inner =</font>+<a name="(line175)"></a><font color=Blue>--     foldr (frElem n) inner (zip3 sts vs cvs)</font>+<a name="(line176)"></a><font color=Blue>--   where</font>+<a name="(line177)"></a><font color=Blue>--     cvs = let ns = nameSupply2 vs</font>+<a name="(line178)"></a><font color=Blue>--           in zip ns (text "c0": init ns)</font>+<a name="(line179)"></a><font color=Blue>--     frElem _ (st,v,(cvi,cvo)) inner =</font>+<a name="(line180)"></a><font color=Blue>--         parens (text "\\" &lt;&gt; parens (v&lt;&gt;comma&lt;&gt;cvi) &lt;&gt; text "-&gt;" $$</font>+<a name="(line181)"></a><font color=Blue>--                 nest 2 inner) $$</font>+<a name="(line182)"></a><font color=Blue>--         parens (</font>+<a name="(line183)"></a><font color=Blue>--           case st of</font>+<a name="(line184)"></a><font color=Blue>--             (Maybe String)  -&gt; text "fromText" &lt;+&gt; cvo</font>+<a name="(line185)"></a><font color=Blue>--             (Maybe _)       -&gt; text "fromElem" &lt;+&gt; cvo</font>+<a name="(line186)"></a><font color=Blue>--             (List String)   -&gt; text "many fromText" &lt;+&gt; cvo</font>+<a name="(line187)"></a><font color=Blue>--             (List _)        -&gt; text "many fromElem" &lt;+&gt; cvo</font>+<a name="(line188)"></a><font color=Blue>--             (List1 s)       -&gt; text "definite fromElem"</font>+<a name="(line189)"></a><font color=Blue>--                                &lt;+&gt; text "\"" &lt;&gt; text (show s)&lt;&gt; text "+\""</font>+<a name="(line190)"></a><font color=Blue>--                                &lt;+&gt; text "\"" &lt;&gt; ppXName n &lt;&gt; text "\""</font>+<a name="(line191)"></a><font color=Blue>--                                &lt;+&gt; cvo</font>+<a name="(line192)"></a><font color=Blue>--             (Tuple ss)  -&gt; text "definite fromElem"</font>+<a name="(line193)"></a><font color=Blue>--                            &lt;+&gt; text "\"(" &lt;&gt; hcat (intersperse (text ",")</font>+<a name="(line194)"></a><font color=Blue>--                                                            (map (text.show) ss))</font>+<a name="(line195)"></a><font color=Blue>--                                           &lt;&gt; text ")\""</font>+<a name="(line196)"></a><font color=Blue>--                            &lt;+&gt; text "\"" &lt;&gt; ppXName n &lt;&gt; text "\""</font>+<a name="(line197)"></a><font color=Blue>--                            &lt;+&gt; cvo</font>+<a name="(line198)"></a><font color=Blue>--             (OneOf _)  -&gt; text "definite fromElem"</font>+<a name="(line199)"></a><font color=Blue>--                            &lt;+&gt; text "\"OneOf\""</font>+<a name="(line200)"></a><font color=Blue>--                            &lt;+&gt; text "\"" &lt;&gt; ppXName n &lt;&gt; text "\""</font>+<a name="(line201)"></a><font color=Blue>--                            &lt;+&gt; cvo</font>+<a name="(line202)"></a><font color=Blue>--             (String)    -&gt; text "definite fromText" &lt;+&gt; text "\"text\" \"" &lt;&gt;</font>+<a name="(line203)"></a><font color=Blue>--                                                  ppXName n &lt;&gt; text "\"" &lt;+&gt; cvo</font>+<a name="(line204)"></a><font color=Blue>--             (Any)       -&gt; text "definite fromElem" &lt;+&gt; text "\"ANY\" \"" &lt;&gt;</font>+<a name="(line205)"></a><font color=Blue>--                                                  ppXName n &lt;&gt; text "\"" &lt;+&gt; cvo</font>+<a name="(line206)"></a><font color=Blue>--             (Defined m) -&gt; text "definite fromElem" &lt;+&gt;</font>+<a name="(line207)"></a><font color=Blue>--                                  text "\"&lt;" &lt;&gt; ppXName m &lt;&gt; text "&gt;\" \"" &lt;&gt;</font>+<a name="(line208)"></a><font color=Blue>--                                                  ppXName m &lt;&gt; text "\"" &lt;+&gt; cvo</font>+<a name="(line209)"></a><font color=Blue>--             (Defaultable _ _)  -&gt; text "nyi_fromElem_Defaultable" &lt;+&gt; cvo</font>+<a name="(line210)"></a><font color=Blue>--           )</font> <a name="(line211)"></a>-<a name="(line212)"></a><font color=Blue>-- </font>+<a name="(line212)"></a><a name="mkParseConstr"></a><font color=Blue>--</font> <a name="(line213)"></a><font color=Blue>{- <a name="(line214)"></a>mkParseContents :: Name -&gt; [StructType] -&gt; [Doc] -&gt; Doc -&gt; Doc <a name="(line215)"></a>mkParseContents n sts vs inner =@@ -225,171 +225,173 @@ <a name="(line223)"></a>        parens ( <a name="(line224)"></a>          ) <a name="(line225)"></a>-}</font>-<a name="(line226)"></a>-<a name="(line227)"></a><a name="mkParseConstr"></a>mkParseConstr frattr <font color=Cyan>(</font>c<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line226)"></a>mkParseConstr <font color=Red>::</font> Doc <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font> <font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc+<a name="(line227)"></a>mkParseConstr frattr <font color=Cyan>(</font>c<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font> <a name="(line228)"></a>        fsep <font color=Cyan>(</font>text <font color=Magenta>"return"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>ppHName c <font color=Cyan>&lt;+&gt;</font> frattr<font color=Cyan>)</font> <a name="(line229)"></a>             <font color=Red><b>:</b></font> map mkParseContents sts<font color=Cyan>)</font> <a name="(line230)"></a>-<a name="(line231)"></a><a name="mkParseContents"></a>mkParseContents st <font color=Red>=</font>-<a name="(line232)"></a>  <font color=Green><u>let</u></font> ap <font color=Red>=</font> text <font color=Magenta>"`apply`"</font> <font color=Green><u>in</u></font>-<a name="(line233)"></a>          <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line234)"></a>            <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>  <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"optional text"</font>-<a name="(line235)"></a>            <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font>       <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"optional parseContents"</font>-<a name="(line236)"></a>            <font color=Cyan>(</font>List String<font color=Cyan>)</font>   <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"many text"</font>-<a name="(line237)"></a>            <font color=Cyan>(</font>List s<font color=Cyan>)</font>        <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"many parseContents"</font>-<a name="(line238)"></a>            <font color=Cyan>(</font>List1 s<font color=Cyan>)</font>       <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>-<a name="(line239)"></a>            <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>      <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>-<a name="(line240)"></a>            <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>      <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>-<a name="(line241)"></a>            <font color=Cyan>(</font>String<font color=Cyan>)</font>        <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"(text `onFail` return \"\")"</font>-<a name="(line242)"></a>            <font color=Cyan>(</font>Any<font color=Cyan>)</font>           <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>-<a name="(line243)"></a>            <font color=Cyan>(</font>Defined m<font color=Cyan>)</font>     <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>-<a name="(line244)"></a>            <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"nyi_fromElem_Defaultable"</font>-<a name="(line245)"></a>-<a name="(line246)"></a><a name="mkToElem"></a><font color=Blue>--</font>-<a name="(line247)"></a>mkToElem <font color=Red>::</font> <font color=Red>[</font>StructType<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc-<a name="(line248)"></a>mkToElem []  [] <font color=Red>=</font> text <font color=Magenta>"[]"</font>-<a name="(line249)"></a>mkToElem sts vs <font color=Red>=</font>-<a name="(line250)"></a>    fsep <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"++"</font><font color=Cyan>)</font> <font color=Cyan>(</font>zipWith toElem sts vs<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line251)"></a>  <font color=Green><u>where</u></font>-<a name="(line252)"></a>    toElem st v <font color=Red>=</font>-<a name="(line253)"></a>      <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line254)"></a>        <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"maybe [] toText"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line255)"></a>        <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"maybe [] toContents"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line256)"></a>        <font color=Cyan>(</font>List String<font color=Cyan>)</font>   <font color=Red>-&gt;</font> text <font color=Magenta>"concatMap toText"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line257)"></a>        <font color=Cyan>(</font>List s<font color=Cyan>)</font>        <font color=Red>-&gt;</font> text <font color=Magenta>"concatMap toContents"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line258)"></a>        <font color=Cyan>(</font>List1 s<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line259)"></a>        <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line260)"></a>        <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line261)"></a>        <font color=Cyan>(</font>String<font color=Cyan>)</font>        <font color=Red>-&gt;</font> text <font color=Magenta>"toText"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line262)"></a>        <font color=Cyan>(</font>Any<font color=Cyan>)</font>           <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line263)"></a>        <font color=Cyan>(</font>Defined m<font color=Cyan>)</font>     <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line264)"></a>        <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"nyi_toElem_Defaultable"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line265)"></a>-<a name="(line266)"></a><a name="mkRpat"></a>mkRpat <font color=Red>::</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc-<a name="(line267)"></a>mkRpat <font color=Red>[</font>v<font color=Red>]</font> <font color=Red>=</font> v-<a name="(line268)"></a>mkRpat vs  <font color=Red>=</font> <font color=Cyan>(</font>parens <font color=Cyan>.</font> hcat <font color=Cyan>.</font> intersperse comma<font color=Cyan>)</font> vs-<a name="(line269)"></a>-<a name="(line270)"></a><a name="mkCpat"></a>mkCpat <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc-<a name="(line271)"></a>mkCpat n i vs <font color=Red>=</font> ppHName n <font color=Cyan>&lt;+&gt;</font> i <font color=Cyan>&lt;+&gt;</font> fsep vs-<a name="(line272)"></a>-<a name="(line273)"></a><a name="nameSupply"></a>nameSupply<font color=Cyan>,</font>nameSupply2 <font color=Red>::</font> <font color=Red>[</font>b<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Doc<font color=Red>]</font>-<a name="(line274)"></a>nameSupply  ss <font color=Red>=</font> take <font color=Cyan>(</font>length ss<font color=Cyan>)</font> <font color=Cyan>(</font>map char <font color=Red>[</font><font color=Magenta>'a'</font><font color=Red>..</font><font color=Red>]</font><font color=Cyan>)</font>-<a name="(line275)"></a><a name="nameSupply2"></a>nameSupply2 ss <font color=Red>=</font> take <font color=Cyan>(</font>length ss<font color=Cyan>)</font> <font color=Red>[</font> text <font color=Cyan>(</font><font color=Magenta>'c'</font><font color=Red><b>:</b></font>v<font color=Red><b>:</b></font>[]<font color=Cyan>)</font> <font color=Red>|</font> v <font color=Red>&lt;-</font> <font color=Red>[</font><font color=Magenta>'a'</font><font color=Red>..</font><font color=Red>]</font><font color=Red>]</font>-<a name="(line276)"></a>-<a name="(line277)"></a><a name="mkTranslate"></a>mkTranslate <font color=Red>::</font> <font color=Red>[</font>Name<font color=Red>]</font> <font color=Red>-&gt;</font> Doc-<a name="(line278)"></a>mkTranslate es <font color=Red>=</font>-<a name="(line279)"></a>    vcat <font color=Cyan>(</font>map trans es<font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line280)"></a>    text <font color=Magenta>"translate _ = Nothing"</font>-<a name="(line281)"></a>  <font color=Green><u>where</u></font>-<a name="(line282)"></a>    trans n <font color=Red>=</font> text <font color=Magenta>"translate \""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\" ="</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line283)"></a>              text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n-<a name="(line284)"></a>-<a name="(line285)"></a><a name="mkToAttr"></a>mkToAttr n <font color=Red>=</font> text <font color=Magenta>"toAttrFrTyp n"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line286)"></a>             text <font color=Magenta>"Just (n, str2attr"</font> <font color=Cyan>&lt;+&gt;</font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>")"</font>-<a name="(line287)"></a>-<a name="(line288)"></a><a name="mkFrFld"></a>mkFrFld <font color=Red>::</font> Name <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc-<a name="(line289)"></a>mkFrFld tag <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line290)"></a>    ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line291)"></a>    <font color=Cyan>(</font> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line292)"></a>        <font color=Cyan>(</font>Defaultable String s<font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"defaultA fromAttrToStr"</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line293)"></a>						 doubleQuotes <font color=Cyan>(</font>text s<font color=Cyan>)</font>-<a name="(line294)"></a>        <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> s<font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"defaultA fromAttrToTyp"</font> <font color=Cyan>&lt;+&gt;</font> text s-<a name="(line295)"></a>        <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>         <font color=Red>-&gt;</font> text <font color=Magenta>"possibleA fromAttrToStr"</font>-<a name="(line296)"></a>        <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font>              <font color=Red>-&gt;</font> text <font color=Magenta>"possibleA fromAttrToTyp"</font>-<a name="(line297)"></a>        String                 <font color=Red>-&gt;</font> text <font color=Magenta>"definiteA fromAttrToStr"</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line298)"></a>						 doubleQuotes <font color=Cyan>(</font>ppXName tag<font color=Cyan>)</font>-<a name="(line299)"></a>        <font color=Green><u>_</u></font>                      <font color=Red>-&gt;</font> text <font color=Magenta>"definiteA fromAttrToTyp"</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line300)"></a>						 doubleQuotes <font color=Cyan>(</font>ppXName tag<font color=Cyan>)</font>-<a name="(line301)"></a>    <font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"as"</font>-<a name="(line302)"></a>-<a name="(line303)"></a><a name="mkToFld"></a>mkToFld <font color=Red>::</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc-<a name="(line304)"></a>mkToFld <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line305)"></a>    <font color=Cyan>(</font> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line306)"></a>        <font color=Cyan>(</font>Defaultable String <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"defaultToAttr toAttrFrStr"</font>-<a name="(line307)"></a>        <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"defaultToAttr toAttrFrTyp"</font>-<a name="(line308)"></a>        <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>         <font color=Red>-&gt;</font> text <font color=Magenta>"maybeToAttr toAttrFrStr"</font>-<a name="(line309)"></a>        <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font>              <font color=Red>-&gt;</font> text <font color=Magenta>"maybeToAttr toAttrFrTyp"</font>-<a name="(line310)"></a>        String                 <font color=Red>-&gt;</font> text <font color=Magenta>"toAttrFrStr"</font>-<a name="(line311)"></a>        <font color=Green><u>_</u></font>                      <font color=Red>-&gt;</font> text <font color=Magenta>"toAttrFrTyp"</font>-<a name="(line312)"></a>    <font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"v"</font><font color=Cyan>)</font>-<a name="(line313)"></a>-<a name="(line314)"></a><a name="mkFrAux"></a>mkFrAux <font color=Red>::</font> Bool <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> Doc-<a name="(line315)"></a>mkFrAux keeprest attrs cs <font color=Red>=</font> foldr frAux inner cs-<a name="(line316)"></a>  <font color=Green><u>where</u></font>-<a name="(line317)"></a>    inner <font color=Red>=</font> text <font color=Magenta>"(Nothing, c0)"</font>-<a name="(line318)"></a>    rest  <font color=Red>=</font> <font color=Green><u>if</u></font> keeprest <font color=Green><u>then</u></font> text <font color=Magenta>"rest"</font> <font color=Green><u>else</u></font> text <font color=Magenta>"_"</font>-<a name="(line319)"></a>    frAux <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> inner <font color=Red>=</font>-<a name="(line320)"></a>        <font color=Green><u>let</u></font> vs  <font color=Red>=</font> nameSupply sts <font color=Green><u>in</u></font>-<a name="(line321)"></a>        nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"case"</font> <font color=Cyan>&lt;+&gt;</font> blah sts vs <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"of"</font> <font color=Cyan>$$</font>-<a name="(line322)"></a>                succpat sts vs <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"-&gt; (Just"</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line323)"></a>                                   parens <font color=Cyan>(</font>mkCpat n attrs vs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>", rest)"</font>-<a name="(line324)"></a>                <font color=Cyan>$$</font>-<a name="(line325)"></a>                failpat sts <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"-&gt;"</font> <font color=Cyan>$$</font> nest <font color=Magenta>4</font> inner-<a name="(line326)"></a>               <font color=Cyan>)</font>-<a name="(line327)"></a>    blah <font color=Red>[</font>st<font color=Red>]</font> <font color=Red>[</font>v<font color=Red>]</font> <font color=Red>=</font>-<a name="(line328)"></a>        blahblahblah st <font color=Cyan>(</font>text <font color=Magenta>"c0"</font><font color=Cyan>)</font>-<a name="(line329)"></a>    blah sts vs <font color=Red>=</font>-<a name="(line330)"></a>        <font color=Green><u>let</u></font> ns <font color=Red>=</font> nameSupply2 vs-<a name="(line331)"></a>            cvs <font color=Red>=</font> zip ns <font color=Cyan>(</font>text <font color=Magenta>"c0"</font><font color=Red><b>:</b></font> init ns<font color=Cyan>)</font>-<a name="(line332)"></a>            blahblah <font color=Cyan>(</font>st<font color=Cyan>,</font>v<font color=Cyan>,</font><font color=Cyan>(</font>cvi<font color=Cyan>,</font>cvo<font color=Cyan>)</font><font color=Cyan>)</font> inner <font color=Red>=</font>-<a name="(line333)"></a>                parens <font color=Cyan>(</font>text <font color=Magenta>"\\"</font> <font color=Cyan>&lt;&gt;</font> parens <font color=Cyan>(</font>v<font color=Cyan>&lt;&gt;</font>comma<font color=Cyan>&lt;&gt;</font>cvi<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"-&gt;"</font> <font color=Cyan>$$</font>-<a name="(line334)"></a>                        nest <font color=Magenta>2</font> inner<font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line335)"></a>                blahblahblah st cvo-<a name="(line336)"></a>        <font color=Green><u>in</u></font>-<a name="(line337)"></a>        foldr blahblah <font color=Cyan>(</font>mkRpat <font color=Cyan>(</font>vs<font color=Cyan>++</font><font color=Red>[</font>last ns<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>zip3 sts vs cvs<font color=Cyan>)</font>-<a name="(line338)"></a>    blahblahblah st cvo <font color=Red>=</font> parens <font color=Cyan>(</font>-<a name="(line339)"></a>        <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line340)"></a>          <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"fromText"</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line341)"></a>          <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line342)"></a>          <font color=Cyan>(</font>List String<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"many fromText"</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line343)"></a>          <font color=Cyan>(</font>List s<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"many fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line344)"></a>          <font color=Cyan>(</font>List1 s<font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line345)"></a>          <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>     <font color=Red>-&gt;</font> text <font color=Magenta>"fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo	<font color=Blue>-- ??</font>-<a name="(line346)"></a>          <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>     <font color=Red>-&gt;</font> text <font color=Magenta>"fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line347)"></a>          <font color=Cyan>(</font>String<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"fromText"</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line348)"></a>          <font color=Cyan>(</font>Any<font color=Cyan>)</font>          <font color=Red>-&gt;</font> text <font color=Magenta>"fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line349)"></a>          <font color=Cyan>(</font>Defined m<font color=Cyan>)</font>    <font color=Red>-&gt;</font> text <font color=Magenta>"fromElem"</font> <font color=Cyan>&lt;+&gt;</font> cvo-<a name="(line350)"></a>        <font color=Cyan>)</font>-<a name="(line351)"></a>    failpat sts <font color=Red>=</font>-<a name="(line352)"></a>        <font color=Green><u>let</u></font> fp st <font color=Red>=</font>-<a name="(line353)"></a>                <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line354)"></a>                  <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font>   <font color=Red>-&gt;</font> text <font color=Magenta>"Nothing"</font>-<a name="(line355)"></a>                  <font color=Cyan>(</font>List s<font color=Cyan>)</font>    <font color=Red>-&gt;</font> text <font color=Magenta>"[]"</font>-<a name="(line356)"></a>                  <font color=Cyan>(</font>List1 s<font color=Cyan>)</font>   <font color=Red>-&gt;</font> text <font color=Magenta>"_"</font>-<a name="(line357)"></a>                  <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"_"</font>-<a name="(line358)"></a>                  <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"_"</font>-<a name="(line359)"></a>                  <font color=Cyan>(</font>String<font color=Cyan>)</font>    <font color=Red>-&gt;</font> text <font color=Magenta>"_"</font>-<a name="(line360)"></a>                  <font color=Cyan>(</font>Any<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"_"</font>-<a name="(line361)"></a>                  <font color=Cyan>(</font>Defined m<font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"_"</font>-<a name="(line362)"></a>        <font color=Green><u>in</u></font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse comma <font color=Cyan>(</font>map fp sts<font color=Cyan>++</font><font color=Red>[</font>text <font color=Magenta>"_"</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line363)"></a>    succpat sts vs <font color=Red>=</font>-<a name="(line364)"></a>        <font color=Green><u>let</u></font> sp st v <font color=Red>=</font>-<a name="(line365)"></a>                <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>-<a name="(line366)"></a>                  <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font>   <font color=Red>-&gt;</font> v-<a name="(line367)"></a>                  <font color=Cyan>(</font>List s<font color=Cyan>)</font>    <font color=Red>-&gt;</font> v-<a name="(line368)"></a>                  <font color=Cyan>(</font>List1 s<font color=Cyan>)</font>   <font color=Red>-&gt;</font> text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line369)"></a>                  <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line370)"></a>                  <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line371)"></a>                  <font color=Cyan>(</font>String<font color=Cyan>)</font>    <font color=Red>-&gt;</font> text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line372)"></a>                  <font color=Cyan>(</font>Any<font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line373)"></a>                  <font color=Cyan>(</font>Defined m<font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> v-<a name="(line374)"></a>        <font color=Green><u>in</u></font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse comma <font color=Cyan>(</font>zipWith sp sts vs<font color=Cyan>++</font><font color=Red>[</font>rest<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line375)"></a>-<a name="(line376)"></a><a name="mkToAux"></a>mkToAux <font color=Red>::</font> Bool <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc-<a name="(line377)"></a>mkToAux mixattrs <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line378)"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts-<a name="(line379)"></a>        attrs <font color=Red>=</font> <font color=Green><u>if</u></font> mixattrs <font color=Green><u>then</u></font> text <font color=Magenta>"as"</font> <font color=Green><u>else</u></font> empty-<a name="(line380)"></a>    <font color=Green><u>in</u></font>-<a name="(line381)"></a>    text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkCpat n attrs vs<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line382)"></a>    mkToElem sts vs-<a name="(line383)"></a>-<a name="(line384)"></a><a name="mkToMult"></a>mkToMult <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc-<a name="(line385)"></a>mkToMult tag attrpat attrexp <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line386)"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts-<a name="(line387)"></a>    <font color=Green><u>in</u></font>-<a name="(line388)"></a>    text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkCpat n attrpat vs<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font>-<a name="(line389)"></a>    <font color=Cyan>$$</font> nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"[CElem (Elem \""</font> <font color=Cyan>&lt;&gt;</font> ppXName tag <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font><font color=Cyan>&lt;+&gt;</font> attrexp-<a name="(line390)"></a>              <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkToElem sts vs<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>") ()]"</font><font color=Cyan>)</font>-<a name="(line391)"></a>+<a name="(line231)"></a><a name="mkParseContents"></a>mkParseContents <font color=Red>::</font> StructType <font color=Red>-&gt;</font> Doc+<a name="(line232)"></a>mkParseContents st <font color=Red>=</font>+<a name="(line233)"></a>  <font color=Green><u>let</u></font> ap <font color=Red>=</font> text <font color=Magenta>"`apply`"</font> <font color=Green><u>in</u></font>+<a name="(line234)"></a>          <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>+<a name="(line235)"></a>            <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>  <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"optional text"</font>+<a name="(line236)"></a>            <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font>       <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"optional parseContents"</font>+<a name="(line237)"></a>            <font color=Cyan>(</font>List String<font color=Cyan>)</font>   <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"many text"</font>+<a name="(line238)"></a>            <font color=Cyan>(</font>List <font color=Green><u>_</u></font><font color=Cyan>)</font>        <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"many parseContents"</font>+<a name="(line239)"></a>            <font color=Cyan>(</font>List1 <font color=Green><u>_</u></font><font color=Cyan>)</font>       <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>+<a name="(line240)"></a>            <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>+<a name="(line241)"></a>            <font color=Cyan>(</font>OneOf <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>+<a name="(line242)"></a>            <font color=Cyan>(</font>String<font color=Cyan>)</font>        <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"(text `onFail` return \"\")"</font>+<a name="(line243)"></a>            <font color=Cyan>(</font>Any<font color=Cyan>)</font>           <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>+<a name="(line244)"></a>            <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font><font color=Cyan>)</font>     <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"parseContents"</font>+<a name="(line245)"></a>            <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> ap <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"nyi_fromElem_Defaultable"</font>+<a name="(line246)"></a>+<a name="(line247)"></a><a name="mkToElem"></a><font color=Blue>--</font>+<a name="(line248)"></a>mkToElem <font color=Red>::</font> <font color=Red>[</font>StructType<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc+<a name="(line249)"></a>mkToElem []  [] <font color=Red>=</font> text <font color=Magenta>"[]"</font>+<a name="(line250)"></a>mkToElem sts vs <font color=Red>=</font>+<a name="(line251)"></a>    fsep <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"++"</font><font color=Cyan>)</font> <font color=Cyan>(</font>zipWith toElem sts vs<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line252)"></a>  <font color=Green><u>where</u></font>+<a name="(line253)"></a>    toElem st v <font color=Red>=</font>+<a name="(line254)"></a>      <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>+<a name="(line255)"></a>        <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"maybe [] toText"</font> <font color=Cyan>&lt;+&gt;</font> v+<a name="(line256)"></a>        <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"maybe [] toContents"</font> <font color=Cyan>&lt;+&gt;</font> v+<a name="(line257)"></a>        <font color=Cyan>(</font>List String<font color=Cyan>)</font>   <font color=Red>-&gt;</font> text <font color=Magenta>"concatMap toText"</font> <font color=Cyan>&lt;+&gt;</font> v+<a name="(line258)"></a>        <font color=Cyan>(</font>List <font color=Green><u>_</u></font><font color=Cyan>)</font>        <font color=Red>-&gt;</font> text <font color=Magenta>"concatMap toContents"</font> <font color=Cyan>&lt;+&gt;</font> v+<a name="(line259)"></a>        <font color=Cyan>(</font>List1 <font color=Green><u>_</u></font><font color=Cyan>)</font>       <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v+<a name="(line260)"></a>        <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v+<a name="(line261)"></a>        <font color=Cyan>(</font>OneOf <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v+<a name="(line262)"></a>        <font color=Cyan>(</font>String<font color=Cyan>)</font>        <font color=Red>-&gt;</font> text <font color=Magenta>"toText"</font> <font color=Cyan>&lt;+&gt;</font> v+<a name="(line263)"></a>        <font color=Cyan>(</font>Any<font color=Cyan>)</font>           <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v+<a name="(line264)"></a>        <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font><font color=Cyan>)</font>     <font color=Red>-&gt;</font> text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> v+<a name="(line265)"></a>        <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> text <font color=Magenta>"nyi_toElem_Defaultable"</font> <font color=Cyan>&lt;+&gt;</font> v+<a name="(line266)"></a>+<a name="(line267)"></a><font color=Blue>-- mkRpat :: [Doc] -&gt; Doc</font>+<a name="(line268)"></a><font color=Blue>-- mkRpat [v] = v</font>+<a name="(line269)"></a><font color=Blue>-- mkRpat vs  = (parens . hcat . intersperse comma) vs</font>+<a name="(line270)"></a>+<a name="(line271)"></a><a name="mkCpat"></a>mkCpat <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc+<a name="(line272)"></a>mkCpat n i vs <font color=Red>=</font> ppHName n <font color=Cyan>&lt;+&gt;</font> i <font color=Cyan>&lt;+&gt;</font> fsep vs+<a name="(line273)"></a>+<a name="(line274)"></a><a name="nameSupply"></a>nameSupply <font color=Red>::</font> <font color=Red>[</font>b<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Doc<font color=Red>]</font>+<a name="(line275)"></a>nameSupply  ss <font color=Red>=</font> take <font color=Cyan>(</font>length ss<font color=Cyan>)</font> <font color=Cyan>(</font>map char <font color=Red>[</font><font color=Magenta>'a'</font><font color=Red>..</font><font color=Red>]</font><font color=Cyan>)</font>+<a name="(line276)"></a><font color=Blue>-- nameSupply2 ss = take (length ss) [ text ('c':v:[]) | v &lt;- ['a'..]]</font>+<a name="(line277)"></a>+<a name="(line278)"></a><a name="mkTranslate"></a>mkTranslate <font color=Red>::</font> <font color=Red>[</font>Name<font color=Red>]</font> <font color=Red>-&gt;</font> Doc+<a name="(line279)"></a>mkTranslate es <font color=Red>=</font>+<a name="(line280)"></a>    vcat <font color=Cyan>(</font>map trans es<font color=Cyan>)</font> <font color=Cyan>$$</font>+<a name="(line281)"></a>    text <font color=Magenta>"translate _ = Nothing"</font>+<a name="(line282)"></a>  <font color=Green><u>where</u></font>+<a name="(line283)"></a>    trans n <font color=Red>=</font> text <font color=Magenta>"translate \""</font> <font color=Cyan>&lt;&gt;</font> ppXName n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\" ="</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line284)"></a>              text <font color=Magenta>"Just"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n+<a name="(line285)"></a>+<a name="(line286)"></a><a name="mkToAttr"></a>mkToAttr <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc+<a name="(line287)"></a>mkToAttr n <font color=Red>=</font> text <font color=Magenta>"toAttrFrTyp n"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line288)"></a>             text <font color=Magenta>"Just (n, str2attr"</font> <font color=Cyan>&lt;+&gt;</font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>")"</font>+<a name="(line289)"></a>+<a name="(line290)"></a><a name="mkFrFld"></a>mkFrFld <font color=Red>::</font> Name <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc+<a name="(line291)"></a>mkFrFld tag <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line292)"></a>    ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line293)"></a>    <font color=Cyan>(</font> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>+<a name="(line294)"></a>        <font color=Cyan>(</font>Defaultable String s<font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"defaultA fromAttrToStr"</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line295)"></a>                                                 doubleQuotes <font color=Cyan>(</font>text s<font color=Cyan>)</font>+<a name="(line296)"></a>        <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> s<font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"defaultA fromAttrToTyp"</font> <font color=Cyan>&lt;+&gt;</font> text s+<a name="(line297)"></a>        <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>         <font color=Red>-&gt;</font> text <font color=Magenta>"possibleA fromAttrToStr"</font>+<a name="(line298)"></a>        <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font>              <font color=Red>-&gt;</font> text <font color=Magenta>"possibleA fromAttrToTyp"</font>+<a name="(line299)"></a>        String                 <font color=Red>-&gt;</font> text <font color=Magenta>"definiteA fromAttrToStr"</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line300)"></a>                                                 doubleQuotes <font color=Cyan>(</font>ppXName tag<font color=Cyan>)</font>+<a name="(line301)"></a>        <font color=Green><u>_</u></font>                      <font color=Red>-&gt;</font> text <font color=Magenta>"definiteA fromAttrToTyp"</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line302)"></a>                                                 doubleQuotes <font color=Cyan>(</font>ppXName tag<font color=Cyan>)</font>+<a name="(line303)"></a>    <font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"as"</font>+<a name="(line304)"></a>+<a name="(line305)"></a><a name="mkToFld"></a>mkToFld <font color=Red>::</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font>StructType<font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc+<a name="(line306)"></a>mkToFld <font color=Cyan>(</font>n<font color=Cyan>,</font>st<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line307)"></a>    <font color=Cyan>(</font> <font color=Green><u>case</u></font> st <font color=Green><u>of</u></font>+<a name="(line308)"></a>        <font color=Cyan>(</font>Defaultable String <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> text <font color=Magenta>"defaultToAttr toAttrFrStr"</font>+<a name="(line309)"></a>        <font color=Cyan>(</font>Defaultable <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>-&gt;</font> text <font color=Magenta>"defaultToAttr toAttrFrTyp"</font>+<a name="(line310)"></a>        <font color=Cyan>(</font>Maybe String<font color=Cyan>)</font>         <font color=Red>-&gt;</font> text <font color=Magenta>"maybeToAttr toAttrFrStr"</font>+<a name="(line311)"></a>        <font color=Cyan>(</font>Maybe <font color=Green><u>_</u></font><font color=Cyan>)</font>              <font color=Red>-&gt;</font> text <font color=Magenta>"maybeToAttr toAttrFrTyp"</font>+<a name="(line312)"></a>        String                 <font color=Red>-&gt;</font> text <font color=Magenta>"toAttrFrStr"</font>+<a name="(line313)"></a>        <font color=Green><u>_</u></font>                      <font color=Red>-&gt;</font> text <font color=Magenta>"toAttrFrTyp"</font>+<a name="(line314)"></a>    <font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> doubleQuotes <font color=Cyan>(</font>ppXName n<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"v"</font><font color=Cyan>)</font>+<a name="(line315)"></a>+<a name="(line316)"></a><font color=Blue>-- mkFrAux :: Bool -&gt; Doc -&gt; [(Name,[StructType])] -&gt; Doc</font>+<a name="(line317)"></a><font color=Blue>-- mkFrAux keeprest attrs cs = foldr frAux inner cs</font>+<a name="(line318)"></a><font color=Blue>--   where</font>+<a name="(line319)"></a><font color=Blue>--     inner = text "(Nothing, c0)"</font>+<a name="(line320)"></a><font color=Blue>--     rest  = if keeprest then text "rest" else text "_"</font>+<a name="(line321)"></a><font color=Blue>--     frAux (n,sts) innr =</font>+<a name="(line322)"></a><font color=Blue>--         let vs  = nameSupply sts in</font>+<a name="(line323)"></a><font color=Blue>--         nest 4 (text "case" &lt;+&gt; blah sts vs &lt;+&gt; text "of" $$</font>+<a name="(line324)"></a><font color=Blue>--                 succpat sts vs &lt;+&gt; text "-&gt; (Just" &lt;+&gt;</font>+<a name="(line325)"></a><font color=Blue>--                                    parens (mkCpat n attrs vs) &lt;&gt; text ", rest)"</font>+<a name="(line326)"></a><font color=Blue>--                 $$</font>+<a name="(line327)"></a><font color=Blue>--                 failpat sts &lt;+&gt; text "-&gt;" $$ nest 4 innr</font>+<a name="(line328)"></a><font color=Blue>--                )</font>+<a name="(line329)"></a><font color=Blue>--     blah [st] [_] =</font>+<a name="(line330)"></a><font color=Blue>--         blahblahblah st (text "c0")</font>+<a name="(line331)"></a><font color=Blue>--     blah sts vs =</font>+<a name="(line332)"></a><font color=Blue>--         let ns = nameSupply2 vs</font>+<a name="(line333)"></a><font color=Blue>--             cvs = zip ns (text "c0": init ns)</font>+<a name="(line334)"></a><font color=Blue>--             blahblah (st,v,(cvi,cvo)) innr =</font>+<a name="(line335)"></a><font color=Blue>--                 parens (text "\\" &lt;&gt; parens (v&lt;&gt;comma&lt;&gt;cvi) &lt;&gt; text "-&gt;" $$</font>+<a name="(line336)"></a><font color=Blue>--                         nest 2 innr) $$</font>+<a name="(line337)"></a><font color=Blue>--                 blahblahblah st cvo</font>+<a name="(line338)"></a><font color=Blue>--         in</font>+<a name="(line339)"></a><font color=Blue>--         foldr blahblah (mkRpat (vs++[last ns])) (zip3 sts vs cvs)</font>+<a name="(line340)"></a><font color=Blue>--     blahblahblah st cvo = parens (</font>+<a name="(line341)"></a><font color=Blue>--         case st of</font>+<a name="(line342)"></a><font color=Blue>--           (Maybe String) -&gt; text "fromText" &lt;+&gt; cvo</font>+<a name="(line343)"></a><font color=Blue>--           (Maybe _)      -&gt; text "fromElem" &lt;+&gt; cvo</font>+<a name="(line344)"></a><font color=Blue>--           (List String)  -&gt; text "many fromText" &lt;+&gt; cvo</font>+<a name="(line345)"></a><font color=Blue>--           (List _)       -&gt; text "many fromElem" &lt;+&gt; cvo</font>+<a name="(line346)"></a><font color=Blue>--           (List1 _)      -&gt; text "fromElem" &lt;+&gt; cvo</font>+<a name="(line347)"></a><font color=Blue>--           (Tuple _)     -&gt; text "fromElem" &lt;+&gt; cvo      -- ??</font>+<a name="(line348)"></a><font color=Blue>--           (OneOf _)     -&gt; text "fromElem" &lt;+&gt; cvo</font>+<a name="(line349)"></a><font color=Blue>--           (String)       -&gt; text "fromText" &lt;+&gt; cvo</font>+<a name="(line350)"></a><font color=Blue>--           (Any)          -&gt; text "fromElem" &lt;+&gt; cvo</font>+<a name="(line351)"></a><font color=Blue>--           (Defined _)    -&gt; text "fromElem" &lt;+&gt; cvo</font>+<a name="(line352)"></a><font color=Blue>--         )</font>+<a name="(line353)"></a><font color=Blue>--     failpat sts =</font>+<a name="(line354)"></a><font color=Blue>--         let fp st =</font>+<a name="(line355)"></a><font color=Blue>--                 case st of</font>+<a name="(line356)"></a><font color=Blue>--                   (Maybe _)   -&gt; text "Nothing"</font>+<a name="(line357)"></a><font color=Blue>--                   (List _)    -&gt; text "[]"</font>+<a name="(line358)"></a><font color=Blue>--                   (List1 _)   -&gt; text "_"</font>+<a name="(line359)"></a><font color=Blue>--                   (Tuple _)  -&gt; text "_"</font>+<a name="(line360)"></a><font color=Blue>--                   (OneOf _)  -&gt; text "_"</font>+<a name="(line361)"></a><font color=Blue>--                   (String)    -&gt; text "_"</font>+<a name="(line362)"></a><font color=Blue>--                   (Any)       -&gt; text "_"</font>+<a name="(line363)"></a><font color=Blue>--                   (Defined _) -&gt; text "_"</font>+<a name="(line364)"></a><font color=Blue>--         in parens (hcat (intersperse comma (map fp sts++[text "_"])))</font>+<a name="(line365)"></a><font color=Blue>--     succpat sts vs =</font>+<a name="(line366)"></a><font color=Blue>--         let sp st v =</font>+<a name="(line367)"></a><font color=Blue>--                 case st of</font>+<a name="(line368)"></a><font color=Blue>--                   (Maybe _)   -&gt; v</font>+<a name="(line369)"></a><font color=Blue>--                   (List _)    -&gt; v</font>+<a name="(line370)"></a><font color=Blue>--                   (List1 _)   -&gt; text "Just" &lt;+&gt; v</font>+<a name="(line371)"></a><font color=Blue>--                   (Tuple _)  -&gt; text "Just" &lt;+&gt; v</font>+<a name="(line372)"></a><font color=Blue>--                   (OneOf _)  -&gt; text "Just" &lt;+&gt; v</font>+<a name="(line373)"></a><font color=Blue>--                   (String)    -&gt; text "Just" &lt;+&gt; v</font>+<a name="(line374)"></a><font color=Blue>--                   (Any)       -&gt; text "Just" &lt;+&gt; v</font>+<a name="(line375)"></a><font color=Blue>--                   (Defined _) -&gt; text "Just" &lt;+&gt; v</font>+<a name="(line376)"></a><font color=Blue>--         in parens (hcat (intersperse comma (zipWith sp sts vs++[rest])))</font>+<a name="(line377)"></a>+<a name="(line378)"></a><a name="mkToAux"></a>mkToAux <font color=Red>::</font> Bool <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc+<a name="(line379)"></a>mkToAux mixattrs <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line380)"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts+<a name="(line381)"></a>        attrs <font color=Red>=</font> <font color=Green><u>if</u></font> mixattrs <font color=Green><u>then</u></font> text <font color=Magenta>"as"</font> <font color=Green><u>else</u></font> empty+<a name="(line382)"></a>    <font color=Green><u>in</u></font>+<a name="(line383)"></a>    text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkCpat n attrs vs<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line384)"></a>    mkToElem sts vs+<a name="(line385)"></a>+<a name="(line386)"></a><a name="mkToMult"></a>mkToMult <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> Doc+<a name="(line387)"></a>mkToMult tag attrpat attrexp <font color=Cyan>(</font>n<font color=Cyan>,</font>sts<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line388)"></a>    <font color=Green><u>let</u></font> vs <font color=Red>=</font> nameSupply sts+<a name="(line389)"></a>    <font color=Green><u>in</u></font>+<a name="(line390)"></a>    text <font color=Magenta>"toContents"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkCpat n attrpat vs<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font>+<a name="(line391)"></a>    <font color=Cyan>$$</font> nest <font color=Magenta>4</font> <font color=Cyan>(</font>text <font color=Magenta>"[CElem (Elem \""</font> <font color=Cyan>&lt;&gt;</font> ppXName tag <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font><font color=Cyan>&lt;+&gt;</font> attrexp+<a name="(line392)"></a>              <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>mkToElem sts vs<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>") ()]"</font><font color=Cyan>)</font>+<a name="(line393)"></a> </pre> </html>
docs/HaXml/src/Text/XML/HaXml/DtdToHaskell/TypeDef.html view
@@ -28,25 +28,25 @@ <a name="(line26)"></a><font color=Blue>---- Internal representation for typedefs ----</font> <a name="(line27)"></a> <a name="(line28)"></a><a name="Name"></a><font color=Blue>-- | Need to keep both the XML and Haskell versions of a name.</font>-<a name="(line29)"></a><a name="Name"></a><font color=Green><u>data</u></font> Name <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>::</font> String	<font color=Blue>-- ^ original XML name</font>-<a name="(line30)"></a>		 <font color=Cyan>,</font> hName <font color=Red>::</font> String	<font color=Blue>-- ^ mangled Haskell name</font>+<a name="(line29)"></a><a name="Name"></a><font color=Green><u>data</u></font> Name <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>::</font> String       <font color=Blue>-- ^ original XML name</font>+<a name="(line30)"></a>                 <font color=Cyan>,</font> hName <font color=Red>::</font> String       <font color=Blue>-- ^ mangled Haskell name</font> <a name="(line31)"></a>                 <font color=Cyan>}</font> <a name="(line32)"></a>          <font color=Green><u>deriving</u></font> Eq <a name="(line33)"></a> <a name="(line34)"></a><a name="TypeDef"></a><font color=Green><u>data</u></font> TypeDef <font color=Red>=</font>-<a name="(line35)"></a>      DataDef Bool Name AttrFields Constructors	<font color=Blue>-- ^ Bool for main\/aux.</font>+<a name="(line35)"></a>      DataDef Bool Name AttrFields Constructors <font color=Blue>-- ^ Bool for main\/aux.</font> <a name="(line36)"></a>    <font color=Red>|</font> EnumDef Name <font color=Red>[</font>Name<font color=Red>]</font> <a name="(line37)"></a>    <font color=Green><u>deriving</u></font> Eq <a name="(line38)"></a><a name="Constructors"></a><font color=Green><u>type</u></font> Constructors <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font><font color=Red>[</font>StructType<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font> <a name="(line39)"></a><a name="AttrFields"></a><font color=Green><u>type</u></font> AttrFields   <font color=Red>=</font> <font color=Red>[</font><font color=Cyan>(</font>Name<font color=Cyan>,</font> StructType<font color=Cyan>)</font><font color=Red>]</font> <a name="(line40)"></a><a name="StructType"></a><font color=Green><u>data</u></font> StructType <font color=Red>=</font> <a name="(line41)"></a>      Maybe StructType-<a name="(line42)"></a>    <font color=Red>|</font> Defaultable StructType String	<font color=Blue>-- ^ String holds default value.</font>+<a name="(line42)"></a>    <font color=Red>|</font> Defaultable StructType String     <font color=Blue>-- ^ String holds default value.</font> <a name="(line43)"></a>    <font color=Red>|</font> List StructType-<a name="(line44)"></a>    <font color=Red>|</font> List1 StructType			<font color=Blue>-- ^ Non-empty lists.</font>+<a name="(line44)"></a>    <font color=Red>|</font> List1 StructType                  <font color=Blue>-- ^ Non-empty lists.</font> <a name="(line45)"></a>    <font color=Red>|</font> Tuple <font color=Red>[</font>StructType<font color=Red>]</font> <a name="(line46)"></a>    <font color=Red>|</font> OneOf <font color=Red>[</font>StructType<font color=Red>]</font>-<a name="(line47)"></a>    <font color=Red>|</font> Any				<font color=Blue>-- ^ XML's contentspec allows ANY</font>+<a name="(line47)"></a>    <font color=Red>|</font> Any                               <font color=Blue>-- ^ XML's contentspec allows ANY</font> <a name="(line48)"></a>    <font color=Red>|</font> String <a name="(line49)"></a>    <font color=Red>|</font> Defined Name <a name="(line50)"></a>    <font color=Green><u>deriving</u></font> Eq@@ -54,50 +54,50 @@ <a name="(line52)"></a><font color=Blue>-- used for converting StructType (roughly) back to an XML content model</font> <a name="(line53)"></a><font color=Green><u>instance</u></font> Show StructType <font color=Green><u>where</u></font> <a name="(line54)"></a>    showsPrec p <font color=Cyan>(</font>Maybe s<font color=Cyan>)</font>         <font color=Red>=</font> showsPrec <font color=Cyan>(</font>p<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> s <font color=Cyan>.</font> showChar <font color=Magenta>'?'</font>-<a name="(line55)"></a>    showsPrec p <font color=Cyan>(</font>Defaultable s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> shows s+<a name="(line55)"></a>    showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Defaultable s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> shows s <a name="(line56)"></a>    showsPrec p <font color=Cyan>(</font>List s<font color=Cyan>)</font>          <font color=Red>=</font> showsPrec <font color=Cyan>(</font>p<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> s <font color=Cyan>.</font> showChar <font color=Magenta>'*'</font> <a name="(line57)"></a>    showsPrec p <font color=Cyan>(</font>List1 s<font color=Cyan>)</font>         <font color=Red>=</font> showsPrec <font color=Cyan>(</font>p<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> s <font color=Cyan>.</font> showChar <font color=Magenta>'+'</font>-<a name="(line58)"></a>    showsPrec p <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>        <font color=Red>=</font> showChar <font color=Magenta>'('</font>+<a name="(line58)"></a>    showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Tuple ss<font color=Cyan>)</font>        <font color=Red>=</font> showChar <font color=Magenta>'('</font> <a name="(line59)"></a>                                    <font color=Cyan>.</font> foldr1 <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>','</font><font color=Cyan>)</font> <a name="(line60)"></a>                                                              <font color=Cyan>(</font>map shows ss<font color=Cyan>)</font><font color=Cyan>)</font> <a name="(line61)"></a>                                    <font color=Cyan>.</font> showChar <font color=Magenta>')'</font>-<a name="(line62)"></a>    showsPrec p <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>        <font color=Red>=</font> showChar <font color=Magenta>'('</font>+<a name="(line62)"></a>    showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>OneOf ss<font color=Cyan>)</font>        <font color=Red>=</font> showChar <font color=Magenta>'('</font> <a name="(line63)"></a>                                    <font color=Cyan>.</font> foldr1 <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'|'</font><font color=Cyan>)</font> <a name="(line64)"></a>                                                              <font color=Cyan>(</font>map shows ss<font color=Cyan>)</font><font color=Cyan>)</font> <a name="(line65)"></a>                                    <font color=Cyan>.</font> showChar <font color=Magenta>')'</font>-<a name="(line66)"></a>    showsPrec p <font color=Cyan>(</font>Any<font color=Cyan>)</font>             <font color=Red>=</font> showString <font color=Magenta>"ANY"</font>-<a name="(line67)"></a>    showsPrec p <font color=Cyan>(</font>String<font color=Cyan>)</font>          <font color=Red>=</font> showString <font color=Magenta>"#PCDATA"</font>-<a name="(line68)"></a>    showsPrec p <font color=Cyan>(</font>Defined <font color=Cyan>(</font>Name n <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> showString n+<a name="(line66)"></a>    showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Any<font color=Cyan>)</font>             <font color=Red>=</font> showString <font color=Magenta>"ANY"</font>+<a name="(line67)"></a>    showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>String<font color=Cyan>)</font>          <font color=Red>=</font> showString <font color=Magenta>"#PCDATA"</font>+<a name="(line68)"></a>    showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Defined <font color=Cyan>(</font>Name n <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> showString n <a name="(line69)"></a> <a name="(line70)"></a> <a name="(line71)"></a><a name="ppTypeDef"></a><font color=Blue>---- Pretty-printing typedefs ----</font> <a name="(line72)"></a>ppTypeDef <font color=Red>::</font> TypeDef <font color=Red>-&gt;</font> Doc <a name="(line73)"></a>-<a name="(line74)"></a><font color=Blue>--	no attrs, no constructors</font>+<a name="(line74)"></a><font color=Blue>--      no attrs, no constructors</font> <a name="(line75)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n [] []<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line76)"></a>    <font color=Green><u>let</u></font> name <font color=Red>=</font> ppHName n <font color=Green><u>in</u></font>-<a name="(line77)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> name <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> name <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\t\t"</font> <font color=Cyan>&lt;&gt;</font> derives+<a name="(line76)"></a>    <font color=Green><u>let</u></font> nme <font color=Red>=</font> ppHName n <font color=Green><u>in</u></font>+<a name="(line77)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> nme <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> nme <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\t\t"</font> <font color=Cyan>&lt;&gt;</font> derives <a name="(line78)"></a>-<a name="(line79)"></a><font color=Blue>--	no attrs, single constructor</font>+<a name="(line79)"></a><font color=Blue>--      no attrs, single constructor</font> <a name="(line80)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n [] <font color=Red>[</font>c<font color=Red>@</font><font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font><font color=Red>[</font><font color=Green><u>_</u></font><font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font> <font color=Red>=</font> <a name="(line81)"></a>    text <font color=Magenta>"newtype"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> ppC c <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"\t\t"</font> <font color=Cyan>&lt;&gt;</font> derives <a name="(line82)"></a>-<a name="(line83)"></a><font color=Blue>--	no attrs, multiple constrs</font>+<a name="(line83)"></a><font color=Blue>--      no attrs, multiple constrs</font> <a name="(line84)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n [] cs<font color=Cyan>)</font> <font color=Red>=</font> <a name="(line85)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font> <a name="(line86)"></a>           <font color=Cyan>(</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> ppC <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Cyan>$$</font> <a name="(line87)"></a>             vcat <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font> text <font color=Magenta>"|"</font> <font color=Cyan>&lt;+&gt;</font> ppC c<font color=Cyan>)</font> <font color=Cyan>(</font>tail cs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>$$</font> <a name="(line88)"></a>             derives <font color=Cyan>)</font> <a name="(line89)"></a>-<a name="(line90)"></a><font color=Blue>--	nonzero attrs, no constructors</font>+<a name="(line90)"></a><font color=Blue>--      nonzero attrs, no constructors</font> <a name="(line91)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n fs []<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line92)"></a>    <font color=Green><u>let</u></font> name <font color=Red>=</font> ppHName n <font color=Green><u>in</u></font>-<a name="(line93)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> name <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> name <font color=Cyan>$$</font>+<a name="(line92)"></a>    <font color=Green><u>let</u></font> nme <font color=Red>=</font> ppHName n <font color=Green><u>in</u></font>+<a name="(line93)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> nme <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font> nme <font color=Cyan>$$</font> <a name="(line94)"></a>    nest <font color=Magenta>4</font> <font color=Cyan>(</font> text <font color=Magenta>"{"</font> <font color=Cyan>&lt;+&gt;</font> ppF <font color=Cyan>(</font>head fs<font color=Cyan>)</font> <font color=Cyan>$$</font> <a name="(line95)"></a>             vcat <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>f<font color=Red>-&gt;</font> text <font color=Magenta>","</font> <font color=Cyan>&lt;+&gt;</font> ppF f<font color=Cyan>)</font> <font color=Cyan>(</font>tail fs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>$$</font> <a name="(line96)"></a>             text <font color=Magenta>"}"</font> <font color=Cyan>&lt;+&gt;</font> derives <font color=Cyan>)</font> <a name="(line97)"></a>-<a name="(line98)"></a><font color=Blue>--	nonzero attrs, one or more constrs</font>+<a name="(line98)"></a><font color=Blue>--      nonzero attrs, one or more constrs</font> <a name="(line99)"></a>ppTypeDef <font color=Cyan>(</font>DataDef <font color=Green><u>_</u></font> n fs cs<font color=Cyan>)</font> <font color=Red>=</font> <a name="(line100)"></a>    <font color=Green><u>let</u></font> attr <font color=Red>=</font> ppAName n <font color=Green><u>in</u></font> <a name="(line101)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font>@@ -109,7 +109,7 @@ <a name="(line107)"></a>             vcat <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>f<font color=Red>-&gt;</font> text <font color=Magenta>","</font> <font color=Cyan>&lt;+&gt;</font> ppF f<font color=Cyan>)</font> <font color=Cyan>(</font>tail fs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>$$</font> <a name="(line108)"></a>             text <font color=Magenta>"}"</font> <font color=Cyan>&lt;+&gt;</font> derives <font color=Cyan>)</font> <a name="(line109)"></a>-<a name="(line110)"></a><font color=Blue>--	enumerations (of attribute values)</font>+<a name="(line110)"></a><font color=Blue>--      enumerations (of attribute values)</font> <a name="(line111)"></a>ppTypeDef <font color=Cyan>(</font>EnumDef n es<font color=Cyan>)</font> <font color=Red>=</font> <a name="(line112)"></a>    text <font color=Magenta>"data"</font> <font color=Cyan>&lt;+&gt;</font> ppHName n <font color=Cyan>&lt;+&gt;</font> <a name="(line113)"></a>    <font color=Cyan>(</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;+&gt;</font>@@ -150,86 +150,86 @@ <a name="(line148)"></a><a name="ppAName"></a><font color=Blue>-- | Pretty print Haskell attributes name.</font> <a name="(line149)"></a>ppAName <font color=Red>::</font> Name <font color=Red>-&gt;</font> Doc <a name="(line150)"></a>ppAName <font color=Cyan>(</font>Name <font color=Green><u>_</u></font> s<font color=Cyan>)</font> <font color=Red>=</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"_Attrs"</font>-<a name="(line151)"></a>                      -<a name="(line152)"></a><a name="derives"></a>derives <font color=Red>=</font> text <font color=Magenta>"deriving"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>commaList <font color=Cyan>(</font>map text <font color=Red>[</font><font color=Magenta>"Eq"</font><font color=Cyan>,</font><font color=Magenta>"Show"</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line153)"></a>+<a name="(line151)"></a>+<a name="(line152)"></a><a name="derives"></a>derives <font color=Red>::</font> Doc+<a name="(line153)"></a>derives <font color=Red>=</font> text <font color=Magenta>"deriving"</font> <font color=Cyan>&lt;+&gt;</font> parens <font color=Cyan>(</font>commaList <font color=Cyan>(</font>map text <font color=Red>[</font><font color=Magenta>"Eq"</font><font color=Cyan>,</font><font color=Magenta>"Show"</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font> <a name="(line154)"></a>-<a name="(line155)"></a><font color=Blue>---- Some operations on Names ----</font>-<a name="(line156)"></a>-<a name="(line157)"></a><a name="name"></a><font color=Blue>-- | Make a type name valid in both XML and Haskell.</font>-<a name="(line158)"></a>name <font color=Red>::</font> String <font color=Red>-&gt;</font> Name-<a name="(line159)"></a>name n     <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n-<a name="(line160)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> mangle n <font color=Cyan>}</font>-<a name="(line161)"></a>-<a name="(line162)"></a><a name="name_"></a><font color=Blue>-- | Append an underscore to the Haskell version of the name.</font>-<a name="(line163)"></a>name_ <font color=Red>::</font> String <font color=Red>-&gt;</font> Name-<a name="(line164)"></a>name_ n    <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n-<a name="(line165)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> mangle n <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>}</font>-<a name="(line166)"></a>-<a name="(line167)"></a><a name="name_a"></a><font color=Blue>-- | Prefix an attribute enumeration type name with its containing element</font>-<a name="(line168)"></a><font color=Blue>--   name.</font>-<a name="(line169)"></a>name_a <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Name-<a name="(line170)"></a>name_a e n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n-<a name="(line171)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> mangle e <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify n <font color=Cyan>}</font>-<a name="(line172)"></a>-<a name="(line173)"></a><a name="name_ac"></a><font color=Blue>-- | Prefix an attribute enumeration constructor with its element-tag name,</font>-<a name="(line174)"></a><font color=Blue>--   and its enumeration type name.</font>-<a name="(line175)"></a>name_ac <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Name-<a name="(line176)"></a>name_ac e t n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n-<a name="(line177)"></a>                     <font color=Cyan>,</font> hName <font color=Red>=</font> mangle e <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify t-<a name="(line178)"></a>                                        <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify n <font color=Cyan>}</font>-<a name="(line179)"></a>-<a name="(line180)"></a><a name="name_f"></a><font color=Blue>-- | Prefix a field name with its enclosing element name.</font>-<a name="(line181)"></a>name_f <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Name-<a name="(line182)"></a>name_f e n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n-<a name="(line183)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> manglef e <font color=Cyan>++</font> mangle n <font color=Cyan>}</font>-<a name="(line184)"></a>-<a name="(line185)"></a><font color=Blue>---- obsolete</font>-<a name="(line186)"></a><font color=Blue>-- elementname_at :: String -&gt; Name</font>-<a name="(line187)"></a><font color=Blue>-- elementname_at n  = Name n (mangle n ++ "_Attrs")</font>-<a name="(line188)"></a>-<a name="(line189)"></a><a name="mangle"></a><font color=Blue>-- | Convert an XML name to a Haskell conid.</font>-<a name="(line190)"></a>mangle <font color=Red>::</font> String <font color=Red>-&gt;</font> String-<a name="(line191)"></a>mangle <font color=Cyan>(</font>n<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>-<a name="(line192)"></a>    <font color=Red>|</font> isLower n   <font color=Red>=</font> notPrelude <font color=Cyan>(</font>toUpper n<font color=Red><b>:</b></font> map decolonify ns<font color=Cyan>)</font>-<a name="(line193)"></a>    <font color=Red>|</font> isDigit n   <font color=Red>=</font> <font color=Magenta>'I'</font><font color=Red><b>:</b></font> n<font color=Red><b>:</b></font> map decolonify ns-<a name="(line194)"></a>    <font color=Red>|</font> otherwise   <font color=Red>=</font> notPrelude <font color=Cyan>(</font>n<font color=Red><b>:</b></font> map decolonify ns<font color=Cyan>)</font>-<a name="(line195)"></a>-<a name="(line196)"></a><a name="notPrelude"></a><font color=Blue>-- | Ensure a generated name does not conflict with a standard haskell one.</font>-<a name="(line197)"></a>notPrelude <font color=Red>::</font> String <font color=Red>-&gt;</font> String-<a name="(line198)"></a>notPrelude <font color=Magenta>"String"</font>  <font color=Red>=</font> <font color=Magenta>"AString"</font>-<a name="(line199)"></a>notPrelude <font color=Magenta>"Maybe"</font>   <font color=Red>=</font> <font color=Magenta>"AMaybe"</font>-<a name="(line200)"></a>notPrelude <font color=Magenta>"Either"</font>  <font color=Red>=</font> <font color=Magenta>"AEither"</font>+<a name="(line155)"></a>+<a name="(line156)"></a><font color=Blue>---- Some operations on Names ----</font>+<a name="(line157)"></a>+<a name="(line158)"></a><a name="name"></a><font color=Blue>-- | Make a type name valid in both XML and Haskell.</font>+<a name="(line159)"></a>name <font color=Red>::</font> String <font color=Red>-&gt;</font> Name+<a name="(line160)"></a>name n     <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n+<a name="(line161)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> mangle n <font color=Cyan>}</font>+<a name="(line162)"></a>+<a name="(line163)"></a><a name="name_"></a><font color=Blue>-- | Append an underscore to the Haskell version of the name.</font>+<a name="(line164)"></a>name_ <font color=Red>::</font> String <font color=Red>-&gt;</font> Name+<a name="(line165)"></a>name_ n    <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n+<a name="(line166)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> mangle n <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>}</font>+<a name="(line167)"></a>+<a name="(line168)"></a><a name="name_a"></a><font color=Blue>-- | Prefix an attribute enumeration type name with its containing element</font>+<a name="(line169)"></a><font color=Blue>--   name.</font>+<a name="(line170)"></a>name_a <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Name+<a name="(line171)"></a>name_a e n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n+<a name="(line172)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> mangle e <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify n <font color=Cyan>}</font>+<a name="(line173)"></a>+<a name="(line174)"></a><a name="name_ac"></a><font color=Blue>-- | Prefix an attribute enumeration constructor with its element-tag name,</font>+<a name="(line175)"></a><font color=Blue>--   and its enumeration type name.</font>+<a name="(line176)"></a>name_ac <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Name+<a name="(line177)"></a>name_ac e t n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n+<a name="(line178)"></a>                     <font color=Cyan>,</font> hName <font color=Red>=</font> mangle e <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify t+<a name="(line179)"></a>                                        <font color=Cyan>++</font> <font color=Magenta>"_"</font> <font color=Cyan>++</font> map decolonify n <font color=Cyan>}</font>+<a name="(line180)"></a>+<a name="(line181)"></a><a name="name_f"></a><font color=Blue>-- | Prefix a field name with its enclosing element name.</font>+<a name="(line182)"></a>name_f <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Name+<a name="(line183)"></a>name_f e n <font color=Red>=</font> Name <font color=Cyan>{</font> xName <font color=Red>=</font> n+<a name="(line184)"></a>                  <font color=Cyan>,</font> hName <font color=Red>=</font> manglef e <font color=Cyan>++</font> mangle n <font color=Cyan>}</font>+<a name="(line185)"></a>+<a name="(line186)"></a><font color=Blue>---- obsolete</font>+<a name="(line187)"></a><font color=Blue>-- elementname_at :: String -&gt; Name</font>+<a name="(line188)"></a><font color=Blue>-- elementname_at n  = Name n (mangle n ++ "_Attrs")</font>+<a name="(line189)"></a>+<a name="(line190)"></a><a name="mangle"></a><font color=Blue>-- | Convert an XML name to a Haskell conid.</font>+<a name="(line191)"></a>mangle <font color=Red>::</font> String <font color=Red>-&gt;</font> String+<a name="(line192)"></a>mangle <font color=Cyan>(</font>n<font color=Red><b>:</b></font>ns<font color=Cyan>)</font>+<a name="(line193)"></a>    <font color=Red>|</font> isLower n   <font color=Red>=</font> notPrelude <font color=Cyan>(</font>toUpper n<font color=Red><b>:</b></font> map decolonify ns<font color=Cyan>)</font>+<a name="(line194)"></a>    <font color=Red>|</font> isDigit n   <font color=Red>=</font> <font color=Magenta>'I'</font><font color=Red><b>:</b></font> n<font color=Red><b>:</b></font> map decolonify ns+<a name="(line195)"></a>    <font color=Red>|</font> otherwise   <font color=Red>=</font> notPrelude <font color=Cyan>(</font>n<font color=Red><b>:</b></font> map decolonify ns<font color=Cyan>)</font>+<a name="(line196)"></a>+<a name="(line197)"></a><a name="notPrelude"></a><font color=Blue>-- | Ensure a generated name does not conflict with a standard haskell one.</font>+<a name="(line198)"></a>notPrelude <font color=Red>::</font> String <font color=Red>-&gt;</font> String+<a name="(line199)"></a>notPrelude <font color=Magenta>"Bool"</font>    <font color=Red>=</font> <font color=Magenta>"ABool"</font>+<a name="(line200)"></a>notPrelude <font color=Magenta>"Bounded"</font> <font color=Red>=</font> <font color=Magenta>"ABounded"</font> <a name="(line201)"></a>notPrelude <font color=Magenta>"Char"</font>    <font color=Red>=</font> <font color=Magenta>"AChar"</font>-<a name="(line202)"></a>notPrelude <font color=Magenta>"String"</font>  <font color=Red>=</font> <font color=Magenta>"AString"</font>-<a name="(line203)"></a>notPrelude <font color=Magenta>"Int"</font>     <font color=Red>=</font> <font color=Magenta>"AInt"</font>-<a name="(line204)"></a>notPrelude <font color=Magenta>"Integer"</font> <font color=Red>=</font> <font color=Magenta>"AInteger"</font>-<a name="(line205)"></a>notPrelude <font color=Magenta>"Float"</font>   <font color=Red>=</font> <font color=Magenta>"AFloat"</font>-<a name="(line206)"></a>notPrelude <font color=Magenta>"Double"</font>  <font color=Red>=</font> <font color=Magenta>"ADouble"</font>-<a name="(line207)"></a>notPrelude <font color=Magenta>"List1"</font>   <font color=Red>=</font> <font color=Magenta>"AList1"</font>	<font color=Blue>-- part of HaXml</font>-<a name="(line208)"></a>notPrelude <font color=Magenta>"IO"</font>      <font color=Red>=</font> <font color=Magenta>"AIO"</font>-<a name="(line209)"></a>notPrelude <font color=Magenta>"IOError"</font> <font color=Red>=</font> <font color=Magenta>"AIOError"</font>-<a name="(line210)"></a>notPrelude <font color=Magenta>"FilePath"</font><font color=Red>=</font> <font color=Magenta>"AFilePath"</font>-<a name="(line211)"></a>notPrelude <font color=Magenta>"Bool"</font>    <font color=Red>=</font> <font color=Magenta>"ABool"</font>-<a name="(line212)"></a>notPrelude <font color=Magenta>"Ordering"</font><font color=Red>=</font> <font color=Magenta>"AOrdering"</font>-<a name="(line213)"></a>notPrelude <font color=Magenta>"Eq"</font>      <font color=Red>=</font> <font color=Magenta>"AEq"</font>-<a name="(line214)"></a>notPrelude <font color=Magenta>"Ord"</font>     <font color=Red>=</font> <font color=Magenta>"AOrd"</font>-<a name="(line215)"></a>notPrelude <font color=Magenta>"Enum"</font>    <font color=Red>=</font> <font color=Magenta>"AEnum"</font>-<a name="(line216)"></a>notPrelude <font color=Magenta>"Bounded"</font> <font color=Red>=</font> <font color=Magenta>"ABounded"</font>-<a name="(line217)"></a>notPrelude <font color=Magenta>"Functor"</font> <font color=Red>=</font> <font color=Magenta>"AFunctor"</font>+<a name="(line202)"></a>notPrelude <font color=Magenta>"Double"</font>  <font color=Red>=</font> <font color=Magenta>"ADouble"</font>+<a name="(line203)"></a>notPrelude <font color=Magenta>"Either"</font>  <font color=Red>=</font> <font color=Magenta>"AEither"</font>+<a name="(line204)"></a>notPrelude <font color=Magenta>"Enum"</font>    <font color=Red>=</font> <font color=Magenta>"AEnum"</font>+<a name="(line205)"></a>notPrelude <font color=Magenta>"Eq"</font>      <font color=Red>=</font> <font color=Magenta>"AEq"</font>+<a name="(line206)"></a>notPrelude <font color=Magenta>"FilePath"</font><font color=Red>=</font> <font color=Magenta>"AFilePath"</font>+<a name="(line207)"></a>notPrelude <font color=Magenta>"Float"</font>   <font color=Red>=</font> <font color=Magenta>"AFloat"</font>+<a name="(line208)"></a>notPrelude <font color=Magenta>"Floating"</font><font color=Red>=</font> <font color=Magenta>"AFloating"</font>+<a name="(line209)"></a>notPrelude <font color=Magenta>"Fractional"</font><font color=Red>=</font> <font color=Magenta>"AFractional"</font>+<a name="(line210)"></a>notPrelude <font color=Magenta>"Functor"</font> <font color=Red>=</font> <font color=Magenta>"AFunctor"</font>+<a name="(line211)"></a>notPrelude <font color=Magenta>"IO"</font>      <font color=Red>=</font> <font color=Magenta>"AIO"</font>+<a name="(line212)"></a>notPrelude <font color=Magenta>"IOError"</font> <font color=Red>=</font> <font color=Magenta>"AIOError"</font>+<a name="(line213)"></a>notPrelude <font color=Magenta>"Int"</font>     <font color=Red>=</font> <font color=Magenta>"AInt"</font>+<a name="(line214)"></a>notPrelude <font color=Magenta>"Integer"</font> <font color=Red>=</font> <font color=Magenta>"AInteger"</font>+<a name="(line215)"></a>notPrelude <font color=Magenta>"Integral"</font><font color=Red>=</font> <font color=Magenta>"AIntegral"</font>+<a name="(line216)"></a>notPrelude <font color=Magenta>"List1"</font>   <font color=Red>=</font> <font color=Magenta>"AList1"</font> <font color=Blue>-- part of HaXml</font>+<a name="(line217)"></a>notPrelude <font color=Magenta>"Maybe"</font>   <font color=Red>=</font> <font color=Magenta>"AMaybe"</font> <a name="(line218)"></a>notPrelude <font color=Magenta>"Monad"</font>   <font color=Red>=</font> <font color=Magenta>"AMonad"</font>-<a name="(line219)"></a>notPrelude <font color=Magenta>"Rational"</font><font color=Red>=</font> <font color=Magenta>"ARational"</font>-<a name="(line220)"></a>notPrelude <font color=Magenta>"Integral"</font><font color=Red>=</font> <font color=Magenta>"AIntegral"</font>-<a name="(line221)"></a>notPrelude <font color=Magenta>"Num"</font>     <font color=Red>=</font> <font color=Magenta>"ANum"</font>-<a name="(line222)"></a>notPrelude <font color=Magenta>"Real"</font>    <font color=Red>=</font> <font color=Magenta>"AReal"</font>-<a name="(line223)"></a>notPrelude <font color=Magenta>"RealFrac"</font><font color=Red>=</font> <font color=Magenta>"ARealFrac"</font>-<a name="(line224)"></a>notPrelude <font color=Magenta>"Floating"</font><font color=Red>=</font> <font color=Magenta>"AFloating"</font>-<a name="(line225)"></a>notPrelude <font color=Magenta>"RealFloat"</font> <font color=Red>=</font> <font color=Magenta>"ARealFloat"</font>-<a name="(line226)"></a>notPrelude <font color=Magenta>"Fractional"</font><font color=Red>=</font> <font color=Magenta>"AFractional"</font>-<a name="(line227)"></a>notPrelude <font color=Magenta>"Read"</font>    <font color=Red>=</font> <font color=Magenta>"ARead"</font>+<a name="(line219)"></a>notPrelude <font color=Magenta>"Num"</font>     <font color=Red>=</font> <font color=Magenta>"ANum"</font>+<a name="(line220)"></a>notPrelude <font color=Magenta>"Ord"</font>     <font color=Red>=</font> <font color=Magenta>"AOrd"</font>+<a name="(line221)"></a>notPrelude <font color=Magenta>"Ordering"</font><font color=Red>=</font> <font color=Magenta>"AOrdering"</font>+<a name="(line222)"></a>notPrelude <font color=Magenta>"Rational"</font><font color=Red>=</font> <font color=Magenta>"ARational"</font>+<a name="(line223)"></a>notPrelude <font color=Magenta>"Read"</font>    <font color=Red>=</font> <font color=Magenta>"ARead"</font>+<a name="(line224)"></a>notPrelude <font color=Magenta>"ReadS"</font>   <font color=Red>=</font> <font color=Magenta>"AReadS"</font>+<a name="(line225)"></a>notPrelude <font color=Magenta>"Real"</font>    <font color=Red>=</font> <font color=Magenta>"AReal"</font>+<a name="(line226)"></a>notPrelude <font color=Magenta>"RealFloat"</font> <font color=Red>=</font> <font color=Magenta>"ARealFloat"</font>+<a name="(line227)"></a>notPrelude <font color=Magenta>"RealFrac"</font><font color=Red>=</font> <font color=Magenta>"ARealFrac"</font> <a name="(line228)"></a>notPrelude <font color=Magenta>"Show"</font>    <font color=Red>=</font> <font color=Magenta>"AShow"</font>-<a name="(line229)"></a>notPrelude <font color=Magenta>"ReadS"</font>   <font color=Red>=</font> <font color=Magenta>"AReadS"</font>-<a name="(line230)"></a>notPrelude <font color=Magenta>"ShowS"</font>   <font color=Red>=</font> <font color=Magenta>"AShowS"</font>+<a name="(line229)"></a>notPrelude <font color=Magenta>"ShowS"</font>   <font color=Red>=</font> <font color=Magenta>"AShowS"</font>+<a name="(line230)"></a>notPrelude <font color=Magenta>"String"</font>  <font color=Red>=</font> <font color=Magenta>"AString"</font> <a name="(line231)"></a>notPrelude n         <font color=Red>=</font> n <a name="(line232)"></a> <a name="(line233)"></a><a name="manglef"></a><font color=Blue>-- | Convert an XML name to a Haskell varid.</font>@@ -246,6 +246,7 @@ <a name="(line244)"></a>decolonify <font color=Magenta>'.'</font> <font color=Red>=</font> <font color=Magenta>'_'</font> <a name="(line245)"></a>decolonify  c  <font color=Red>=</font> c <a name="(line246)"></a>-<a name="(line247)"></a><a name="commaList"></a>commaList <font color=Red>=</font> hcat <font color=Cyan>.</font> intersperse comma+<a name="(line247)"></a><a name="commaList"></a>commaList <font color=Red>::</font> <font color=Red>[</font>Doc<font color=Red>]</font> <font color=Red>-&gt;</font> Doc+<a name="(line248)"></a>commaList <font color=Red>=</font> hcat <font color=Cyan>.</font> intersperse comma </pre> </html>
docs/HaXml/src/Text/XML/HaXml/Escape.html view
@@ -1,7 +1,7 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html> <pre><a name="(line1)"></a><font color=Blue>{- This module contains code for escaping/unescaping text in attributes-<a name="(line2)"></a>   and elements in the HaXml Element type, replacing characters by character +<a name="(line2)"></a>   and elements in the HaXml Element type, replacing characters by character <a name="(line3)"></a>   references or vice-versa.  Two uses are envisaged for this: <a name="(line4)"></a> <a name="(line5)"></a>   (1) stopping HaXml generating incorrect XML when a character is included@@ -23,7 +23,7 @@ <a name="(line21)"></a>      <font color=Blue>-- Something describing a particular set of escapes.</font> <a name="(line22)"></a> <a name="(line23)"></a>   stdXmlEscaper<font color=Cyan>,</font>-<a name="(line24)"></a>      <font color=Blue>-- Standard boilerplate escaper, escaping everything that is </font>+<a name="(line24)"></a>      <font color=Blue>-- Standard boilerplate escaper, escaping everything that is</font> <a name="(line25)"></a>      <font color=Blue>-- nonprintable, non-ASCII, or might conceivably cause problems by</font> <a name="(line26)"></a>      <font color=Blue>-- parsing XML, for example quotes, &lt; signs, and ampersands.</font> <a name="(line27)"></a>@@ -58,7 +58,7 @@ <a name="(line56)"></a>   <font color=Cyan>)</font> <font color=Green><u>where</u></font> <a name="(line57)"></a> <a name="(line58)"></a><font color=Green><u>import</u></font> Char-<a name="(line59)"></a><font color=Green><u>import</u></font> Numeric+<a name="(line59)"></a><font color=Blue>-- import Numeric</font> <a name="(line60)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types <a name="(line61)"></a> <a name="(line62)"></a><font color=Magenta><em>#if __GLASGOW_HASKELL__ &gt;= 604 || __NHC__ &gt;= 118 || defined(__HUGS__)</em></font>@@ -100,16 +100,16 @@ <a name="(line98)"></a> <a name="(line99)"></a> <a name="(line100)"></a><a name="xmlEscape"></a>xmlEscape <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> Element i-<a name="(line101)"></a>xmlEscape xmlEscaper element <font color=Red>=</font> +<a name="(line101)"></a>xmlEscape xmlEscaper element <font color=Red>=</font> <a name="(line102)"></a>   compressElement <font color=Cyan>(</font>escapeElement xmlEscaper element<font color=Cyan>)</font> <a name="(line103)"></a> <a name="(line104)"></a><a name="xmlEscapeContent"></a>xmlEscapeContent <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font>-<a name="(line105)"></a>xmlEscapeContent xmlEscaper cs <font color=Red>=</font> +<a name="(line105)"></a>xmlEscapeContent xmlEscaper cs <font color=Red>=</font> <a name="(line106)"></a>   compressContent <font color=Cyan>(</font>escapeContent xmlEscaper cs<font color=Cyan>)</font> <a name="(line107)"></a> <a name="(line108)"></a><a name="escapeElement"></a>escapeElement <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> Element i <a name="(line109)"></a>escapeElement xmlEscaper <font color=Cyan>(</font>Elem name attributes content<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line110)"></a>   Elem name <font color=Cyan>(</font>escapeAttributes xmlEscaper attributes<font color=Cyan>)</font> +<a name="(line110)"></a>   Elem name <font color=Cyan>(</font>escapeAttributes xmlEscaper attributes<font color=Cyan>)</font> <a name="(line111)"></a>      <font color=Cyan>(</font>escapeContent xmlEscaper content<font color=Cyan>)</font> <a name="(line112)"></a> <a name="(line113)"></a><a name="escapeAttributes"></a>escapeAttributes <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font>@@ -117,23 +117,23 @@ <a name="(line115)"></a>   map <a name="(line116)"></a>      <font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>name<font color=Cyan>,</font>av<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>name<font color=Cyan>,</font>escapeAttValue xmlEscaper av<font color=Cyan>)</font><font color=Cyan>)</font> <a name="(line117)"></a>      atts-<a name="(line118)"></a>   +<a name="(line118)"></a> <a name="(line119)"></a><a name="escapeAttValue"></a>escapeAttValue <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> AttValue <font color=Red>-&gt;</font> AttValue <a name="(line120)"></a>escapeAttValue xmlEscaper <font color=Cyan>(</font>AttValue attValList<font color=Cyan>)</font> <font color=Red>=</font> <a name="(line121)"></a>   AttValue <font color=Cyan>(</font>-<a name="(line122)"></a>      concat <font color=Cyan>(</font> +<a name="(line122)"></a>      concat <font color=Cyan>(</font> <a name="(line123)"></a>         map <a name="(line124)"></a>            <font color=Cyan>(</font><font color=Red>\</font> av <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> av <font color=Green><u>of</u></font>-<a name="(line125)"></a>               Right ref <font color=Red>-&gt;</font> <font color=Red>[</font>av<font color=Red>]</font>+<a name="(line125)"></a>               Right <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Red>[</font>av<font color=Red>]</font> <a name="(line126)"></a>               Left s <font color=Red>-&gt;</font> <a name="(line127)"></a>                  map-<a name="(line128)"></a>                     <font color=Cyan>(</font><font color=Red>\</font> c <font color=Red>-&gt;</font> <font color=Green><u>if</u></font> isEscape xmlEscaper c +<a name="(line128)"></a>                     <font color=Cyan>(</font><font color=Red>\</font> c <font color=Red>-&gt;</font> <font color=Green><u>if</u></font> isEscape xmlEscaper c <a name="(line129)"></a>                        <font color=Green><u>then</u></font> <a name="(line130)"></a>                           Right <font color=Cyan>(</font>mkEscape xmlEscaper c<font color=Cyan>)</font> <a name="(line131)"></a>                        <font color=Green><u>else</u></font> <a name="(line132)"></a>                           Left <font color=Red>[</font>c<font color=Red>]</font> <a name="(line133)"></a>                        <font color=Cyan>)</font>-<a name="(line134)"></a>                     s +<a name="(line134)"></a>                     s <a name="(line135)"></a>               <font color=Cyan>)</font> <a name="(line136)"></a>            attValList <a name="(line137)"></a>         <font color=Cyan>)</font>@@ -153,20 +153,20 @@ <a name="(line151)"></a>                         CString b <font color=Red>[</font>c<font color=Red>]</font> i <a name="(line152)"></a>                      <font color=Cyan>)</font> <a name="(line153)"></a>                   str-<a name="(line154)"></a>             <font color=Cyan>(</font>CElem elem i<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>escapeElement xmlEscaper elem<font color=Cyan>)</font> i<font color=Red>]</font>+<a name="(line154)"></a>             <font color=Cyan>(</font>CElem element i<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>escapeElement xmlEscaper element<font color=Cyan>)</font> i<font color=Red>]</font> <a name="(line155)"></a>             <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Red>[</font>content<font color=Red>]</font> <a name="(line156)"></a>             <font color=Cyan>)</font> <a name="(line157)"></a>          contents <a name="(line158)"></a>          <font color=Cyan>)</font> <a name="(line159)"></a> <a name="(line160)"></a><a name="mkEscape"></a>mkEscape <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Char <font color=Red>-&gt;</font> Reference-<a name="(line161)"></a>mkEscape <font color=Cyan>(</font>XmlEscaper <font color=Cyan>{</font>toEscape <font color=Red>=</font> toEscape<font color=Cyan>}</font><font color=Cyan>)</font> ch <font color=Red>=</font>-<a name="(line162)"></a>   <font color=Green><u>case</u></font> lookupFM toEscape ch <font color=Green><u>of</u></font>+<a name="(line161)"></a>mkEscape <font color=Cyan>(</font>XmlEscaper <font color=Cyan>{</font>toEscape <font color=Red>=</font> toescape<font color=Cyan>}</font><font color=Cyan>)</font> ch <font color=Red>=</font>+<a name="(line162)"></a>   <font color=Green><u>case</u></font> lookupFM toescape ch <font color=Green><u>of</u></font> <a name="(line163)"></a>      Nothing  <font color=Red>-&gt;</font> RefChar <font color=Cyan>(</font>ord ch<font color=Cyan>)</font> <a name="(line164)"></a>      Just str <font color=Red>-&gt;</font> RefEntity str-<a name="(line165)"></a>   <font color=Green><u>where</u></font>-<a name="(line166)"></a>      showHex <font color=Red>=</font> showIntAtBase <font color=Magenta>16</font> intToDigit -<a name="(line167)"></a>      <font color=Blue>-- It should be, but in GHC it isn't.</font>+<a name="(line165)"></a><font color=Blue>--    where</font>+<a name="(line166)"></a><font color=Blue>--       _ = showIntAtBase 16 intToDigit</font>+<a name="(line167)"></a><font color=Blue>--       -- It should be, but in GHC it isn't.</font> <a name="(line168)"></a> <a name="(line169)"></a><font color=Blue>-- ------------------------------------------------------------------------</font> <a name="(line170)"></a><font color=Blue>-- Unescaping</font>@@ -177,7 +177,7 @@ <a name="(line175)"></a>   compressElement <font color=Cyan>(</font>unEscapeElement xmlEscaper element<font color=Cyan>)</font> <a name="(line176)"></a> <a name="(line177)"></a><a name="xmlUnEscapeContent"></a>xmlUnEscapeContent <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font>-<a name="(line178)"></a>xmlUnEscapeContent xmlEscaper cs <font color=Red>=</font> +<a name="(line178)"></a>xmlUnEscapeContent xmlEscaper cs <font color=Red>=</font> <a name="(line179)"></a>   compressContent <font color=Cyan>(</font>unEscapeContent xmlEscaper cs<font color=Cyan>)</font> <a name="(line180)"></a> <a name="(line181)"></a><a name="unEscapeElement"></a>unEscapeElement <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> Element i <font color=Red>-&gt;</font> Element i@@ -196,7 +196,7 @@ <a name="(line194)"></a>   AttValue <font color=Cyan>(</font> <a name="(line195)"></a>      map <a name="(line196)"></a>         <font color=Cyan>(</font><font color=Red>\</font> av <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> av <font color=Green><u>of</u></font>-<a name="(line197)"></a>            Left s <font color=Red>-&gt;</font> av+<a name="(line197)"></a>            Left <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> av <a name="(line198)"></a>            Right ref <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> unEscapeChar xmlEscaper ref <font color=Green><u>of</u></font> <a name="(line199)"></a>               Just c <font color=Red>-&gt;</font> Left <font color=Red>[</font>c<font color=Red>]</font> <a name="(line200)"></a>               Nothing <font color=Red>-&gt;</font> av@@ -207,12 +207,12 @@ <a name="(line205)"></a><a name="unEscapeContent"></a>unEscapeContent <font color=Red>::</font> XmlEscaper <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Content i<font color=Red>]</font> <a name="(line206)"></a>unEscapeContent xmlEscaper content <font color=Red>=</font> <a name="(line207)"></a>   map-<a name="(line208)"></a>      <font color=Cyan>(</font><font color=Red>\</font> content <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> content <font color=Green><u>of</u></font>+<a name="(line208)"></a>      <font color=Cyan>(</font><font color=Red>\</font> cntnt <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> cntnt <font color=Green><u>of</u></font> <a name="(line209)"></a>         CRef ref i <font color=Red>-&gt;</font> <font color=Green><u>case</u></font> unEscapeChar xmlEscaper ref <font color=Green><u>of</u></font> <a name="(line210)"></a>            Just c <font color=Red>-&gt;</font> CString False <font color=Red>[</font>c<font color=Red>]</font> i-<a name="(line211)"></a>            Nothing <font color=Red>-&gt;</font> content-<a name="(line212)"></a>         CElem elem i <font color=Red>-&gt;</font> CElem <font color=Cyan>(</font>unEscapeElement xmlEscaper elem<font color=Cyan>)</font> i-<a name="(line213)"></a>         <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> content+<a name="(line211)"></a>            Nothing <font color=Red>-&gt;</font> cntnt+<a name="(line212)"></a>         CElem element i <font color=Red>-&gt;</font> CElem <font color=Cyan>(</font>unEscapeElement xmlEscaper element<font color=Cyan>)</font> i+<a name="(line213)"></a>         <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> cntnt <a name="(line214)"></a>         <font color=Cyan>)</font> <a name="(line215)"></a>      content <a name="(line216)"></a>@@ -252,11 +252,11 @@ <a name="(line250)"></a>compressContent [] <font color=Red>=</font> [] <a name="(line251)"></a>compressContent <font color=Cyan>(</font><font color=Cyan>(</font>csb <font color=Red>@</font> <font color=Cyan>(</font>CString b1 s1 i1<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font> <a name="(line252)"></a>   <font color=Green><u>case</u></font> compressContent cs <font color=Green><u>of</u></font>-<a name="(line253)"></a>      <font color=Cyan>(</font>CString b2 s2 i2<font color=Cyan>)</font> <font color=Red><b>:</b></font> cs2+<a name="(line253)"></a>      <font color=Cyan>(</font>CString b2 s2 <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red><b>:</b></font> cs2 <a name="(line254)"></a>          <font color=Red>|</font> b1 <font color=Cyan>==</font> b2 <a name="(line255)"></a>          <font color=Red>-&gt;</font> CString b1 <font color=Cyan>(</font>s1 <font color=Cyan>++</font> s2<font color=Cyan>)</font> i1<font color=Red><b>:</b></font> cs2 <a name="(line256)"></a>      cs2 <font color=Red>-&gt;</font> csb <font color=Red><b>:</b></font> cs2-<a name="(line257)"></a>compressContent <font color=Cyan>(</font>CElem element i <font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font> +<a name="(line257)"></a>compressContent <font color=Cyan>(</font>CElem element i <font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font> <a name="(line258)"></a>   CElem <font color=Cyan>(</font>compressElement element<font color=Cyan>)</font> i <font color=Red><b>:</b></font> compressContent cs <a name="(line259)"></a>compressContent <font color=Cyan>(</font>c <font color=Red><b>:</b></font> cs<font color=Cyan>)</font> <font color=Red>=</font> c <font color=Red><b>:</b></font> compressContent cs <a name="(line260)"></a>@@ -268,7 +268,7 @@ <a name="(line266)"></a><a name="stdXmlEscaper"></a>stdXmlEscaper <font color=Red>::</font> XmlEscaper <a name="(line267)"></a>stdXmlEscaper <font color=Red>=</font> mkXmlEscaper <a name="(line268)"></a>   <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>'\60'</font><font color=Cyan>,</font><font color=Magenta>"lt"</font><font color=Cyan>)</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>'\62'</font><font color=Cyan>,</font><font color=Magenta>"gt"</font><font color=Cyan>)</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>'\38'</font><font color=Cyan>,</font><font color=Magenta>"amp"</font><font color=Cyan>)</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>'\39'</font><font color=Cyan>,</font><font color=Magenta>"apos"</font><font color=Cyan>)</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>'\34'</font><font color=Cyan>,</font><font color=Magenta>"quot"</font><font color=Cyan>)</font><font color=Red>]</font>-<a name="(line269)"></a>   <font color=Cyan>(</font><font color=Red>\</font> ch <font color=Red>-&gt;</font> +<a name="(line269)"></a>   <font color=Cyan>(</font><font color=Red>\</font> ch <font color=Red>-&gt;</font> <a name="(line270)"></a>      <font color=Green><u>let</u></font> <a name="(line271)"></a>         i <font color=Red>=</font> ord ch <a name="(line272)"></a>      <font color=Green><u>in</u></font>@@ -281,14 +281,14 @@ <a name="(line279)"></a>               <font color=Magenta>'&gt;'</font> <font color=Red>-&gt;</font> True <a name="(line280)"></a>               <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> False <a name="(line281)"></a>      <font color=Cyan>)</font>-<a name="(line282)"></a>             -<a name="(line283)"></a>            +<a name="(line282)"></a>+<a name="(line283)"></a> <a name="(line284)"></a><a name="mkXmlEscaper"></a>mkXmlEscaper <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>Char<font color=Cyan>,</font>String<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Char <font color=Red>-&gt;</font> Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> XmlEscaper-<a name="(line285)"></a>mkXmlEscaper escapes isEscape <font color=Red>=</font>+<a name="(line285)"></a>mkXmlEscaper escapes isescape <font color=Red>=</font> <a name="(line286)"></a>   XmlEscaper <font color=Cyan>{</font> <a name="(line287)"></a>      toEscape <font color=Red>=</font> listToFM escapes<font color=Cyan>,</font> <a name="(line288)"></a>      fromEscape <font color=Red>=</font> listToFM <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>c<font color=Cyan>,</font>str<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>str<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> escapes<font color=Cyan>)</font><font color=Cyan>,</font>-<a name="(line289)"></a>      isEscape <font color=Red>=</font> isEscape+<a name="(line289)"></a>      isEscape <font color=Red>=</font> isescape <a name="(line290)"></a>      <font color=Cyan>}</font> <a name="(line291)"></a> </pre>
docs/HaXml/src/Text/XML/HaXml/Html/Generate.html view
@@ -31,149 +31,149 @@ <a name="(line29)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font> <a name="(line30)"></a> <a name="(line31)"></a><font color=Green><u>import</u></font> Char <font color=Cyan>(</font>isSpace<font color=Cyan>)</font>-<a name="(line32)"></a><font color=Green><u>import</u></font> List <font color=Cyan>(</font>partition<font color=Cyan>)</font>-<a name="(line33)"></a>-<a name="(line34)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types-<a name="(line35)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators-<a name="(line36)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ <font color=Green><u>as</u></font> Pretty-<a name="(line37)"></a>-<a name="(line38)"></a><font color=Blue>---- Constructor functions</font>-<a name="(line39)"></a>-<a name="(line40)"></a><a name="html"></a>html<font color=Cyan>,</font> hhead<font color=Cyan>,</font> htitle<font color=Cyan>,</font> hbody<font color=Cyan>,</font> h1<font color=Cyan>,</font> h2<font color=Cyan>,</font> h3<font color=Cyan>,</font> h4<font color=Cyan>,</font> hpara<font color=Cyan>,</font> hpre<font color=Cyan>,</font> hcentre<font color=Cyan>,</font>-<a name="(line41)"></a>    hem<font color=Cyan>,</font> htt<font color=Cyan>,</font> hbold<font color=Cyan>,</font> htable<font color=Cyan>,</font> hrow<font color=Cyan>,</font> hcol<font color=Cyan>,</font> hdiv<font color=Cyan>,</font> hspan<font color=Cyan>,</font> margin-<a name="(line42)"></a>       <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i-<a name="(line43)"></a>html    <font color=Red>=</font> mkElem <font color=Magenta>"html"</font>-<a name="(line44)"></a><a name="hhead"></a>hhead   <font color=Red>=</font> mkElem <font color=Magenta>"head"</font>-<a name="(line45)"></a><a name="htitle"></a>htitle  <font color=Red>=</font> mkElem <font color=Magenta>"title"</font>-<a name="(line46)"></a><a name="hbody"></a>hbody   <font color=Red>=</font> mkElem <font color=Magenta>"body"</font>-<a name="(line47)"></a><a name="h1"></a>h1      <font color=Red>=</font> mkElem <font color=Magenta>"h1"</font>-<a name="(line48)"></a><a name="h2"></a>h2      <font color=Red>=</font> mkElem <font color=Magenta>"h2"</font>-<a name="(line49)"></a><a name="h3"></a>h3      <font color=Red>=</font> mkElem <font color=Magenta>"h3"</font>-<a name="(line50)"></a><a name="h4"></a>h4      <font color=Red>=</font> mkElem <font color=Magenta>"h4"</font>-<a name="(line51)"></a><a name="hpara"></a>hpara   <font color=Red>=</font> mkElem <font color=Magenta>"p"</font>-<a name="(line52)"></a><a name="hpre"></a>hpre    <font color=Red>=</font> mkElem <font color=Magenta>"pre"</font>-<a name="(line53)"></a><a name="hcentre"></a>hcentre <font color=Red>=</font> mkElem <font color=Magenta>"center"</font>-<a name="(line54)"></a><a name="hem"></a>hem     <font color=Red>=</font> mkElem <font color=Magenta>"em"</font>-<a name="(line55)"></a><a name="htt"></a>htt     <font color=Red>=</font> mkElem <font color=Magenta>"tt"</font>-<a name="(line56)"></a><a name="hbold"></a>hbold   <font color=Red>=</font> mkElem <font color=Magenta>"b"</font>-<a name="(line57)"></a>-<a name="(line58)"></a><a name="htable"></a>htable <font color=Red>=</font> mkElem <font color=Magenta>"table"</font>-<a name="(line59)"></a><a name="hrow"></a>hrow   <font color=Red>=</font> mkElem <font color=Magenta>"tr"</font>-<a name="(line60)"></a><a name="hcol"></a>hcol   <font color=Red>=</font> mkElem <font color=Magenta>"td"</font>-<a name="(line61)"></a>-<a name="(line62)"></a><a name="hdiv"></a>hdiv   <font color=Red>=</font> mkElem <font color=Magenta>"div"</font>-<a name="(line63)"></a><a name="hspan"></a>hspan  <font color=Red>=</font> mkElem <font color=Magenta>"span"</font>-<a name="(line64)"></a><a name="margin"></a>margin <font color=Red>=</font> mkElemAttr <font color=Magenta>"div"</font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"margin-left"</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>"2em"</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>,</font>-<a name="(line65)"></a>                           <font color=Cyan>(</font><font color=Magenta>"margin-top"</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"1em"</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>-<a name="(line66)"></a>-<a name="(line67)"></a><a name="anchor"></a>anchor      <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font> CFilter i<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter  i-<a name="(line68)"></a>anchor       <font color=Red>=</font> mkElemAttr <font color=Magenta>"a"</font>-<a name="(line69)"></a>-<a name="(line70)"></a><a name="makehref"></a>makehref<font color=Cyan>,</font> anchorname <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i-<a name="(line71)"></a>makehref r   <font color=Red>=</font> anchor <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"href"</font><font color=Cyan>,</font>r<font color=Cyan>)</font> <font color=Red>]</font>-<a name="(line72)"></a><a name="anchorname"></a>anchorname n <font color=Red>=</font> anchor <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"name"</font><font color=Cyan>,</font>n<font color=Cyan>)</font> <font color=Red>]</font>+<a name="(line32)"></a>+<a name="(line33)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types+<a name="(line34)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Combinators+<a name="(line35)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ <font color=Green><u>as</u></font> Pretty+<a name="(line36)"></a>+<a name="(line37)"></a><font color=Blue>---- Constructor functions</font>+<a name="(line38)"></a>+<a name="(line39)"></a><a name="html"></a>html<font color=Cyan>,</font> hhead<font color=Cyan>,</font> htitle<font color=Cyan>,</font> hbody<font color=Cyan>,</font> h1<font color=Cyan>,</font> h2<font color=Cyan>,</font> h3<font color=Cyan>,</font> h4<font color=Cyan>,</font> hpara<font color=Cyan>,</font> hpre<font color=Cyan>,</font> hcentre<font color=Cyan>,</font>+<a name="(line40)"></a>    hem<font color=Cyan>,</font> htt<font color=Cyan>,</font> hbold<font color=Cyan>,</font> htable<font color=Cyan>,</font> hrow<font color=Cyan>,</font> hcol<font color=Cyan>,</font> hdiv<font color=Cyan>,</font> hspan<font color=Cyan>,</font> margin+<a name="(line41)"></a>       <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i+<a name="(line42)"></a>html    <font color=Red>=</font> mkElem <font color=Magenta>"html"</font>+<a name="(line43)"></a><a name="hhead"></a>hhead   <font color=Red>=</font> mkElem <font color=Magenta>"head"</font>+<a name="(line44)"></a><a name="htitle"></a>htitle  <font color=Red>=</font> mkElem <font color=Magenta>"title"</font>+<a name="(line45)"></a><a name="hbody"></a>hbody   <font color=Red>=</font> mkElem <font color=Magenta>"body"</font>+<a name="(line46)"></a><a name="h1"></a>h1      <font color=Red>=</font> mkElem <font color=Magenta>"h1"</font>+<a name="(line47)"></a><a name="h2"></a>h2      <font color=Red>=</font> mkElem <font color=Magenta>"h2"</font>+<a name="(line48)"></a><a name="h3"></a>h3      <font color=Red>=</font> mkElem <font color=Magenta>"h3"</font>+<a name="(line49)"></a><a name="h4"></a>h4      <font color=Red>=</font> mkElem <font color=Magenta>"h4"</font>+<a name="(line50)"></a><a name="hpara"></a>hpara   <font color=Red>=</font> mkElem <font color=Magenta>"p"</font>+<a name="(line51)"></a><a name="hpre"></a>hpre    <font color=Red>=</font> mkElem <font color=Magenta>"pre"</font>+<a name="(line52)"></a><a name="hcentre"></a>hcentre <font color=Red>=</font> mkElem <font color=Magenta>"center"</font>+<a name="(line53)"></a><a name="hem"></a>hem     <font color=Red>=</font> mkElem <font color=Magenta>"em"</font>+<a name="(line54)"></a><a name="htt"></a>htt     <font color=Red>=</font> mkElem <font color=Magenta>"tt"</font>+<a name="(line55)"></a><a name="hbold"></a>hbold   <font color=Red>=</font> mkElem <font color=Magenta>"b"</font>+<a name="(line56)"></a>+<a name="(line57)"></a><a name="htable"></a>htable <font color=Red>=</font> mkElem <font color=Magenta>"table"</font>+<a name="(line58)"></a><a name="hrow"></a>hrow   <font color=Red>=</font> mkElem <font color=Magenta>"tr"</font>+<a name="(line59)"></a><a name="hcol"></a>hcol   <font color=Red>=</font> mkElem <font color=Magenta>"td"</font>+<a name="(line60)"></a>+<a name="(line61)"></a><a name="hdiv"></a>hdiv   <font color=Red>=</font> mkElem <font color=Magenta>"div"</font>+<a name="(line62)"></a><a name="hspan"></a>hspan  <font color=Red>=</font> mkElem <font color=Magenta>"span"</font>+<a name="(line63)"></a><a name="margin"></a>margin <font color=Red>=</font> mkElemAttr <font color=Magenta>"div"</font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"margin-left"</font><font color=Cyan>,</font><font color=Cyan>(</font><font color=Magenta>"2em"</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>,</font>+<a name="(line64)"></a>                           <font color=Cyan>(</font><font color=Magenta>"margin-top"</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Magenta>"1em"</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>+<a name="(line65)"></a>+<a name="(line66)"></a><a name="anchor"></a>anchor      <font color=Red>::</font> <font color=Red>[</font><font color=Cyan>(</font>String<font color=Cyan>,</font> CFilter i<font color=Cyan>)</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter  i+<a name="(line67)"></a>anchor       <font color=Red>=</font> mkElemAttr <font color=Magenta>"a"</font>+<a name="(line68)"></a>+<a name="(line69)"></a><a name="makehref"></a>makehref<font color=Cyan>,</font> anchorname <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i+<a name="(line70)"></a>makehref r   <font color=Red>=</font> anchor <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"href"</font><font color=Cyan>,</font>r<font color=Cyan>)</font> <font color=Red>]</font>+<a name="(line71)"></a><a name="anchorname"></a>anchorname n <font color=Red>=</font> anchor <font color=Red>[</font> <font color=Cyan>(</font><font color=Magenta>"name"</font><font color=Cyan>,</font>n<font color=Cyan>)</font> <font color=Red>]</font>+<a name="(line72)"></a> <a name="(line73)"></a>-<a name="(line74)"></a>-<a name="(line75)"></a><a name="hbr"></a>hbr<font color=Cyan>,</font> hhr <font color=Red>::</font> CFilter i-<a name="(line76)"></a>hbr       <font color=Red>=</font> mkElem <font color=Magenta>"br"</font> []-<a name="(line77)"></a><a name="hhr"></a>hhr       <font color=Red>=</font> mkElem <font color=Magenta>"hr"</font> []+<a name="(line74)"></a><a name="hbr"></a>hbr<font color=Cyan>,</font> hhr <font color=Red>::</font> CFilter i+<a name="(line75)"></a>hbr       <font color=Red>=</font> mkElem <font color=Magenta>"br"</font> []+<a name="(line76)"></a><a name="hhr"></a>hhr       <font color=Red>=</font> mkElem <font color=Magenta>"hr"</font> []+<a name="(line77)"></a> <a name="(line78)"></a>-<a name="(line79)"></a>-<a name="(line80)"></a><a name="showattr"></a>showattr<font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i-<a name="(line81)"></a>showattr n <font color=Red>=</font> find n literal-<a name="(line82)"></a><a name="!"></a><font color=Cyan>(</font><font color=Cyan>!</font><font color=Cyan>)</font> <font color=Red>=</font> literal-<a name="(line83)"></a><a name="?"></a><font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>=</font> showattr-<a name="(line84)"></a>-<a name="(line85)"></a><a name="parens"></a>parens <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i-<a name="(line86)"></a>parens f <font color=Red>=</font> cat <font color=Red>[</font> literal <font color=Magenta>"("</font><font color=Cyan>,</font> f<font color=Cyan>,</font> literal <font color=Magenta>")"</font> <font color=Red>]</font>-<a name="(line87)"></a>-<a name="(line88)"></a><a name="bullet"></a>bullet <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i-<a name="(line89)"></a>bullet <font color=Red>=</font> cat <font color=Cyan>.</font> <font color=Cyan>(</font>literal <font color=Magenta>"M-^U"</font><font color=Red><b>:</b></font><font color=Cyan>)</font>+<a name="(line79)"></a><a name="showattr"></a>showattr<font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>!</font><font color=Cyan>)</font><font color=Cyan>,</font> <font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>::</font> String <font color=Red>-&gt;</font> CFilter i+<a name="(line80)"></a>showattr n <font color=Red>=</font> find n literal+<a name="(line81)"></a><a name="!"></a><font color=Cyan>(</font><font color=Cyan>!</font><font color=Cyan>)</font> <font color=Red>=</font> literal+<a name="(line82)"></a><a name="?"></a><font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>=</font> showattr+<a name="(line83)"></a>+<a name="(line84)"></a><a name="parens"></a>parens <font color=Red>::</font> CFilter i <font color=Red>-&gt;</font> CFilter i+<a name="(line85)"></a>parens f <font color=Red>=</font> cat <font color=Red>[</font> literal <font color=Magenta>"("</font><font color=Cyan>,</font> f<font color=Cyan>,</font> literal <font color=Magenta>")"</font> <font color=Red>]</font>+<a name="(line86)"></a>+<a name="(line87)"></a><a name="bullet"></a>bullet <font color=Red>::</font> <font color=Red>[</font>CFilter i<font color=Red>]</font> <font color=Red>-&gt;</font> CFilter i+<a name="(line88)"></a>bullet <font color=Red>=</font> cat <font color=Cyan>.</font> <font color=Cyan>(</font>literal <font color=Magenta>"M-^U"</font><font color=Red><b>:</b></font><font color=Cyan>)</font>+<a name="(line89)"></a> <a name="(line90)"></a>-<a name="(line91)"></a>-<a name="(line92)"></a><font color=Blue>---- Printing function</font>-<a name="(line93)"></a>-<a name="(line94)"></a><font color=Blue>-- htmlprint :: [Content] -&gt; String</font>-<a name="(line95)"></a><font color=Blue>-- htmlprint = concatMap cprint</font>-<a name="(line96)"></a><font color=Blue>--   where</font>-<a name="(line97)"></a><font color=Blue>--   cprint (CElem e _) = elem e </font>-<a name="(line98)"></a><font color=Blue>--   cprint (CString _ s) = s</font>-<a name="(line99)"></a><font color=Blue>--   cprint (CMisc m) = ""</font>-<a name="(line100)"></a><font color=Blue>--  </font>-<a name="(line101)"></a><font color=Blue>--   elem (Elem n as []) = "\n&lt;"++n++attrs as++" /&gt;"</font>-<a name="(line102)"></a><font color=Blue>--   elem (Elem n as cs) = "\n&lt;"++n++attrs as++"&gt;"++htmlprint cs++"\n&lt;/"++n++"&gt;"</font>-<a name="(line103)"></a><font color=Blue>-- </font>-<a name="(line104)"></a><font color=Blue>--   attrs = concatMap attr</font>-<a name="(line105)"></a><font color=Blue>--   attr (n,v) = " "++n++"='"++v++"'"</font>+<a name="(line91)"></a><font color=Blue>---- Printing function</font>+<a name="(line92)"></a>+<a name="(line93)"></a><font color=Blue>-- htmlprint :: [Content] -&gt; String</font>+<a name="(line94)"></a><font color=Blue>-- htmlprint = concatMap cprint</font>+<a name="(line95)"></a><font color=Blue>--   where</font>+<a name="(line96)"></a><font color=Blue>--   cprint (CElem e _) = elem e</font>+<a name="(line97)"></a><font color=Blue>--   cprint (CString _ s) = s</font>+<a name="(line98)"></a><font color=Blue>--   cprint (CMisc m) = ""</font>+<a name="(line99)"></a><font color=Blue>--</font>+<a name="(line100)"></a><font color=Blue>--   elem (Elem n as []) = "\n&lt;"++n++attrs as++" /&gt;"</font>+<a name="(line101)"></a><font color=Blue>--   elem (Elem n as cs) = "\n&lt;"++n++attrs as++"&gt;"++htmlprint cs++"\n&lt;/"++n++"&gt;"</font>+<a name="(line102)"></a><font color=Blue>--</font>+<a name="(line103)"></a><font color=Blue>--   attrs = concatMap attr</font>+<a name="(line104)"></a><font color=Blue>--   attr (n,v) = " "++n++"='"++v++"'"</font>+<a name="(line105)"></a> <a name="(line106)"></a>-<a name="(line107)"></a>-<a name="(line108)"></a><a name="htmlprint"></a>htmlprint <font color=Red>::</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-&gt;</font> Pretty<font color=Cyan>.</font>Doc-<a name="(line109)"></a>htmlprint <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>.</font> map cprint <font color=Cyan>.</font> foldrefs -<a name="(line110)"></a>  <font color=Green><u>where</u></font>-<a name="(line111)"></a>  foldrefs [] <font color=Red>=</font> []-<a name="(line112)"></a>  foldrefs <font color=Cyan>(</font>CString ws s1 i<font color=Red><b>:</b></font>CRef r <font color=Green><u>_</u></font><font color=Red><b>:</b></font>CString <font color=Green><u>_</u></font> s2 <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line113)"></a>              CString ws <font color=Cyan>(</font>s1<font color=Cyan>++</font><font color=Magenta>"&amp;"</font><font color=Cyan>++</font>ref r<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>++</font>s2<font color=Cyan>)</font> i<font color=Red><b>:</b></font> foldrefs cs-<a name="(line114)"></a>  foldrefs <font color=Cyan>(</font>c<font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>=</font> c <font color=Red><b>:</b></font> foldrefs cs-<a name="(line115)"></a>-<a name="(line116)"></a><font color=Blue>--ref (RefEntity (EntityRef n)) = n	-- Actually, should look-up symtable.</font>-<a name="(line117)"></a><font color=Blue>--ref (RefChar (CharRef s)) = s</font>-<a name="(line118)"></a>  ref <font color=Cyan>(</font>RefEntity n<font color=Cyan>)</font> <font color=Red>=</font> n	<font color=Blue>-- Actually, should look-up symtable.</font>-<a name="(line119)"></a>  ref <font color=Cyan>(</font>RefChar s<font color=Cyan>)</font> <font color=Red>=</font> show s-<a name="(line120)"></a>-<a name="(line121)"></a>  cprint <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> elem e-<a name="(line122)"></a>  cprint <font color=Cyan>(</font>CString ws s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>(</font>map Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font>fmt <font color=Magenta>60</font>-<a name="(line123)"></a>                                             <font color=Cyan>(</font><font color=Cyan>(</font><font color=Green><u>if</u></font> ws <font color=Green><u>then</u></font> id <font color=Green><u>else</u></font> deSpace<font color=Cyan>)</font> s<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line124)"></a>  cprint <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>       <font color=Red>=</font> Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font><font color=Magenta>"&amp;"</font><font color=Cyan>++</font>ref r<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>-<a name="(line125)"></a>  cprint <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> Pretty<font color=Cyan>.</font>empty-<a name="(line126)"></a> -<a name="(line127)"></a>  elem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"&lt;"</font>   Pretty<font color=Cyan>.&lt;&gt;</font>-<a name="(line128)"></a>                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>-<a name="(line129)"></a>                        attrs <font color=Green><u>as</u></font>          Pretty<font color=Cyan>.&lt;&gt;</font>-<a name="(line130)"></a>                        Pretty<font color=Cyan>.</font>text <font color=Magenta>" /&gt;"</font>-<a name="(line131)"></a>  elem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line132)"></a>                    <font color=Blue>--  ( Pretty.text "&lt;"   Pretty.&lt;&gt;</font>-<a name="(line133)"></a>                    <font color=Blue>--    Pretty.text n     Pretty.&lt;&gt;</font>-<a name="(line134)"></a>                    <font color=Blue>--    attrs as          Pretty.&lt;&gt;</font>-<a name="(line135)"></a>                    <font color=Blue>--    Pretty.text "&gt;")  Pretty.$$</font>-<a name="(line136)"></a>                    <font color=Blue>--  Pretty.nest 6 (htmlprint cs)  Pretty.$$</font>-<a name="(line137)"></a>                    <font color=Blue>--  ( Pretty.text "&lt;/"  Pretty.&lt;&gt;</font>-<a name="(line138)"></a>                    <font color=Blue>--    Pretty.text n     Pretty.&lt;&gt;</font>-<a name="(line139)"></a>                    <font color=Blue>--    Pretty.text "&gt;" )</font>-<a name="(line140)"></a>                        Pretty<font color=Cyan>.</font>fcat <font color=Red>[</font> <font color=Cyan>(</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"&lt;"</font>   Pretty<font color=Cyan>.&lt;&gt;</font>-<a name="(line141)"></a>                                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>-<a name="(line142)"></a>                                        attrs <font color=Green><u>as</u></font>          Pretty<font color=Cyan>.&lt;&gt;</font>-<a name="(line143)"></a>                                        Pretty<font color=Cyan>.</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>-<a name="(line144)"></a>                                    <font color=Cyan>,</font> Pretty<font color=Cyan>.</font>nest <font color=Magenta>4</font> <font color=Cyan>(</font>htmlprint cs<font color=Cyan>)</font>-<a name="(line145)"></a>                                    <font color=Cyan>,</font> <font color=Cyan>(</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"&lt;/"</font>  Pretty<font color=Cyan>.&lt;&gt;</font>-<a name="(line146)"></a>                                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>-<a name="(line147)"></a>                                        Pretty<font color=Cyan>.</font>text <font color=Magenta>"&gt;"</font> <font color=Cyan>)</font>-<a name="(line148)"></a>                                    <font color=Red>]</font>-<a name="(line149)"></a>-<a name="(line150)"></a>  attrs <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>.</font> map attr-<a name="(line151)"></a>  attr <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line152)"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>" "</font>  Pretty<font color=Cyan>.&lt;&gt;</font>-<a name="(line153)"></a>               Pretty<font color=Cyan>.</font>text n    Pretty<font color=Cyan>.&lt;&gt;</font>-<a name="(line154)"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>"='"</font> Pretty<font color=Cyan>.&lt;&gt;</font>-<a name="(line155)"></a>               Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font>show v<font color=Cyan>)</font> Pretty<font color=Cyan>.&lt;&gt;</font>-<a name="(line156)"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>"'"</font>-<a name="(line157)"></a>-<a name="(line158)"></a>  fmt n [] <font color=Red>=</font> []-<a name="(line159)"></a>  fmt n s  <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>top<font color=Cyan>,</font>bot<font color=Cyan>)</font> <font color=Red>=</font> splitAt n s-<a name="(line160)"></a>                 <font color=Cyan>(</font>word<font color=Cyan>,</font>left<font color=Cyan>)</font> <font color=Red>=</font> keepUntil isSpace <font color=Cyan>(</font>reverse top<font color=Cyan>)</font>-<a name="(line161)"></a>             <font color=Green><u>in</u></font> <font color=Green><u>if</u></font> length top <font color=Cyan>&lt;</font> n <font color=Green><u>then</u></font> <font color=Red>[</font>s<font color=Red>]</font>-<a name="(line162)"></a>                <font color=Green><u>else</u></font> <font color=Green><u>if</u></font> not <font color=Cyan>(</font>null left<font color=Cyan>)</font> <font color=Green><u>then</u></font>-<a name="(line163)"></a>                     reverse left<font color=Red><b>:</b></font> fmt n <font color=Cyan>(</font>word<font color=Cyan>++</font>bot<font color=Cyan>)</font>-<a name="(line164)"></a>                <font color=Green><u>else</u></font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>big<font color=Cyan>,</font>rest<font color=Cyan>)</font> <font color=Red>=</font> keepUntil isSpace s-<a name="(line165)"></a>                     <font color=Green><u>in</u></font> reverse big<font color=Red><b>:</b></font> fmt n rest-<a name="(line166)"></a>-<a name="(line167)"></a>  deSpace []     <font color=Red>=</font> []-<a name="(line168)"></a>  deSpace <font color=Cyan>(</font>c<font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>|</font> c<font color=Cyan>==</font><font color=Magenta>'\n'</font>   <font color=Red>=</font> deSpace <font color=Cyan>(</font><font color=Magenta>' '</font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>-<a name="(line169)"></a>                 <font color=Red>|</font> isSpace c <font color=Red>=</font> c <font color=Red><b>:</b></font> deSpace <font color=Cyan>(</font>dropWhile isSpace cs<font color=Cyan>)</font>-<a name="(line170)"></a>                 <font color=Red>|</font> otherwise <font color=Red>=</font> c <font color=Red><b>:</b></font> deSpace cs-<a name="(line171)"></a>-<a name="(line172)"></a>  keepUntil p xs <font color=Red>=</font> select p <font color=Cyan>(</font>[]<font color=Cyan>,</font>xs<font color=Cyan>)</font>-<a name="(line173)"></a>      <font color=Green><u>where</u></font> select p <font color=Cyan>(</font>ls<font color=Cyan>,</font>[]<font color=Cyan>)</font>     <font color=Red>=</font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>[]<font color=Cyan>)</font>-<a name="(line174)"></a>            select p <font color=Cyan>(</font>ls<font color=Cyan>,</font><font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>|</font> p x       <font color=Red>=</font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font>-<a name="(line175)"></a>                                 <font color=Red>|</font> otherwise <font color=Red>=</font> select p <font color=Cyan>(</font>x<font color=Red><b>:</b></font>ls<font color=Cyan>,</font>xs<font color=Cyan>)</font>+<a name="(line107)"></a><a name="htmlprint"></a>htmlprint <font color=Red>::</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Red>-&gt;</font> Pretty<font color=Cyan>.</font>Doc+<a name="(line108)"></a>htmlprint <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>.</font> map cprint <font color=Cyan>.</font> foldrefs+<a name="(line109)"></a>  <font color=Green><u>where</u></font>+<a name="(line110)"></a>  foldrefs [] <font color=Red>=</font> []+<a name="(line111)"></a>  foldrefs <font color=Cyan>(</font>CString ws s1 i<font color=Red><b>:</b></font>CRef r <font color=Green><u>_</u></font><font color=Red><b>:</b></font>CString <font color=Green><u>_</u></font> s2 <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line112)"></a>              CString ws <font color=Cyan>(</font>s1<font color=Cyan>++</font><font color=Magenta>"&amp;"</font><font color=Cyan>++</font>ref r<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>++</font>s2<font color=Cyan>)</font> i<font color=Red><b>:</b></font> foldrefs cs+<a name="(line113)"></a>  foldrefs <font color=Cyan>(</font>c<font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>=</font> c <font color=Red><b>:</b></font> foldrefs cs+<a name="(line114)"></a>+<a name="(line115)"></a><font color=Blue>--ref (RefEntity (EntityRef n)) = n     -- Actually, should look-up symtable.</font>+<a name="(line116)"></a><font color=Blue>--ref (RefChar (CharRef s)) = s</font>+<a name="(line117)"></a>  ref <font color=Cyan>(</font>RefEntity n<font color=Cyan>)</font> <font color=Red>=</font> n <font color=Blue>-- Actually, should look-up symtable.</font>+<a name="(line118)"></a>  ref <font color=Cyan>(</font>RefChar s<font color=Cyan>)</font> <font color=Red>=</font> show s+<a name="(line119)"></a>+<a name="(line120)"></a>  cprint <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> element e+<a name="(line121)"></a>  cprint <font color=Cyan>(</font>CString ws s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>(</font>map Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font>fmt <font color=Magenta>60</font>+<a name="(line122)"></a>                                             <font color=Cyan>(</font><font color=Cyan>(</font><font color=Green><u>if</u></font> ws <font color=Green><u>then</u></font> id <font color=Green><u>else</u></font> deSpace<font color=Cyan>)</font> s<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line123)"></a>  cprint <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>       <font color=Red>=</font> Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font><font color=Magenta>"&amp;"</font><font color=Cyan>++</font>ref r<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font>+<a name="(line124)"></a>  cprint <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> Pretty<font color=Cyan>.</font>empty+<a name="(line125)"></a>+<a name="(line126)"></a>  element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"&lt;"</font>   Pretty<font color=Cyan>.&lt;&gt;</font>+<a name="(line127)"></a>                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>+<a name="(line128)"></a>                        attrs <font color=Green><u>as</u></font>          Pretty<font color=Cyan>.&lt;&gt;</font>+<a name="(line129)"></a>                        Pretty<font color=Cyan>.</font>text <font color=Magenta>" /&gt;"</font>+<a name="(line130)"></a>  element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line131)"></a>                    <font color=Blue>--  ( Pretty.text "&lt;"   Pretty.&lt;&gt;</font>+<a name="(line132)"></a>                    <font color=Blue>--    Pretty.text n     Pretty.&lt;&gt;</font>+<a name="(line133)"></a>                    <font color=Blue>--    attrs as          Pretty.&lt;&gt;</font>+<a name="(line134)"></a>                    <font color=Blue>--    Pretty.text "&gt;")  Pretty.$$</font>+<a name="(line135)"></a>                    <font color=Blue>--  Pretty.nest 6 (htmlprint cs)  Pretty.$$</font>+<a name="(line136)"></a>                    <font color=Blue>--  ( Pretty.text "&lt;/"  Pretty.&lt;&gt;</font>+<a name="(line137)"></a>                    <font color=Blue>--    Pretty.text n     Pretty.&lt;&gt;</font>+<a name="(line138)"></a>                    <font color=Blue>--    Pretty.text "&gt;" )</font>+<a name="(line139)"></a>                        Pretty<font color=Cyan>.</font>fcat <font color=Red>[</font> <font color=Cyan>(</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"&lt;"</font>   Pretty<font color=Cyan>.&lt;&gt;</font>+<a name="(line140)"></a>                                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>+<a name="(line141)"></a>                                        attrs <font color=Green><u>as</u></font>          Pretty<font color=Cyan>.&lt;&gt;</font>+<a name="(line142)"></a>                                        Pretty<font color=Cyan>.</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>+<a name="(line143)"></a>                                    <font color=Cyan>,</font> Pretty<font color=Cyan>.</font>nest <font color=Magenta>4</font> <font color=Cyan>(</font>htmlprint cs<font color=Cyan>)</font>+<a name="(line144)"></a>                                    <font color=Cyan>,</font> <font color=Cyan>(</font> Pretty<font color=Cyan>.</font>text <font color=Magenta>"&lt;/"</font>  Pretty<font color=Cyan>.&lt;&gt;</font>+<a name="(line145)"></a>                                        Pretty<font color=Cyan>.</font>text n     Pretty<font color=Cyan>.&lt;&gt;</font>+<a name="(line146)"></a>                                        Pretty<font color=Cyan>.</font>text <font color=Magenta>"&gt;"</font> <font color=Cyan>)</font>+<a name="(line147)"></a>                                    <font color=Red>]</font>+<a name="(line148)"></a>+<a name="(line149)"></a>  attrs <font color=Red>=</font> Pretty<font color=Cyan>.</font>cat <font color=Cyan>.</font> map attribute+<a name="(line150)"></a>  attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line151)"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>" "</font>  Pretty<font color=Cyan>.&lt;&gt;</font>+<a name="(line152)"></a>               Pretty<font color=Cyan>.</font>text n    Pretty<font color=Cyan>.&lt;&gt;</font>+<a name="(line153)"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>"='"</font> Pretty<font color=Cyan>.&lt;&gt;</font>+<a name="(line154)"></a>               Pretty<font color=Cyan>.</font>text <font color=Cyan>(</font>show v<font color=Cyan>)</font> Pretty<font color=Cyan>.&lt;&gt;</font>+<a name="(line155)"></a>               Pretty<font color=Cyan>.</font>text <font color=Magenta>"'"</font>+<a name="(line156)"></a>+<a name="(line157)"></a>  fmt <font color=Green><u>_</u></font> [] <font color=Red>=</font> []+<a name="(line158)"></a>  fmt n s  <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>top<font color=Cyan>,</font>bot<font color=Cyan>)</font> <font color=Red>=</font> splitAt n s+<a name="(line159)"></a>                 <font color=Cyan>(</font>word<font color=Cyan>,</font>left<font color=Cyan>)</font> <font color=Red>=</font> keepUntil isSpace <font color=Cyan>(</font>reverse top<font color=Cyan>)</font>+<a name="(line160)"></a>             <font color=Green><u>in</u></font> <font color=Green><u>if</u></font> length top <font color=Cyan>&lt;</font> n <font color=Green><u>then</u></font> <font color=Red>[</font>s<font color=Red>]</font>+<a name="(line161)"></a>                <font color=Green><u>else</u></font> <font color=Green><u>if</u></font> not <font color=Cyan>(</font>null left<font color=Cyan>)</font> <font color=Green><u>then</u></font>+<a name="(line162)"></a>                     reverse left<font color=Red><b>:</b></font> fmt n <font color=Cyan>(</font>word<font color=Cyan>++</font>bot<font color=Cyan>)</font>+<a name="(line163)"></a>                <font color=Green><u>else</u></font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>big<font color=Cyan>,</font>rest<font color=Cyan>)</font> <font color=Red>=</font> keepUntil isSpace s+<a name="(line164)"></a>                     <font color=Green><u>in</u></font> reverse big<font color=Red><b>:</b></font> fmt n rest+<a name="(line165)"></a>+<a name="(line166)"></a>  deSpace []     <font color=Red>=</font> []+<a name="(line167)"></a>  deSpace <font color=Cyan>(</font>c<font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>|</font> c<font color=Cyan>==</font><font color=Magenta>'\n'</font>   <font color=Red>=</font> deSpace <font color=Cyan>(</font><font color=Magenta>' '</font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>+<a name="(line168)"></a>                 <font color=Red>|</font> isSpace c <font color=Red>=</font> c <font color=Red><b>:</b></font> deSpace <font color=Cyan>(</font>dropWhile isSpace cs<font color=Cyan>)</font>+<a name="(line169)"></a>                 <font color=Red>|</font> otherwise <font color=Red>=</font> c <font color=Red><b>:</b></font> deSpace cs+<a name="(line170)"></a>+<a name="(line171)"></a>  keepUntil p xs <font color=Red>=</font> select p <font color=Cyan>(</font>[]<font color=Cyan>,</font>xs<font color=Cyan>)</font>+<a name="(line172)"></a>      <font color=Green><u>where</u></font> select <font color=Green><u>_</u></font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>[]<font color=Cyan>)</font>     <font color=Red>=</font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>[]<font color=Cyan>)</font>+<a name="(line173)"></a>            select q <font color=Cyan>(</font>ls<font color=Cyan>,</font><font color=Cyan>(</font>y<font color=Red><b>:</b></font>ys<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>|</font> q y       <font color=Red>=</font> <font color=Cyan>(</font>ls<font color=Cyan>,</font>y<font color=Red><b>:</b></font>ys<font color=Cyan>)</font>+<a name="(line174)"></a>                                 <font color=Red>|</font> otherwise <font color=Red>=</font> select q <font color=Cyan>(</font>y<font color=Red><b>:</b></font>ls<font color=Cyan>,</font>ys<font color=Cyan>)</font>+<a name="(line175)"></a> </pre> </html>
docs/HaXml/src/Text/XML/HaXml/OneOfN.html view
@@ -10,7 +10,7 @@ <a name="(line8)"></a> <a name="(line9)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>)</font> <a name="(line10)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf2 a b<font color=Cyan>)</font>-<a name="(line11)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf2"</font> [] []+<a name="(line11)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf2"</font> [] [] <a name="(line12)"></a>  <font color=Blue>--         toHType m = Defined "OneOf2" [a,b] []</font> <a name="(line13)"></a>  <font color=Blue>--            where a = toHType $ (\ (OneOf2 a)-&gt;a) $ m</font> <a name="(line14)"></a>  <font color=Blue>--                  b = toHType $ (\ (TwoOf2 b)-&gt;b) $ m</font>@@ -32,7 +32,7 @@ <a name="(line30)"></a> <a name="(line31)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>)</font> <a name="(line32)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf3 a b c<font color=Cyan>)</font>-<a name="(line33)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf3"</font> [] []+<a name="(line33)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf3"</font> [] [] <a name="(line34)"></a> <a name="(line35)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>)</font> <a name="(line36)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf3 a b c<font color=Cyan>)</font>@@ -51,7 +51,7 @@ <a name="(line49)"></a> <a name="(line50)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>)</font> <a name="(line51)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf4 a b c d<font color=Cyan>)</font>-<a name="(line52)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf4"</font> [] []+<a name="(line52)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf4"</font> [] [] <a name="(line53)"></a> <a name="(line54)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>)</font> <a name="(line55)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf4 a b c d<font color=Cyan>)</font>@@ -71,7 +71,7 @@ <a name="(line69)"></a> <a name="(line70)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e<font color=Cyan>)</font> <a name="(line71)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf5 a b c d e<font color=Cyan>)</font>-<a name="(line72)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf5"</font> [] []+<a name="(line72)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf5"</font> [] [] <a name="(line73)"></a> <a name="(line74)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e<font color=Cyan>)</font> <a name="(line75)"></a>    <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>OneOf5 a b c d e<font color=Cyan>)</font>@@ -94,7 +94,7 @@ <a name="(line92)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e <a name="(line93)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>)</font> <a name="(line94)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf6 a b c d e f<font color=Cyan>)</font>-<a name="(line95)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf6"</font> [] []+<a name="(line95)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf6"</font> [] [] <a name="(line96)"></a> <a name="(line97)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line98)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>)</font>@@ -120,7 +120,7 @@ <a name="(line118)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e <a name="(line119)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>)</font> <a name="(line120)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf7 a b c d e f g<font color=Cyan>)</font>-<a name="(line121)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf7"</font> [] []+<a name="(line121)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf7"</font> [] [] <a name="(line122)"></a> <a name="(line123)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line124)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>)</font>@@ -147,7 +147,7 @@ <a name="(line145)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e <a name="(line146)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>)</font> <a name="(line147)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf8 a b c d e f g h<font color=Cyan>)</font>-<a name="(line148)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf8"</font> [] []+<a name="(line148)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf8"</font> [] [] <a name="(line149)"></a> <a name="(line150)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line151)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>)</font>@@ -175,7 +175,7 @@ <a name="(line173)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e <a name="(line174)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>)</font> <a name="(line175)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf9 a b c d e f g h i<font color=Cyan>)</font>-<a name="(line176)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf9"</font> [] []+<a name="(line176)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf9"</font> [] [] <a name="(line177)"></a> <a name="(line178)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line179)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>)</font>@@ -205,7 +205,7 @@ <a name="(line203)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font>HTypeable b<font color=Cyan>,</font>HTypeable c<font color=Cyan>,</font>HTypeable d<font color=Cyan>,</font>HTypeable e <a name="(line204)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j<font color=Cyan>)</font> <a name="(line205)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf10 a b c d e f g h i j<font color=Cyan>)</font>-<a name="(line206)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf10"</font> [] []+<a name="(line206)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf10"</font> [] [] <a name="(line207)"></a> <a name="(line208)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line209)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j<font color=Cyan>)</font>@@ -238,7 +238,7 @@ <a name="(line236)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j <a name="(line237)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>)</font> <a name="(line238)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf11 a b c d e f g h i j k<font color=Cyan>)</font>-<a name="(line239)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf11"</font> [] []+<a name="(line239)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf11"</font> [] [] <a name="(line240)"></a> <a name="(line241)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line242)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -274,7 +274,7 @@ <a name="(line272)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j <a name="(line273)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>)</font> <a name="(line274)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf12 a b c d e f g h i j k l<font color=Cyan>)</font>-<a name="(line275)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf12"</font> [] []+<a name="(line275)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf12"</font> [] [] <a name="(line276)"></a> <a name="(line277)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line278)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -311,7 +311,7 @@ <a name="(line309)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j <a name="(line310)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>)</font> <a name="(line311)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf13 a b c d e f g h i j k l m<font color=Cyan>)</font>-<a name="(line312)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf13"</font> [] []+<a name="(line312)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf13"</font> [] [] <a name="(line313)"></a> <a name="(line314)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line315)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -349,7 +349,7 @@ <a name="(line347)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j <a name="(line348)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>)</font> <a name="(line349)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf14 a b c d e f g h i j k l m n<font color=Cyan>)</font>-<a name="(line350)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf14"</font> [] []+<a name="(line350)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf14"</font> [] [] <a name="(line351)"></a> <a name="(line352)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line353)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -390,7 +390,7 @@ <a name="(line388)"></a>          <font color=Cyan>,</font>HTypeable f<font color=Cyan>,</font>HTypeable g<font color=Cyan>,</font>HTypeable h<font color=Cyan>,</font>HTypeable i<font color=Cyan>,</font>HTypeable j <a name="(line389)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o<font color=Cyan>)</font> <a name="(line390)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf15 a b c d e f g h i j k l m n o<font color=Cyan>)</font>-<a name="(line391)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf15"</font> [] []+<a name="(line391)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf15"</font> [] [] <a name="(line392)"></a> <a name="(line393)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line394)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -433,7 +433,7 @@ <a name="(line431)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o <a name="(line432)"></a>          <font color=Cyan>,</font>HTypeable p<font color=Cyan>)</font> <a name="(line433)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf16 a b c d e f g h i j k l m n o p<font color=Cyan>)</font>-<a name="(line434)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf16"</font> [] []+<a name="(line434)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf16"</font> [] [] <a name="(line435)"></a> <a name="(line436)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line437)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -478,7 +478,7 @@ <a name="(line476)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o <a name="(line477)"></a>          <font color=Cyan>,</font>HTypeable p<font color=Cyan>,</font>HTypeable q<font color=Cyan>)</font> <a name="(line478)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf17 a b c d e f g h i j k l m n o p q<font color=Cyan>)</font>-<a name="(line479)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf17"</font> [] []+<a name="(line479)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf17"</font> [] [] <a name="(line480)"></a> <a name="(line481)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line482)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -525,7 +525,7 @@ <a name="(line523)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o <a name="(line524)"></a>          <font color=Cyan>,</font>HTypeable p<font color=Cyan>,</font>HTypeable q<font color=Cyan>,</font>HTypeable r<font color=Cyan>)</font> <a name="(line525)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf18 a b c d e f g h i j k l m n o p q r<font color=Cyan>)</font>-<a name="(line526)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf18"</font> [] []+<a name="(line526)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf18"</font> [] [] <a name="(line527)"></a> <a name="(line528)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line529)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -574,7 +574,7 @@ <a name="(line572)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o <a name="(line573)"></a>          <font color=Cyan>,</font>HTypeable p<font color=Cyan>,</font>HTypeable q<font color=Cyan>,</font>HTypeable r<font color=Cyan>,</font>HTypeable s<font color=Cyan>)</font> <a name="(line574)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf19 a b c d e f g h i j k l m n o p q r s<font color=Cyan>)</font>-<a name="(line575)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf19"</font> [] []+<a name="(line575)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf19"</font> [] [] <a name="(line576)"></a> <a name="(line577)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line578)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j@@ -624,7 +624,7 @@ <a name="(line622)"></a>          <font color=Cyan>,</font>HTypeable k<font color=Cyan>,</font>HTypeable l<font color=Cyan>,</font>HTypeable m<font color=Cyan>,</font>HTypeable n<font color=Cyan>,</font>HTypeable o <a name="(line623)"></a>          <font color=Cyan>,</font>HTypeable p<font color=Cyan>,</font>HTypeable q<font color=Cyan>,</font>HTypeable r<font color=Cyan>,</font>HTypeable s<font color=Cyan>,</font>HTypeable t<font color=Cyan>)</font> <a name="(line624)"></a>    <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>OneOf20 a b c d e f g h i j k l m n o p q r s t<font color=Cyan>)</font>-<a name="(line625)"></a>  <font color=Green><u>where</u></font>      toHType m <font color=Red>=</font> Defined <font color=Magenta>"OneOf20"</font> [] []+<a name="(line625)"></a>  <font color=Green><u>where</u></font>      toHType <font color=Green><u>_</u></font> <font color=Red>=</font> Defined <font color=Magenta>"OneOf20"</font> [] [] <a name="(line626)"></a> <a name="(line627)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font>XmlContent b<font color=Cyan>,</font>XmlContent c<font color=Cyan>,</font>XmlContent d<font color=Cyan>,</font>XmlContent e <a name="(line628)"></a>          <font color=Cyan>,</font>XmlContent f<font color=Cyan>,</font>XmlContent g<font color=Cyan>,</font>XmlContent h<font color=Cyan>,</font>XmlContent i<font color=Cyan>,</font>XmlContent j
docs/HaXml/src/Text/XML/HaXml/Posn.html view
@@ -44,7 +44,7 @@ <a name="(line42)"></a>posInNewCxt name pos <font color=Red>=</font> Pn name <font color=Magenta>1</font> <font color=Magenta>1</font> pos <a name="(line43)"></a> <a name="(line44)"></a><font color=Green><u>instance</u></font> Show Posn <font color=Green><u>where</u></font>-<a name="(line45)"></a>      showsPrec p <font color=Cyan>(</font>Pn f l c i<font color=Cyan>)</font> <font color=Red>=</font> showString f <font color=Cyan>.</font>+<a name="(line45)"></a>      showsPrec <font color=Green><u>_</u></font> <font color=Cyan>(</font>Pn f l c i<font color=Cyan>)</font> <font color=Red>=</font> showString f <font color=Cyan>.</font> <a name="(line46)"></a>                                 showString <font color=Magenta>"  at line "</font> <font color=Cyan>.</font> shows l <font color=Cyan>.</font> <a name="(line47)"></a>                                 showString <font color=Magenta>" col "</font> <font color=Cyan>.</font> shows c <font color=Cyan>.</font> <a name="(line48)"></a>                                 <font color=Cyan>(</font> <font color=Green><u>case</u></font> i <font color=Green><u>of</u></font>@@ -55,7 +55,7 @@ <a name="(line53)"></a><a name="forcep"></a><font color=Blue>-- | Just used to strictify the internal values of a position, to avoid</font> <a name="(line54)"></a><font color=Blue>--   space leaks.</font> <a name="(line55)"></a>forcep <font color=Red>::</font> Posn <font color=Red>-&gt;</font> Int-<a name="(line56)"></a>forcep <font color=Cyan>(</font>Pn f n m i<font color=Cyan>)</font> <font color=Red>=</font> m <font color=Cyan>`seq`</font> n+<a name="(line56)"></a>forcep <font color=Cyan>(</font>Pn <font color=Green><u>_</u></font> n m <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> m <font color=Cyan>`seq`</font> n <a name="(line57)"></a> <a name="(line58)"></a><a name="addcol"></a><font color=Blue>-- | Add n character positions to the given position.</font> <a name="(line59)"></a>addcol <font color=Red>::</font> Int <font color=Red>-&gt;</font> Posn <font color=Red>-&gt;</font> Posn@@ -63,7 +63,7 @@ <a name="(line61)"></a> <a name="(line62)"></a><a name="newline"></a><font color=Blue>-- | Add a newline or tab to the given position.</font> <a name="(line63)"></a>newline<font color=Cyan>,</font> tab <font color=Red>::</font> Posn <font color=Red>-&gt;</font> Posn-<a name="(line64)"></a>newline <font color=Cyan>(</font>Pn f r c i<font color=Cyan>)</font> <font color=Red>=</font> Pn f <font color=Cyan>(</font>r<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> <font color=Magenta>1</font> i+<a name="(line64)"></a>newline <font color=Cyan>(</font>Pn f r <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> Pn f <font color=Cyan>(</font>r<font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font> <font color=Magenta>1</font> i <a name="(line65)"></a><a name="tab"></a>tab     <font color=Cyan>(</font>Pn f r c i<font color=Cyan>)</font> <font color=Red>=</font> Pn f r <font color=Cyan>(</font><font color=Cyan>(</font><font color=Cyan>(</font>c<font color=Cyan>`div`</font><font color=Magenta>8</font><font color=Cyan>)</font><font color=Cyan>+</font><font color=Magenta>1</font><font color=Cyan>)</font><font color=Cyan>*</font><font color=Magenta>8</font><font color=Cyan>)</font> i <a name="(line66)"></a> <a name="(line67)"></a><a name="white"></a><font color=Blue>-- | Add the given whitespace char to the given position.</font>
docs/HaXml/src/Text/XML/HaXml/Pretty.html view
@@ -30,234 +30,273 @@ <a name="(line28)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ <a name="(line29)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types <a name="(line30)"></a>-<a name="(line31)"></a><a name="either"></a>either f g <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> f x-<a name="(line32)"></a>either f g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x-<a name="(line33)"></a>-<a name="(line34)"></a><a name="maybe"></a>maybe f Nothing  <font color=Red>=</font> empty-<a name="(line35)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x-<a name="(line36)"></a>-<a name="(line37)"></a><font color=Blue>--peref p   = text "%" &lt;&gt; text p &lt;&gt; text ";"</font>+<a name="(line31)"></a><a name="either"></a>either <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-&gt;</font> t1<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>t2 <font color=Red>-&gt;</font> t1<font color=Cyan>)</font> <font color=Red>-&gt;</font> Either t t2 <font color=Red>-&gt;</font> t1+<a name="(line32)"></a>either f <font color=Green><u>_</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> f x+<a name="(line33)"></a>either <font color=Green><u>_</u></font> g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x+<a name="(line34)"></a>+<a name="(line35)"></a><a name="maybe"></a>maybe <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-&gt;</font> Doc<font color=Cyan>)</font> <font color=Red>-&gt;</font> Maybe t <font color=Red>-&gt;</font> Doc+<a name="(line36)"></a>maybe <font color=Green><u>_</u></font> Nothing  <font color=Red>=</font> empty+<a name="(line37)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x <a name="(line38)"></a>-<a name="(line39)"></a><font color=Blue>----</font>+<a name="(line39)"></a><font color=Blue>--peref p   = text "%" &lt;&gt; text p &lt;&gt; text ";"</font> <a name="(line40)"></a>-<a name="(line41)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Doc-<a name="(line42)"></a><a name="prolog"></a>prolog   <font color=Red>::</font> Prolog <font color=Red>-&gt;</font> Doc-<a name="(line43)"></a><a name="xmldecl"></a>xmldecl  <font color=Red>::</font> XMLDecl <font color=Red>-&gt;</font> Doc-<a name="(line44)"></a><a name="misc"></a>misc     <font color=Red>::</font> Misc <font color=Red>-&gt;</font> Doc-<a name="(line45)"></a><a name="sddecl"></a>sddecl   <font color=Red>::</font> Bool <font color=Red>-&gt;</font> Doc-<a name="(line46)"></a>-<a name="(line47)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Doc-<a name="(line48)"></a><a name="markupdecl"></a>markupdecl  <font color=Red>::</font> MarkupDecl <font color=Red>-&gt;</font> Doc-<a name="(line49)"></a><a name="extsubset"></a>extsubset   <font color=Red>::</font> ExtSubset <font color=Red>-&gt;</font> Doc-<a name="(line50)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> ExtSubsetDecl <font color=Red>-&gt;</font> Doc-<a name="(line51)"></a><a name="cp"></a>cp          <font color=Red>::</font> CP <font color=Red>-&gt;</font> Doc-<a name="(line52)"></a>-<a name="(line53)"></a><a name="element"></a>element   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> Doc-<a name="(line54)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> Doc                     <font color=Cyan>--etc</font>-<a name="(line55)"></a><a name="content"></a>content   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> Doc-<a name="(line56)"></a>-<a name="(line57)"></a><font color=Blue>----</font>+<a name="(line41)"></a><font color=Blue>----</font>+<a name="(line42)"></a>+<a name="(line43)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Doc+<a name="(line44)"></a><a name="prolog"></a>prolog   <font color=Red>::</font> Prolog <font color=Red>-&gt;</font> Doc+<a name="(line45)"></a><a name="xmldecl"></a>xmldecl  <font color=Red>::</font> XMLDecl <font color=Red>-&gt;</font> Doc+<a name="(line46)"></a><a name="misc"></a>misc     <font color=Red>::</font> Misc <font color=Red>-&gt;</font> Doc+<a name="(line47)"></a><a name="sddecl"></a>sddecl   <font color=Red>::</font> Bool <font color=Red>-&gt;</font> Doc+<a name="(line48)"></a>+<a name="(line49)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Doc+<a name="(line50)"></a><a name="markupdecl"></a>markupdecl  <font color=Red>::</font> MarkupDecl <font color=Red>-&gt;</font> Doc+<a name="(line51)"></a><a name="extsubset"></a>extsubset   <font color=Red>::</font> ExtSubset <font color=Red>-&gt;</font> Doc+<a name="(line52)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> ExtSubsetDecl <font color=Red>-&gt;</font> Doc+<a name="(line53)"></a><a name="cp"></a>cp          <font color=Red>::</font> CP <font color=Red>-&gt;</font> Doc+<a name="(line54)"></a>+<a name="(line55)"></a><a name="element"></a>element   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> Doc+<a name="(line56)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> Doc                     <font color=Cyan>--etc</font>+<a name="(line57)"></a><a name="content"></a>content   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> Doc <a name="(line58)"></a>-<a name="(line59)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>map misc m<font color=Cyan>)</font>-<a name="(line60)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>-<a name="(line61)"></a>                             vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line62)"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>-<a name="(line63)"></a>                             vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>-<a name="(line64)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font>   <font color=Red>=</font> text <font color=Magenta>"&lt;?xml version='"</font> <font color=Cyan>&lt;&gt;</font> text v <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line65)"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>-<a name="(line66)"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>-<a name="(line67)"></a>                             text <font color=Magenta>"?&gt;"</font>-<a name="(line68)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!--"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"--&gt;"</font>-<a name="(line69)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"&lt;?"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"?&gt;"</font>-<a name="(line70)"></a>sddecl sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>-<a name="(line71)"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>-<a name="(line72)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font> -<a name="(line73)"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>-<a name="(line74)"></a>                             <font color=Green><u>else</u></font> hd <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>-<a name="(line75)"></a>                                  vcat <font color=Cyan>(</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]&gt;"</font>-<a name="(line76)"></a>                           <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"&lt;!DOCTYPE"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line77)"></a>                                      maybe externalid eid-<a name="(line78)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e-<a name="(line79)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a-<a name="(line80)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e-<a name="(line81)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n-<a name="(line82)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m-<a name="(line83)"></a><font color=Blue>--markupdecl (MarkupPE p m)  = peref p</font>-<a name="(line84)"></a>extsubset <font color=Cyan>(</font>ExtSubset t ds<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan>$$</font>-<a name="(line85)"></a>                             vcat <font color=Cyan>(</font>map extsubsetdecl ds<font color=Cyan>)</font>-<a name="(line86)"></a>extsubsetdecl <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font>      <font color=Red>=</font> markupdecl m-<a name="(line87)"></a>extsubsetdecl <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c-<a name="(line88)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e)   = peref p</font>-<a name="(line89)"></a>-<a name="(line90)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line91)"></a>                         fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"/&gt;"</font>-<a name="(line92)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>-<a name="(line93)"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>-<a name="(line94)"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>-<a name="(line95)"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>-<a name="(line96)"></a>    <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line97)"></a>                         text <font color=Magenta>"&gt;"</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map content cs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line98)"></a>                         text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>-<a name="(line99)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty-<a name="(line100)"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c-<a name="(line101)"></a>-<a name="(line102)"></a><a name="isText"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True-<a name="(line103)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> True-<a name="(line104)"></a>isText <font color=Green><u>_</u></font>               <font color=Red>=</font> False-<a name="(line105)"></a>-<a name="(line106)"></a><a name="carryelem"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c-<a name="(line107)"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>-<a name="(line108)"></a>                           text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>-<a name="(line109)"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>-<a name="(line110)"></a>carryelem e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c-<a name="(line111)"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>-<a name="(line112)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font>  <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>-<a name="(line113)"></a>                          <font color=Green><u>in</u></font>-<a name="(line114)"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>-<a name="(line115)"></a>                            text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line116)"></a>                            nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> <font color=Blue>--- $$</font>-<a name="(line117)"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n-<a name="(line118)"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>-<a name="(line119)"></a><a name="carrycontent"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> carryelem e c-<a name="(line120)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line121)"></a>carrycontent <font color=Cyan>(</font>CString True  s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line122)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c    <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line123)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line124)"></a>-<a name="(line125)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>c<font color=Red>-&gt;</font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> c <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>-<a name="(line126)"></a>carryscan f []     c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>-<a name="(line127)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c-<a name="(line128)"></a>                           <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0-<a name="(line129)"></a>                       <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>-<a name="(line130)"></a>-<a name="(line131)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>-<a name="(line132)"></a><font color=Blue>--  | isText (head cs) =</font>-<a name="(line133)"></a><font color=Blue>--        ( start &lt;&gt;</font>-<a name="(line134)"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>-<a name="(line135)"></a><font color=Blue>--        , text "&gt;")</font>-<a name="(line136)"></a><font color=Blue>--  | otherwise =</font>-<a name="(line137)"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>-<a name="(line138)"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>-<a name="(line139)"></a><font color=Blue>--        , text "&gt;")</font>-<a name="(line140)"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>-<a name="(line141)"></a><font color=Blue>--</font>-<a name="(line142)"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>-<a name="(line143)"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>-<a name="(line144)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>-<a name="(line145)"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>-<a name="(line146)"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>-<a name="(line147)"></a>-<a name="(line148)"></a>-<a name="(line149)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>             <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;&gt;</font> attvalue v-<a name="(line150)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e-<a name="(line151)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s-<a name="(line152)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> cdsect s-<a name="(line153)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r-<a name="(line154)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m-<a name="(line155)"></a>-<a name="(line156)"></a><a name="elementdecl"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ELEMENT"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line157)"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>-<a name="(line158)"></a><a name="contentspec"></a>contentspec EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>-<a name="(line159)"></a>contentspec ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>-<a name="(line160)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m-<a name="(line161)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c-<a name="(line162)"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>-<a name="(line163)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>text n<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> modifier m-<a name="(line164)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line165)"></a>                           modifier m-<a name="(line166)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font>          <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line167)"></a>                           modifier m-<a name="(line168)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>-<a name="(line169)"></a>modifier None          <font color=Red>=</font> empty-<a name="(line170)"></a>modifier Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>-<a name="(line171)"></a>modifier Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>-<a name="(line172)"></a>modifier Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>-<a name="(line173)"></a><a name="mixed"></a>mixed  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>-<a name="(line174)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line175)"></a>                         hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line176)"></a>                         text <font color=Magenta>")*"</font>-<a name="(line177)"></a>-<a name="(line178)"></a><a name="attlistdecl"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ATTLIST"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line179)"></a>                                 fsep <font color=Cyan>(</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>-<a name="(line180)"></a><a name="attdef"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>          <font color=Red>=</font> text n <font color=Cyan>&lt;+&gt;</font> atttype t <font color=Cyan>&lt;+&gt;</font> defaultdecl d-<a name="(line181)"></a><a name="atttype"></a>atttype  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>-<a name="(line182)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t-<a name="(line183)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t-<a name="(line184)"></a><a name="tokenizedtype"></a>tokenizedtype ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>-<a name="(line185)"></a>tokenizedtype IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>-<a name="(line186)"></a>tokenizedtype IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>-<a name="(line187)"></a>tokenizedtype ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>-<a name="(line188)"></a>tokenizedtype ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>-<a name="(line189)"></a>tokenizedtype NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>-<a name="(line190)"></a>tokenizedtype NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>-<a name="(line191)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n-<a name="(line192)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e-<a name="(line193)"></a><a name="notationtype"></a>notationtype ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line194)"></a>                                 parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line195)"></a><a name="enumeration"></a>enumeration ns                 <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line196)"></a><a name="defaultdecl"></a>defaultdecl  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>-<a name="(line197)"></a>defaultdecl  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>-<a name="(line198)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font>    <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan>&lt;+&gt;</font> attvalue a-<a name="(line199)"></a><a name="conditionalsect"></a>conditionalsect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Red>=</font> text <font color=Magenta>"&lt;![INCLUDE ["</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line200)"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>-<a name="(line201)"></a>conditionalsect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![IGNORE ["</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line202)"></a>                                 fsep <font color=Cyan>(</font>map ignoresectcontents i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>-<a name="(line203)"></a><a name="ignore"></a>ignore <font color=Cyan>(</font>Ignore<font color=Cyan>)</font>                <font color=Red>=</font> empty-<a name="(line204)"></a><a name="ignoresectcontents"></a>ignoresectcontents <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>-<a name="(line205)"></a>                               <font color=Red>=</font> ignore i <font color=Cyan>&lt;+&gt;</font> vcat <font color=Cyan>(</font>map internal is<font color=Cyan>)</font>-<a name="(line206)"></a>                          <font color=Green><u>where</u></font> internal <font color=Cyan>(</font>ics<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![["</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line207)"></a>                                                   ignoresectcontents ics <font color=Cyan>&lt;+&gt;</font>-<a name="(line208)"></a>                                                   text <font color=Magenta>"]]&gt;"</font> <font color=Cyan>&lt;+&gt;</font> ignore i-<a name="(line209)"></a><a name="reference"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er-<a name="(line210)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr-<a name="(line211)"></a><a name="entityref"></a>entityref n                    <font color=Red>=</font> text <font color=Magenta>"&amp;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>-<a name="(line212)"></a><a name="charref"></a>charref c                      <font color=Red>=</font> text <font color=Magenta>"&amp;#"</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>-<a name="(line213)"></a><a name="entitydecl"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d-<a name="(line214)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d-<a name="(line215)"></a><a name="gedecl"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> entitydef ed <font color=Cyan>&lt;&gt;</font>-<a name="(line216)"></a>                                 text <font color=Magenta>"&gt;"</font>-<a name="(line217)"></a><a name="pedecl"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY %"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> pedef pd <font color=Cyan>&lt;&gt;</font>-<a name="(line218)"></a>                                 text <font color=Magenta>"&gt;"</font>-<a name="(line219)"></a><a name="entitydef"></a>entitydef <font color=Cyan>(</font>DefEntityValue ev<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ev-<a name="(line220)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan>&lt;+&gt;</font> maybe ndatadecl nd-<a name="(line221)"></a><a name="pedef"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ev-<a name="(line222)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid-<a name="(line223)"></a><a name="externalid"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font>         <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan>&lt;+&gt;</font> systemliteral sl-<a name="(line224)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font>       <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral i <font color=Cyan>&lt;+&gt;</font>-<a name="(line225)"></a>                                 systemliteral sl-<a name="(line226)"></a><a name="ndatadecl"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan>&lt;+&gt;</font> text n-<a name="(line227)"></a><a name="textdecl"></a>textdecl <font color=Cyan>(</font>TextDecl vi ed<font color=Cyan>)</font>      <font color=Red>=</font> text <font color=Magenta>"&lt;?xml"</font> <font color=Cyan>&lt;+&gt;</font> maybe text vi <font color=Cyan>&lt;+&gt;</font>-<a name="(line228)"></a>                                 encodingdecl ed <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"?&gt;"</font>-<a name="(line229)"></a><a name="extparsedent"></a>extparsedent <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font><font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font> content c-<a name="(line230)"></a><a name="extpe"></a>extpe <font color=Cyan>(</font>ExtPE t esd<font color=Cyan>)</font>            <font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font>-<a name="(line231)"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl esd<font color=Cyan>)</font>-<a name="(line232)"></a><a name="notationdecl"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>    <font color=Red>=</font> text <font color=Magenta>"&lt;!NOTATION"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line233)"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>-<a name="(line234)"></a>                                 text <font color=Magenta>"&gt;"</font>-<a name="(line235)"></a><a name="publicid"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>          <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral p-<a name="(line236)"></a><a name="encodingdecl"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>-<a name="(line237)"></a><a name="nmtoken"></a>nmtoken s                      <font color=Red>=</font> text s-<a name="(line238)"></a><a name="attvalue"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font>        <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line239)"></a>                                 hcat <font color=Cyan>(</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line240)"></a>                                 text <font color=Magenta>"\""</font>-<a name="(line241)"></a><a name="entityvalue"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>-<a name="(line242)"></a>  <font color=Red>|</font> containsDoubleQuote evs    <font color=Red>=</font> text <font color=Magenta>"'"</font>  <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>-<a name="(line243)"></a>  <font color=Red>|</font> otherwise                  <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>-<a name="(line244)"></a><a name="ev"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s-<a name="(line245)"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>-<a name="(line246)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r-<a name="(line247)"></a><a name="pubidliteral"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>-<a name="(line248)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>-<a name="(line249)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>-<a name="(line250)"></a><a name="systemliteral"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>-<a name="(line251)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>-<a name="(line252)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>-<a name="(line253)"></a><a name="chardata"></a>chardata s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s-<a name="(line254)"></a><a name="cdsect"></a>cdsect c                       <font color=Red>=</font> text <font color=Magenta>"&lt;![CDATA["</font> <font color=Cyan>&lt;&gt;</font> chardata c <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"]]&gt;"</font>-<a name="(line255)"></a>-<a name="(line256)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>-<a name="(line257)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs-<a name="(line258)"></a>    <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s-<a name="(line259)"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False+<a name="(line59)"></a><font color=Blue>----</font>+<a name="(line60)"></a>+<a name="(line61)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>map misc m<font color=Cyan>)</font>+<a name="(line62)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>+<a name="(line63)"></a>                             vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>+<a name="(line64)"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>+<a name="(line65)"></a>                             vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>+<a name="(line66)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font>   <font color=Red>=</font> text <font color=Magenta>"&lt;?xml version='"</font> <font color=Cyan>&lt;&gt;</font> text v <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line67)"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>+<a name="(line68)"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>+<a name="(line69)"></a>                             text <font color=Magenta>"?&gt;"</font>+<a name="(line70)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!--"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"--&gt;"</font>+<a name="(line71)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"&lt;?"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"?&gt;"</font>+<a name="(line72)"></a>sddecl sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>+<a name="(line73)"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>+<a name="(line74)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font>+<a name="(line75)"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>+<a name="(line76)"></a>                             <font color=Green><u>else</u></font> hd <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>+<a name="(line77)"></a>                                  vcat <font color=Cyan>(</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]&gt;"</font>+<a name="(line78)"></a>                           <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"&lt;!DOCTYPE"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line79)"></a>                                      maybe externalid eid+<a name="(line80)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e+<a name="(line81)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a+<a name="(line82)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e+<a name="(line83)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n+<a name="(line84)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m+<a name="(line85)"></a><font color=Blue>-- markupdecl (MarkupPE p m)  = peref p</font>+<a name="(line86)"></a>extsubset <font color=Cyan>(</font>ExtSubset t ds<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan>$$</font>+<a name="(line87)"></a>                             vcat <font color=Cyan>(</font>map extsubsetdecl ds<font color=Cyan>)</font>+<a name="(line88)"></a><a name="extmarkupdecl"></a>extmarkupdecl <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font>      <font color=Red>=</font> markupdecl m+<a name="(line89)"></a>extsubsetdecl <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c+<a name="(line90)"></a><font color=Blue>-- extsubsetdecl (ExtPEReference p e)   = peref p</font>+<a name="(line91)"></a>+<a name="(line92)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line93)"></a>                         fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"/&gt;"</font>+<a name="(line94)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>+<a name="(line95)"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>+<a name="(line96)"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>+<a name="(line97)"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>+<a name="(line98)"></a>    <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line99)"></a>                         text <font color=Magenta>"&gt;"</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map content cs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line100)"></a>                         text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>+<a name="(line101)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty+<a name="(line102)"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c+<a name="(line103)"></a>+<a name="(line104)"></a><a name="isText"></a>isText <font color=Red>::</font> Content t <font color=Red>-&gt;</font> Bool+<a name="(line105)"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True+<a name="(line106)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> True+<a name="(line107)"></a>isText <font color=Green><u>_</u></font>               <font color=Red>=</font> False+<a name="(line108)"></a>+<a name="(line109)"></a><a name="carryelem"></a>carryelem <font color=Red>::</font> Element t <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> <font color=Cyan>(</font>Doc<font color=Cyan>,</font> Doc<font color=Cyan>)</font>+<a name="(line110)"></a><a name="carrycontent"></a>carrycontent <font color=Red>::</font>  Content t <font color=Red>-&gt;</font> Doc <font color=Red>-&gt;</font> <font color=Cyan>(</font>Doc<font color=Cyan>,</font> Doc<font color=Cyan>)</font>+<a name="(line111)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c+<a name="(line112)"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>+<a name="(line113)"></a>                           text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>+<a name="(line114)"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>+<a name="(line115)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c+<a name="(line116)"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>+<a name="(line117)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font>  <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>+<a name="(line118)"></a>                          <font color=Green><u>in</u></font>+<a name="(line119)"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>+<a name="(line120)"></a>                            text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>+<a name="(line121)"></a>                            nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> <font color=Blue>--- $$</font>+<a name="(line122)"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n+<a name="(line123)"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>+<a name="(line124)"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> carryelem e c+<a name="(line125)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line126)"></a>carrycontent <font color=Cyan>(</font>CString True  s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line127)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c    <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line128)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line129)"></a>+<a name="(line130)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>c<font color=Red>-&gt;</font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> c <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>+<a name="(line131)"></a>carryscan <font color=Green><u>_</u></font> []     c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>+<a name="(line132)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c+<a name="(line133)"></a>                           <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0+<a name="(line134)"></a>                       <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>+<a name="(line135)"></a>+<a name="(line136)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>+<a name="(line137)"></a><font color=Blue>--  | isText (head cs) =</font>+<a name="(line138)"></a><font color=Blue>--        ( start &lt;&gt;</font>+<a name="(line139)"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>+<a name="(line140)"></a><font color=Blue>--        , text "&gt;")</font>+<a name="(line141)"></a><font color=Blue>--  | otherwise =</font>+<a name="(line142)"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>+<a name="(line143)"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>+<a name="(line144)"></a><font color=Blue>--        , text "&gt;")</font>+<a name="(line145)"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>+<a name="(line146)"></a><font color=Blue>--</font>+<a name="(line147)"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>+<a name="(line148)"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>+<a name="(line149)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>+<a name="(line150)"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>+<a name="(line151)"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>+<a name="(line152)"></a>+<a name="(line153)"></a>+<a name="(line154)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>             <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;&gt;</font> attvalue v+<a name="(line155)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e+<a name="(line156)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s+<a name="(line157)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> cdsect s+<a name="(line158)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r+<a name="(line159)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m+<a name="(line160)"></a>+<a name="(line161)"></a><a name="elementdecl"></a>elementdecl <font color=Red>::</font> ElementDecl <font color=Red>-&gt;</font> Doc+<a name="(line162)"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ELEMENT"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line163)"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>+<a name="(line164)"></a><a name="contentspec"></a>contentspec <font color=Red>::</font> ContentSpec <font color=Red>-&gt;</font> Doc+<a name="(line165)"></a>contentspec EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>+<a name="(line166)"></a>contentspec ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>+<a name="(line167)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m+<a name="(line168)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c+<a name="(line169)"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>+<a name="(line170)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>text n<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> modifier m+<a name="(line171)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line172)"></a>                           modifier m+<a name="(line173)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font>          <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line174)"></a>                           modifier m+<a name="(line175)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>+<a name="(line176)"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-&gt;</font> Doc+<a name="(line177)"></a>modifier None          <font color=Red>=</font> empty+<a name="(line178)"></a>modifier Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>+<a name="(line179)"></a>modifier Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>+<a name="(line180)"></a>modifier Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>+<a name="(line181)"></a><a name="mixed"></a>mixed <font color=Red>::</font> Mixed <font color=Red>-&gt;</font> Doc+<a name="(line182)"></a>mixed  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>+<a name="(line183)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line184)"></a>                         hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line185)"></a>                         text <font color=Magenta>")*"</font>+<a name="(line186)"></a>+<a name="(line187)"></a><a name="attlistdecl"></a>attlistdecl <font color=Red>::</font> AttListDecl <font color=Red>-&gt;</font> Doc+<a name="(line188)"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ATTLIST"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line189)"></a>                                 fsep <font color=Cyan>(</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>+<a name="(line190)"></a><a name="attdef"></a>attdef <font color=Red>::</font> AttDef <font color=Red>-&gt;</font> Doc+<a name="(line191)"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>          <font color=Red>=</font> text n <font color=Cyan>&lt;+&gt;</font> atttype t <font color=Cyan>&lt;+&gt;</font> defaultdecl d+<a name="(line192)"></a><a name="atttype"></a>atttype <font color=Red>::</font> AttType <font color=Red>-&gt;</font> Doc+<a name="(line193)"></a>atttype  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>+<a name="(line194)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t+<a name="(line195)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t+<a name="(line196)"></a><a name="tokenizedtype"></a>tokenizedtype <font color=Red>::</font> TokenizedType <font color=Red>-&gt;</font> Doc+<a name="(line197)"></a>tokenizedtype ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>+<a name="(line198)"></a>tokenizedtype IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>+<a name="(line199)"></a>tokenizedtype IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>+<a name="(line200)"></a>tokenizedtype ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>+<a name="(line201)"></a>tokenizedtype ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>+<a name="(line202)"></a>tokenizedtype NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>+<a name="(line203)"></a>tokenizedtype NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>+<a name="(line204)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Red>::</font> EnumeratedType <font color=Red>-&gt;</font> Doc+<a name="(line205)"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n+<a name="(line206)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e+<a name="(line207)"></a><a name="notationtype"></a>notationtype <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> Doc+<a name="(line208)"></a>notationtype ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line209)"></a>                                 parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line210)"></a><a name="enumeration"></a>enumeration <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> Doc+<a name="(line211)"></a>enumeration ns                 <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line212)"></a><a name="defaultdecl"></a>defaultdecl <font color=Red>::</font> DefaultDecl <font color=Red>-&gt;</font> Doc+<a name="(line213)"></a>defaultdecl  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>+<a name="(line214)"></a>defaultdecl  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>+<a name="(line215)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font>    <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan>&lt;+&gt;</font> attvalue a+<a name="(line216)"></a><a name="conditionalsect"></a>conditionalsect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Red>=</font> text <font color=Magenta>"&lt;![INCLUDE ["</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line217)"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>+<a name="(line218)"></a>conditionalsect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![IGNORE ["</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line219)"></a>                                 fsep <font color=Cyan>(</font>map ignoresectcontents i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>+<a name="(line220)"></a><a name="ignore"></a>ignore <font color=Cyan>(</font>Ignore<font color=Cyan>)</font>                <font color=Red>=</font> empty+<a name="(line221)"></a><a name="ignoresectcontents"></a>ignoresectcontents <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>+<a name="(line222)"></a>                               <font color=Red>=</font> ignore i <font color=Cyan>&lt;+&gt;</font> vcat <font color=Cyan>(</font>map internal is<font color=Cyan>)</font>+<a name="(line223)"></a>                          <font color=Green><u>where</u></font> internal <font color=Cyan>(</font>ics<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![["</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line224)"></a>                                                   ignoresectcontents ics <font color=Cyan>&lt;+&gt;</font>+<a name="(line225)"></a>                                                   text <font color=Magenta>"]]&gt;"</font> <font color=Cyan>&lt;+&gt;</font> ignore i+<a name="(line226)"></a><a name="reference"></a>reference <font color=Red>::</font> Reference <font color=Red>-&gt;</font> Doc+<a name="(line227)"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er+<a name="(line228)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr+<a name="(line229)"></a><a name="entityref"></a>entityref <font color=Red>::</font> String <font color=Red>-&gt;</font> Doc+<a name="(line230)"></a>entityref n                    <font color=Red>=</font> text <font color=Magenta>"&amp;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>+<a name="(line231)"></a><a name="charref"></a>charref <font color=Red>::</font> <font color=Cyan>(</font>Show a<font color=Cyan>)</font> <font color=Red>=&gt;</font> a <font color=Red>-&gt;</font> Doc+<a name="(line232)"></a>charref c                      <font color=Red>=</font> text <font color=Magenta>"&amp;#"</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>+<a name="(line233)"></a><a name="entitydecl"></a>entitydecl <font color=Red>::</font> EntityDecl <font color=Red>-&gt;</font> Doc+<a name="(line234)"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d+<a name="(line235)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d+<a name="(line236)"></a><a name="gedecl"></a>gedecl <font color=Red>::</font> GEDecl <font color=Red>-&gt;</font> Doc+<a name="(line237)"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> entitydef ed <font color=Cyan>&lt;&gt;</font>+<a name="(line238)"></a>                                 text <font color=Magenta>"&gt;"</font>+<a name="(line239)"></a><a name="pedecl"></a>pedecl <font color=Red>::</font> PEDecl <font color=Red>-&gt;</font> Doc+<a name="(line240)"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY %"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> pedef pd <font color=Cyan>&lt;&gt;</font>+<a name="(line241)"></a>                                 text <font color=Magenta>"&gt;"</font>+<a name="(line242)"></a><a name="entitydef"></a>entitydef <font color=Red>::</font> EntityDef <font color=Red>-&gt;</font> Doc+<a name="(line243)"></a>entitydef <font color=Cyan>(</font>DefEntityValue ew<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ew+<a name="(line244)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan>&lt;+&gt;</font> maybe ndatadecl nd+<a name="(line245)"></a><a name="pedef"></a>pedef <font color=Red>::</font> PEDef <font color=Red>-&gt;</font> Doc+<a name="(line246)"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ew<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ew+<a name="(line247)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid+<a name="(line248)"></a><a name="externalid"></a>externalid <font color=Red>::</font> ExternalID <font color=Red>-&gt;</font> Doc+<a name="(line249)"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font>         <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan>&lt;+&gt;</font> systemliteral sl+<a name="(line250)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font>       <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral i <font color=Cyan>&lt;+&gt;</font>+<a name="(line251)"></a>                                 systemliteral sl+<a name="(line252)"></a><a name="ndatadecl"></a>ndatadecl <font color=Red>::</font> NDataDecl <font color=Red>-&gt;</font> Doc+<a name="(line253)"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan>&lt;+&gt;</font> text n+<a name="(line254)"></a><a name="textdecl"></a>textdecl <font color=Cyan>(</font>TextDecl vi ed<font color=Cyan>)</font>      <font color=Red>=</font> text <font color=Magenta>"&lt;?xml"</font> <font color=Cyan>&lt;+&gt;</font> maybe text vi <font color=Cyan>&lt;+&gt;</font>+<a name="(line255)"></a>                                 encodingdecl ed <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"?&gt;"</font>+<a name="(line256)"></a><a name="extparsedent"></a>extparsedent <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font><font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font> content c+<a name="(line257)"></a><a name="extpe"></a>extpe <font color=Cyan>(</font>ExtPE t esd<font color=Cyan>)</font>            <font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font>+<a name="(line258)"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl esd<font color=Cyan>)</font>+<a name="(line259)"></a><a name="notationdecl"></a>notationdecl <font color=Red>::</font> NotationDecl <font color=Red>-&gt;</font> Doc+<a name="(line260)"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>    <font color=Red>=</font> text <font color=Magenta>"&lt;!NOTATION"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line261)"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>+<a name="(line262)"></a>                                 text <font color=Magenta>"&gt;"</font>+<a name="(line263)"></a><a name="publicid"></a>publicid <font color=Red>::</font> PublicID <font color=Red>-&gt;</font> Doc+<a name="(line264)"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>          <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral p+<a name="(line265)"></a><a name="encodingdecl"></a>encodingdecl <font color=Red>::</font> EncodingDecl <font color=Red>-&gt;</font> Doc+<a name="(line266)"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>+<a name="(line267)"></a><a name="nmtoken"></a>nmtoken <font color=Red>::</font> String <font color=Red>-&gt;</font> Doc+<a name="(line268)"></a>nmtoken s                      <font color=Red>=</font> text s+<a name="(line269)"></a><a name="attvalue"></a>attvalue <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> Doc+<a name="(line270)"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font>        <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line271)"></a>                                 hcat <font color=Cyan>(</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line272)"></a>                                 text <font color=Magenta>"\""</font>+<a name="(line273)"></a><a name="entityvalue"></a>entityvalue <font color=Red>::</font> EntityValue <font color=Red>-&gt;</font> Doc+<a name="(line274)"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>+<a name="(line275)"></a>  <font color=Red>|</font> containsDoubleQuote evs    <font color=Red>=</font> text <font color=Magenta>"'"</font>  <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>+<a name="(line276)"></a>  <font color=Red>|</font> otherwise                  <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>+<a name="(line277)"></a><a name="ev"></a>ev <font color=Red>::</font> EV <font color=Red>-&gt;</font> Doc+<a name="(line278)"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s+<a name="(line279)"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>+<a name="(line280)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r+<a name="(line281)"></a><a name="pubidliteral"></a>pubidliteral <font color=Red>::</font> PubidLiteral <font color=Red>-&gt;</font> Doc+<a name="(line282)"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>+<a name="(line283)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>+<a name="(line284)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>+<a name="(line285)"></a><a name="systemliteral"></a>systemliteral <font color=Red>::</font> SystemLiteral <font color=Red>-&gt;</font> Doc+<a name="(line286)"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>+<a name="(line287)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>+<a name="(line288)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>+<a name="(line289)"></a><a name="chardata"></a>chardata <font color=Red>::</font> String <font color=Red>-&gt;</font> Doc+<a name="(line290)"></a>chardata s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s+<a name="(line291)"></a><a name="cdsect"></a>cdsect <font color=Red>::</font> String <font color=Red>-&gt;</font> Doc+<a name="(line292)"></a>cdsect c                       <font color=Red>=</font> text <font color=Magenta>"&lt;![CDATA["</font> <font color=Cyan>&lt;&gt;</font> chardata c <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"]]&gt;"</font>+<a name="(line293)"></a>+<a name="(line294)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>+<a name="(line295)"></a>containsDoubleQuote <font color=Red>::</font> <font color=Red>[</font>EV<font color=Red>]</font> <font color=Red>-&gt;</font> Bool+<a name="(line296)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs+<a name="(line297)"></a>    <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s+<a name="(line298)"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False </pre> </html>
docs/HaXml/src/Text/XML/HaXml/SAX.html view
@@ -37,8 +37,8 @@ <a name="(line35)"></a>	 <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>SaxElement<font color=Red>]</font><font color=Cyan>,</font>Maybe String<font color=Cyan>)</font> <a name="(line36)"></a>		<font color=Blue>-- ^ A tuple of the parsed elements and @Nothing@, if no</font> <a name="(line37)"></a>		<font color=Blue>--   error occured, or @Just@ @String@ if an error occured.</font>-<a name="(line38)"></a>saxParse file content <font color=Red>=</font> parseStream sax emptySTs-<a name="(line39)"></a>                                    <font color=Cyan>(</font>xmlLex file content<font color=Cyan>)</font>+<a name="(line38)"></a>saxParse file cntnt <font color=Red>=</font> parseStream sax emptySTs+<a name="(line39)"></a>                                    <font color=Cyan>(</font>xmlLex file cntnt<font color=Cyan>)</font> <a name="(line40)"></a> <a name="(line41)"></a><a name="parseStream"></a>parseStream <font color=Red>::</font> Parser s t a <font color=Red>-&gt;</font> s <font color=Red>-&gt;</font> <font color=Red>[</font>t<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>a<font color=Red>]</font><font color=Cyan>,</font> Maybe String<font color=Cyan>)</font> <a name="(line42)"></a>parseStream <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> [] <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>Nothing<font color=Cyan>)</font>@@ -80,13 +80,13 @@ <a name="(line78)"></a>saxcomment <font color=Red>=</font> comment <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxComment <a name="(line79)"></a> <a name="(line80)"></a><a name="saxchardata"></a>saxchardata <font color=Red>::</font> XParser SaxElement-<a name="(line81)"></a>saxchardata <font color=Red>=</font> +<a name="(line81)"></a>saxchardata <font color=Red>=</font> <a name="(line82)"></a>  <font color=Cyan>(</font>cdsect <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxCharData<font color=Cyan>)</font> <a name="(line83)"></a>  <font color=Cyan>`onFail`</font> <a name="(line84)"></a>  <font color=Cyan>(</font>chardata <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxCharData<font color=Cyan>)</font> <a name="(line85)"></a> <a name="(line86)"></a><a name="saxreference"></a>saxreference <font color=Red>::</font> XParser SaxElement-<a name="(line87)"></a>saxreference <font color=Red>=</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxReference	+<a name="(line87)"></a>saxreference <font color=Red>=</font> reference <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxReference <a name="(line88)"></a> <a name="(line89)"></a><a name="saxdoctypedecl"></a>saxdoctypedecl <font color=Red>::</font> XParser SaxElement <a name="(line90)"></a>saxdoctypedecl <font color=Red>=</font> doctypedecl <font color=Cyan>&gt;&gt;=</font> return <font color=Cyan>.</font> SaxDocTypeDecl
docs/HaXml/src/Text/XML/HaXml/ShowXmlLazy.html view
@@ -1,283 +1,331 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html>-<pre><a name="(line1)"></a>-<a name="(line2)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ShowXmlLazy <font color=Cyan>(</font>showXmlLazy<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line3)"></a>-<a name="(line4)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types-<a name="(line5)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping-<a name="(line6)"></a>-<a name="(line7)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent <font color=Green><u>as</u></font> X-<a name="(line8)"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>maybe<font color=Cyan>,</font>either<font color=Cyan>)</font>-<a name="(line9)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>-<a name="(line10)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List-<a name="(line11)"></a>-<a name="(line12)"></a><a name="showXmlLazy"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (without DTD).                                         </font>-<a name="(line13)"></a>showXmlLazy <font color=Red>::</font> X<font color=Cyan>.</font>XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> String-<a name="(line14)"></a>showXmlLazy dtd x <font color=Red>=</font>-<a name="(line15)"></a>    <font color=Green><u>case</u></font> X<font color=Cyan>.</font>toContents x <font color=Green><u>of</u></font>-<a name="(line16)"></a>      <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> document <font color=Cyan>$</font> toXmlLazy dtd x-<a name="(line17)"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Magenta>""</font>+<pre><a name="(line1)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ShowXmlLazy <font color=Cyan>(</font>showXmlLazy<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line2)"></a>+<a name="(line3)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types+<a name="(line4)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping <font color=Blue>-- (toHType, toDTD, Tuple(), Defined, showHType)</font>+<a name="(line5)"></a>+<a name="(line6)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent <font color=Green><u>as</u></font> X+<a name="(line7)"></a><font color=Green><u>import</u></font> Prelude hiding <font color=Cyan>(</font>maybe<font color=Cyan>,</font>either<font color=Cyan>)</font>+<a name="(line8)"></a><font color=Green><u>import</u></font> Maybe hiding <font color=Cyan>(</font>maybe<font color=Cyan>)</font>+<a name="(line9)"></a><font color=Green><u>import</u></font> Data<font color=Cyan>.</font>List+<a name="(line10)"></a>+<a name="(line11)"></a><a name="showXmlLazy"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (without DTD).</font>+<a name="(line12)"></a>showXmlLazy <font color=Red>::</font> X<font color=Cyan>.</font>XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> String+<a name="(line13)"></a>showXmlLazy dtd x <font color=Red>=</font>+<a name="(line14)"></a>    <font color=Green><u>case</u></font> X<font color=Cyan>.</font>toContents x <font color=Green><u>of</u></font>+<a name="(line15)"></a>      <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> document <font color=Cyan>$</font> toXmlLazy dtd x+<a name="(line16)"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Magenta>""</font>+<a name="(line17)"></a> <a name="(line18)"></a>-<a name="(line19)"></a>-<a name="(line20)"></a><a name="toXmlLazy"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (with or without DTD).                                 </font>-<a name="(line21)"></a>toXmlLazy <font color=Red>::</font> X<font color=Cyan>.</font>XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Document ()-<a name="(line22)"></a>toXmlLazy dtd value <font color=Red>=</font>-<a name="(line23)"></a>    <font color=Green><u>let</u></font> ht <font color=Red>=</font> toHType value <font color=Green><u>in</u></font>-<a name="(line24)"></a>    Document <font color=Cyan>(</font>Prolog <font color=Cyan>(</font>Just <font color=Cyan>(</font>XMLDecl <font color=Magenta>"1.0"</font> Nothing Nothing<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line25)"></a>                     [] <font color=Cyan>(</font><font color=Green><u>if</u></font> dtd <font color=Green><u>then</u></font> Just <font color=Cyan>(</font>toDTD ht<font color=Cyan>)</font> <font color=Green><u>else</u></font> Nothing<font color=Cyan>)</font> []<font color=Cyan>)</font>-<a name="(line26)"></a>             emptyST-<a name="(line27)"></a>             <font color=Cyan>(</font> <font color=Green><u>case</u></font> <font color=Cyan>(</font>ht<font color=Cyan>,</font> X<font color=Cyan>.</font>toContents value<font color=Cyan>)</font> <font color=Green><u>of</u></font>-<a name="(line28)"></a>                 <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font>       <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> [] cs-<a name="(line29)"></a>                 <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> [] cs-<a name="(line30)"></a>                 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Red>[</font>CElem e ()<font color=Red>]</font><font color=Cyan>)</font>   <font color=Red>-&gt;</font> e <font color=Cyan>)</font>-<a name="(line31)"></a>             []+<a name="(line19)"></a><a name="toXmlLazy"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (with or without DTD).</font>+<a name="(line20)"></a>toXmlLazy <font color=Red>::</font> X<font color=Cyan>.</font>XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Document ()+<a name="(line21)"></a>toXmlLazy dtd value <font color=Red>=</font>+<a name="(line22)"></a>    <font color=Green><u>let</u></font> ht <font color=Red>=</font> toHType value <font color=Green><u>in</u></font>+<a name="(line23)"></a>    Document <font color=Cyan>(</font>Prolog <font color=Cyan>(</font>Just <font color=Cyan>(</font>XMLDecl <font color=Magenta>"1.0"</font> Nothing Nothing<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line24)"></a>                     [] <font color=Cyan>(</font><font color=Green><u>if</u></font> dtd <font color=Green><u>then</u></font> Just <font color=Cyan>(</font>toDTD ht<font color=Cyan>)</font> <font color=Green><u>else</u></font> Nothing<font color=Cyan>)</font> []<font color=Cyan>)</font>+<a name="(line25)"></a>             emptyST+<a name="(line26)"></a>             <font color=Cyan>(</font> <font color=Green><u>case</u></font> <font color=Cyan>(</font>ht<font color=Cyan>,</font> X<font color=Cyan>.</font>toContents value<font color=Cyan>)</font> <font color=Green><u>of</u></font>+<a name="(line27)"></a>                 <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font>       <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> [] cs+<a name="(line28)"></a>                 <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> [] cs+<a name="(line29)"></a>                 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Red>[</font>CElem e ()<font color=Red>]</font><font color=Cyan>)</font>   <font color=Red>-&gt;</font> e <font color=Cyan>)</font>+<a name="(line30)"></a>             []+<a name="(line31)"></a> <a name="(line32)"></a> <a name="(line33)"></a> <a name="(line34)"></a>-<a name="(line35)"></a>-<a name="(line36)"></a><a name="Doc"></a><font color=Green><u>type</u></font> Doc <font color=Red>=</font> String-<a name="(line37)"></a><a name="empty"></a>empty <font color=Red>=</font> <font color=Magenta>""</font>-<a name="(line38)"></a><a name="$$"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> a b <font color=Red>=</font> a <font color=Cyan>++</font> <font color=Magenta>"\n"</font> <font color=Cyan>++</font> b-<a name="(line39)"></a><a name="vcat"></a>vcat a <font color=Red>=</font> foldr <font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> [] a-<a name="(line40)"></a><a name="hcat"></a>hcat <font color=Red>=</font> concat-<a name="(line41)"></a><a name="<>"></a><font color=Cyan>(</font><font color=Cyan>&lt;&gt;</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Cyan>)</font>-<a name="(line42)"></a><a name="<+>"></a><font color=Cyan>(</font><font color=Cyan>&lt;+&gt;</font><font color=Cyan>)</font> a b <font color=Red>=</font> a <font color=Cyan>++</font> <font color=Magenta>" "</font> <font color=Cyan>++</font> b-<a name="(line43)"></a><a name="fsep"></a>fsep <font color=Red>=</font> vcat-<a name="(line44)"></a><a name="text"></a>text string <font color=Red>=</font> string-<a name="(line45)"></a><a name="parens"></a>parens string <font color=Red>=</font> <font color=Magenta>"("</font><font color=Cyan>++</font>string<font color=Cyan>++</font><font color=Magenta>")"</font>-<a name="(line46)"></a><a name="nest"></a>nest <font color=Green><u>_</u></font> string <font color=Red>=</font> string-<a name="(line47)"></a>-<a name="(line48)"></a>-<a name="(line49)"></a>-<a name="(line50)"></a><a name="either"></a>either f g <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> f x-<a name="(line51)"></a>either f g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x-<a name="(line52)"></a>-<a name="(line53)"></a><a name="maybe"></a>maybe f Nothing  <font color=Red>=</font> empty-<a name="(line54)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x-<a name="(line55)"></a>-<a name="(line56)"></a><font color=Blue>--peref p   = text "%" &lt;&gt; text p &lt;&gt; text ";"</font>+<a name="(line35)"></a><a name="Doc"></a><font color=Green><u>type</u></font> Doc <font color=Red>=</font> String+<a name="(line36)"></a><a name="empty"></a>empty <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line37)"></a>empty <font color=Red>=</font> <font color=Magenta>""</font>+<a name="(line38)"></a><a name="$$"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line39)"></a><font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> a b <font color=Red>=</font> a <font color=Cyan>++</font> <font color=Magenta>"\n"</font> <font color=Cyan>++</font> b+<a name="(line40)"></a><a name="vcat"></a>vcat <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line41)"></a>vcat a <font color=Red>=</font> foldr <font color=Cyan>(</font><font color=Cyan>$$</font><font color=Cyan>)</font> [] a+<a name="(line42)"></a><a name="hcat"></a>hcat <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>a<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font>+<a name="(line43)"></a>hcat <font color=Red>=</font> concat+<a name="(line44)"></a><a name="<>"></a><font color=Cyan>(</font><font color=Cyan>&lt;&gt;</font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font>+<a name="(line45)"></a><font color=Cyan>(</font><font color=Cyan>&lt;&gt;</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Cyan>)</font>+<a name="(line46)"></a><a name="<+>"></a><font color=Cyan>(</font><font color=Cyan>&lt;+&gt;</font><font color=Cyan>)</font> <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line47)"></a><font color=Cyan>(</font><font color=Cyan>&lt;+&gt;</font><font color=Cyan>)</font> a b <font color=Red>=</font> a <font color=Cyan>++</font> <font color=Magenta>" "</font> <font color=Cyan>++</font> b+<a name="(line48)"></a><a name="fsep"></a>fsep <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line49)"></a>fsep <font color=Red>=</font> vcat+<a name="(line50)"></a><a name="text"></a>text <font color=Red>::</font> t <font color=Red>-&gt;</font> t+<a name="(line51)"></a>text string <font color=Red>=</font> string+<a name="(line52)"></a><a name="parens"></a>parens <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line53)"></a>parens string <font color=Red>=</font> <font color=Magenta>"("</font><font color=Cyan>++</font>string<font color=Cyan>++</font><font color=Magenta>")"</font>+<a name="(line54)"></a><a name="nest"></a>nest <font color=Red>::</font> t <font color=Red>-&gt;</font> t1 <font color=Red>-&gt;</font> t1+<a name="(line55)"></a>nest <font color=Green><u>_</u></font> string <font color=Red>=</font> string+<a name="(line56)"></a> <a name="(line57)"></a>-<a name="(line58)"></a><font color=Blue>----</font>-<a name="(line59)"></a>-<a name="(line60)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Doc-<a name="(line61)"></a><a name="prolog"></a>prolog   <font color=Red>::</font> Prolog <font color=Red>-&gt;</font> Doc-<a name="(line62)"></a><a name="xmldecl"></a>xmldecl  <font color=Red>::</font> XMLDecl <font color=Red>-&gt;</font> Doc-<a name="(line63)"></a><a name="misc"></a>misc     <font color=Red>::</font> Misc <font color=Red>-&gt;</font> Doc-<a name="(line64)"></a><a name="sddecl"></a>sddecl   <font color=Red>::</font> Bool <font color=Red>-&gt;</font> Doc-<a name="(line65)"></a>-<a name="(line66)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Doc-<a name="(line67)"></a><a name="markupdecl"></a>markupdecl  <font color=Red>::</font> MarkupDecl <font color=Red>-&gt;</font> Doc-<a name="(line68)"></a><a name="extsubset"></a>extsubset   <font color=Red>::</font> ExtSubset <font color=Red>-&gt;</font> Doc-<a name="(line69)"></a><a name="extsubsetdecl"></a>extsubsetdecl <font color=Red>::</font> ExtSubsetDecl <font color=Red>-&gt;</font> Doc-<a name="(line70)"></a><a name="cp"></a>cp          <font color=Red>::</font> CP <font color=Red>-&gt;</font> Doc-<a name="(line71)"></a>-<a name="(line72)"></a><a name="element"></a>element   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> Doc-<a name="(line73)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> Doc                     <font color=Cyan>--etc</font>-<a name="(line74)"></a><a name="content"></a>content   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> Doc-<a name="(line75)"></a>-<a name="(line76)"></a><font color=Blue>----</font>-<a name="(line77)"></a>-<a name="(line78)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>map misc m<font color=Cyan>)</font>-<a name="(line79)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>-<a name="(line80)"></a>                             vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line81)"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>-<a name="(line82)"></a>                             vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>-<a name="(line83)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font>   <font color=Red>=</font> text <font color=Magenta>"&lt;?xml version='"</font> <font color=Cyan>&lt;&gt;</font> text v <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line84)"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>-<a name="(line85)"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>-<a name="(line86)"></a>                             text <font color=Magenta>"?&gt;"</font>-<a name="(line87)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!--"</font> <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"--&gt;"</font>-<a name="(line88)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"&lt;?"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"?&gt;"</font>-<a name="(line89)"></a>sddecl sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>-<a name="(line90)"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>-<a name="(line91)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font> -<a name="(line92)"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>-<a name="(line93)"></a>                             <font color=Green><u>else</u></font> hd <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>-<a name="(line94)"></a>                                  vcat <font color=Cyan>(</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]&gt;"</font>-<a name="(line95)"></a>                           <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"&lt;!DOCTYPE"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line96)"></a>                                      maybe externalid eid-<a name="(line97)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e-<a name="(line98)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a-<a name="(line99)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e-<a name="(line100)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n-<a name="(line101)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m-<a name="(line102)"></a><font color=Blue>--markupdecl (MarkupPE p m)  = peref p</font>-<a name="(line103)"></a>extsubset <font color=Cyan>(</font>ExtSubset t ds<font color=Cyan>)</font> <font color=Red>=</font> maybe textdecl t <font color=Cyan>$$</font>-<a name="(line104)"></a>                             vcat <font color=Cyan>(</font>map extsubsetdecl ds<font color=Cyan>)</font>-<a name="(line105)"></a>extsubsetdecl <font color=Cyan>(</font>ExtMarkupDecl m<font color=Cyan>)</font>      <font color=Red>=</font> markupdecl m-<a name="(line106)"></a>extsubsetdecl <font color=Cyan>(</font>ExtConditionalSect c<font color=Cyan>)</font> <font color=Red>=</font> conditionalsect c-<a name="(line107)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e)   = peref p</font>-<a name="(line108)"></a>-<a name="(line109)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line110)"></a>                         fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"/&gt;"</font>-<a name="(line111)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>-<a name="(line112)"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>-<a name="(line113)"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>-<a name="(line114)"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>-<a name="(line115)"></a>    <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line116)"></a>                         text <font color=Magenta>"&gt;"</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map content cs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line117)"></a>                         text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>-<a name="(line118)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty-<a name="(line119)"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c-<a name="(line120)"></a>-<a name="(line121)"></a><a name="isText"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True-<a name="(line122)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> True-<a name="(line123)"></a>isText <font color=Green><u>_</u></font>               <font color=Red>=</font> False-<a name="(line124)"></a>-<a name="(line125)"></a><a name="carryelem"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c-<a name="(line126)"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>-<a name="(line127)"></a>                           text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>-<a name="(line128)"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>-<a name="(line129)"></a>carryelem e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c-<a name="(line130)"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>-<a name="(line131)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font>  <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>-<a name="(line132)"></a>                          <font color=Green><u>in</u></font>-<a name="(line133)"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>-<a name="(line134)"></a>                            text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>-<a name="(line135)"></a>                            nest <font color=Magenta>2</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> <font color=Blue>--- $$</font>-<a name="(line136)"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n-<a name="(line137)"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>-<a name="(line138)"></a><a name="carrycontent"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> carryelem e c-<a name="(line139)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line140)"></a>carrycontent <font color=Cyan>(</font>CString True  s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line141)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c    <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line142)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>-<a name="(line143)"></a>-<a name="(line144)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>c<font color=Red>-&gt;</font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> c <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>-<a name="(line145)"></a>carryscan f []     c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>-<a name="(line146)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c-<a name="(line147)"></a>                           <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0-<a name="(line148)"></a>                       <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>-<a name="(line149)"></a>-<a name="(line150)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>-<a name="(line151)"></a><font color=Blue>--  | isText (head cs) =</font>-<a name="(line152)"></a><font color=Blue>--        ( start &lt;&gt;</font>-<a name="(line153)"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>-<a name="(line154)"></a><font color=Blue>--        , text "&gt;")</font>-<a name="(line155)"></a><font color=Blue>--  | otherwise =</font>-<a name="(line156)"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>-<a name="(line157)"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>-<a name="(line158)"></a><font color=Blue>--        , text "&gt;")</font>-<a name="(line159)"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>-<a name="(line160)"></a><font color=Blue>--</font>-<a name="(line161)"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>-<a name="(line162)"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>-<a name="(line163)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>-<a name="(line164)"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>-<a name="(line165)"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>-<a name="(line166)"></a>-<a name="(line167)"></a>-<a name="(line168)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>             <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;&gt;</font> attvalue v-<a name="(line169)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e-<a name="(line170)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s-<a name="(line171)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> cdsect s-<a name="(line172)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r-<a name="(line173)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m-<a name="(line174)"></a>-<a name="(line175)"></a><a name="elementdecl"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ELEMENT"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line176)"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>-<a name="(line177)"></a><a name="contentspec"></a>contentspec EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>-<a name="(line178)"></a>contentspec ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>-<a name="(line179)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m-<a name="(line180)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c-<a name="(line181)"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>-<a name="(line182)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font>       <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> modifier m-<a name="(line183)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line184)"></a>                           modifier m-<a name="(line185)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font>          <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line186)"></a>                           modifier m-<a name="(line187)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>-<a name="(line188)"></a>modifier None          <font color=Red>=</font> empty-<a name="(line189)"></a>modifier Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>-<a name="(line190)"></a>modifier Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>-<a name="(line191)"></a>modifier Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>-<a name="(line192)"></a><a name="mixed"></a>mixed  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>-<a name="(line193)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line194)"></a>                         hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line195)"></a>                         text <font color=Magenta>")*"</font>-<a name="(line196)"></a>-<a name="(line197)"></a><a name="attlistdecl"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ATTLIST"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line198)"></a>                                 fsep <font color=Cyan>(</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>-<a name="(line199)"></a><a name="attdef"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>          <font color=Red>=</font> text n <font color=Cyan>&lt;+&gt;</font> atttype t <font color=Cyan>&lt;+&gt;</font> defaultdecl d-<a name="(line200)"></a><a name="atttype"></a>atttype  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>-<a name="(line201)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t-<a name="(line202)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t-<a name="(line203)"></a><a name="tokenizedtype"></a>tokenizedtype ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>-<a name="(line204)"></a>tokenizedtype IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>-<a name="(line205)"></a>tokenizedtype IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>-<a name="(line206)"></a>tokenizedtype ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>-<a name="(line207)"></a>tokenizedtype ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>-<a name="(line208)"></a>tokenizedtype NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>-<a name="(line209)"></a>tokenizedtype NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>-<a name="(line210)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n-<a name="(line211)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e-<a name="(line212)"></a><a name="notationtype"></a>notationtype ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line213)"></a>                                 parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line214)"></a><a name="enumeration"></a>enumeration ns                 <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line215)"></a><a name="defaultdecl"></a>defaultdecl  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>-<a name="(line216)"></a>defaultdecl  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>-<a name="(line217)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font>    <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan>&lt;+&gt;</font> attvalue a-<a name="(line218)"></a><a name="conditionalsect"></a>conditionalsect <font color=Cyan>(</font>IncludeSect i<font color=Cyan>)</font><font color=Red>=</font> text <font color=Magenta>"&lt;![INCLUDE ["</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line219)"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>-<a name="(line220)"></a>conditionalsect <font color=Cyan>(</font>IgnoreSect i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![IGNORE ["</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line221)"></a>                                 fsep <font color=Cyan>(</font>map ignoresectcontents i<font color=Cyan>)</font> <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"]]&gt;"</font>-<a name="(line222)"></a><a name="ignore"></a>ignore <font color=Cyan>(</font>Ignore<font color=Cyan>)</font>                <font color=Red>=</font> empty-<a name="(line223)"></a><a name="ignoresectcontents"></a>ignoresectcontents <font color=Cyan>(</font>IgnoreSectContents i is<font color=Cyan>)</font>-<a name="(line224)"></a>                               <font color=Red>=</font> ignore i <font color=Cyan>&lt;+&gt;</font> vcat <font color=Cyan>(</font>map internal is<font color=Cyan>)</font>-<a name="(line225)"></a>                          <font color=Green><u>where</u></font> internal <font color=Cyan>(</font>ics<font color=Cyan>,</font>i<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;![["</font> <font color=Cyan>&lt;+&gt;</font>-<a name="(line226)"></a>                                                   ignoresectcontents ics <font color=Cyan>&lt;+&gt;</font>-<a name="(line227)"></a>                                                   text <font color=Magenta>"]]&gt;"</font> <font color=Cyan>&lt;+&gt;</font> ignore i-<a name="(line228)"></a><a name="reference"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er-<a name="(line229)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr-<a name="(line230)"></a><a name="entityref"></a>entityref n                    <font color=Red>=</font> text <font color=Magenta>"&amp;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>-<a name="(line231)"></a><a name="charref"></a>charref c                      <font color=Red>=</font> text <font color=Magenta>"&amp;#"</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>-<a name="(line232)"></a><a name="entitydecl"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d-<a name="(line233)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d-<a name="(line234)"></a><a name="gedecl"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> entitydef ed <font color=Cyan>&lt;&gt;</font>-<a name="(line235)"></a>                                 text <font color=Magenta>"&gt;"</font>-<a name="(line236)"></a><a name="pedecl"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY %"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> pedef pd <font color=Cyan>&lt;&gt;</font>-<a name="(line237)"></a>                                 text <font color=Magenta>"&gt;"</font>-<a name="(line238)"></a><a name="entitydef"></a>entitydef <font color=Cyan>(</font>DefEntityValue ev<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ev-<a name="(line239)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan>&lt;+&gt;</font> maybe ndatadecl nd-<a name="(line240)"></a><a name="pedef"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ev-<a name="(line241)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid-<a name="(line242)"></a><a name="externalid"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font>         <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan>&lt;+&gt;</font> systemliteral sl-<a name="(line243)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font>       <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral i <font color=Cyan>&lt;+&gt;</font>-<a name="(line244)"></a>                                 systemliteral sl-<a name="(line245)"></a><a name="ndatadecl"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan>&lt;+&gt;</font> text n-<a name="(line246)"></a><a name="textdecl"></a>textdecl <font color=Cyan>(</font>TextDecl vi ed<font color=Cyan>)</font>      <font color=Red>=</font> text <font color=Magenta>"&lt;?xml"</font> <font color=Cyan>&lt;+&gt;</font> maybe text vi <font color=Cyan>&lt;+&gt;</font>-<a name="(line247)"></a>                                 encodingdecl ed <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"?&gt;"</font>-<a name="(line248)"></a><a name="extparsedent"></a>extparsedent <font color=Cyan>(</font>ExtParsedEnt t c<font color=Cyan>)</font><font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font> content c-<a name="(line249)"></a><a name="extpe"></a>extpe <font color=Cyan>(</font>ExtPE t esd<font color=Cyan>)</font>            <font color=Red>=</font> maybe textdecl t <font color=Cyan>&lt;+&gt;</font>-<a name="(line250)"></a>                                 vcat <font color=Cyan>(</font>map extsubsetdecl esd<font color=Cyan>)</font>-<a name="(line251)"></a><a name="notationdecl"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>    <font color=Red>=</font> text <font color=Magenta>"&lt;!NOTATION"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>-<a name="(line252)"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>-<a name="(line253)"></a>                                 text <font color=Magenta>"&gt;"</font>-<a name="(line254)"></a><a name="publicid"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>          <font color=Red>=</font> text <font color=Magenta>"PUBLICID"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral p-<a name="(line255)"></a><a name="encodingdecl"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>-<a name="(line256)"></a><a name="nmtoken"></a>nmtoken s                      <font color=Red>=</font> text s-<a name="(line257)"></a><a name="attvalue"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font>        <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line258)"></a>                                 hcat <font color=Cyan>(</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>-<a name="(line259)"></a>                                 text <font color=Magenta>"\""</font>-<a name="(line260)"></a><a name="entityvalue"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>-<a name="(line261)"></a>  <font color=Red>|</font> containsDoubleQuote evs    <font color=Red>=</font> text <font color=Magenta>"'"</font>  <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>-<a name="(line262)"></a>  <font color=Red>|</font> otherwise                  <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>-<a name="(line263)"></a><a name="ev"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s-<a name="(line264)"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>-<a name="(line265)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r-<a name="(line266)"></a><a name="pubidliteral"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>-<a name="(line267)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>-<a name="(line268)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>-<a name="(line269)"></a><a name="systemliteral"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>-<a name="(line270)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>-<a name="(line271)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>-<a name="(line272)"></a><a name="chardata"></a>chardata s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s-<a name="(line273)"></a><a name="cdsect"></a>cdsect c                       <font color=Red>=</font> text <font color=Magenta>"&lt;![CDATA["</font> <font color=Cyan>&lt;&gt;</font> chardata c <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"]]&gt;"</font>-<a name="(line274)"></a>-<a name="(line275)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>-<a name="(line276)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs-<a name="(line277)"></a>    <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s-<a name="(line278)"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False-<a name="(line279)"></a>+<a name="(line58)"></a>+<a name="(line59)"></a><a name="either"></a>either <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-&gt;</font> t1<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>t2 <font color=Red>-&gt;</font> t1<font color=Cyan>)</font> <font color=Red>-&gt;</font> Either t t2 <font color=Red>-&gt;</font> t1+<a name="(line60)"></a>either f <font color=Green><u>_</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> f x+<a name="(line61)"></a>either <font color=Green><u>_</u></font> g <font color=Cyan>(</font>Right x<font color=Cyan>)</font> <font color=Red>=</font> g x+<a name="(line62)"></a>+<a name="(line63)"></a><a name="maybe"></a>maybe <font color=Red>::</font> <font color=Cyan>(</font>t <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> Maybe t <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line64)"></a>maybe <font color=Green><u>_</u></font> Nothing  <font color=Red>=</font> empty+<a name="(line65)"></a>maybe f <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> f x+<a name="(line66)"></a>+<a name="(line67)"></a><font color=Blue>--peref p   = text "%" &lt;&gt; text p &lt;&gt; text ";"</font>+<a name="(line68)"></a>+<a name="(line69)"></a><font color=Blue>----</font>+<a name="(line70)"></a>+<a name="(line71)"></a><a name="document"></a>document <font color=Red>::</font> Document i <font color=Red>-&gt;</font> Doc+<a name="(line72)"></a><a name="prolog"></a>prolog   <font color=Red>::</font> Prolog <font color=Red>-&gt;</font> Doc+<a name="(line73)"></a><a name="xmldecl"></a>xmldecl  <font color=Red>::</font> XMLDecl <font color=Red>-&gt;</font> Doc+<a name="(line74)"></a><a name="misc"></a>misc     <font color=Red>::</font> Misc <font color=Red>-&gt;</font> Doc+<a name="(line75)"></a><a name="sddecl"></a>sddecl   <font color=Red>::</font> Bool <font color=Red>-&gt;</font> Doc+<a name="(line76)"></a>+<a name="(line77)"></a><a name="doctypedecl"></a>doctypedecl <font color=Red>::</font> DocTypeDecl <font color=Red>-&gt;</font> Doc+<a name="(line78)"></a><a name="markupdecl"></a>markupdecl  <font color=Red>::</font> MarkupDecl <font color=Red>-&gt;</font> Doc+<a name="(line79)"></a><a name="cp"></a><font color=Blue>-- extsubset   :: ExtSubset -&gt; Doc</font>+<a name="(line80)"></a><font color=Blue>-- extsubsetdecl :: ExtSubsetDecl -&gt; Doc</font>+<a name="(line81)"></a>cp          <font color=Red>::</font> CP <font color=Red>-&gt;</font> Doc+<a name="(line82)"></a>+<a name="(line83)"></a><a name="element"></a>element   <font color=Red>::</font> Element i <font color=Red>-&gt;</font> Doc+<a name="(line84)"></a><a name="attribute"></a>attribute <font color=Red>::</font> Attribute <font color=Red>-&gt;</font> Doc                     <font color=Cyan>--etc</font>+<a name="(line85)"></a><a name="content"></a>content   <font color=Red>::</font> Content i <font color=Red>-&gt;</font> Doc+<a name="(line86)"></a>+<a name="(line87)"></a><font color=Blue>----</font>+<a name="(line88)"></a>+<a name="(line89)"></a>document <font color=Cyan>(</font>Document p <font color=Green><u>_</u></font> e m<font color=Cyan>)</font><font color=Red>=</font> prolog p <font color=Cyan>$$</font> element e <font color=Cyan>$$</font> vcat <font color=Cyan>(</font>map misc m<font color=Cyan>)</font>+<a name="(line90)"></a>prolog <font color=Cyan>(</font>Prolog x m1 dtd m2<font color=Cyan>)</font><font color=Red>=</font> maybe xmldecl x <font color=Cyan>$$</font>+<a name="(line91)"></a>                             vcat <font color=Cyan>(</font>map misc m1<font color=Cyan>)</font> <font color=Cyan>$$</font>+<a name="(line92)"></a>                             maybe doctypedecl dtd <font color=Cyan>$$</font>+<a name="(line93)"></a>                             vcat <font color=Cyan>(</font>map misc m2<font color=Cyan>)</font>+<a name="(line94)"></a>xmldecl <font color=Cyan>(</font>XMLDecl v e sd<font color=Cyan>)</font>   <font color=Red>=</font> text <font color=Magenta>"&lt;?xml version='"</font> <font color=Cyan>&lt;&gt;</font> text v <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line95)"></a>                             maybe encodingdecl e <font color=Cyan>&lt;+&gt;</font>+<a name="(line96)"></a>                             maybe sddecl sd <font color=Cyan>&lt;+&gt;</font>+<a name="(line97)"></a>                             text <font color=Magenta>"?&gt;"</font>+<a name="(line98)"></a>misc <font color=Cyan>(</font>Comment s<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!--"</font> <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"--&gt;"</font>+<a name="(line99)"></a>misc <font color=Cyan>(</font>PI <font color=Cyan>(</font>n<font color=Cyan>,</font>s<font color=Cyan>)</font><font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"&lt;?"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> text s <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>"?&gt;"</font>+<a name="(line100)"></a>sddecl sd   <font color=Red>|</font> sd           <font color=Red>=</font> text <font color=Magenta>"standalone='yes'"</font>+<a name="(line101)"></a>            <font color=Red>|</font> otherwise    <font color=Red>=</font> text <font color=Magenta>"standalone='no'"</font>+<a name="(line102)"></a>doctypedecl <font color=Cyan>(</font>DTD n eid ds<font color=Cyan>)</font> <font color=Red>=</font> <font color=Green><u>if</u></font> null ds <font color=Green><u>then</u></font>+<a name="(line103)"></a>                                  hd <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>+<a name="(line104)"></a>                             <font color=Green><u>else</u></font> hd <font color=Cyan>&lt;+&gt;</font> text <font color=Magenta>" ["</font> <font color=Cyan>$$</font>+<a name="(line105)"></a>                                  vcat <font color=Cyan>(</font>map markupdecl ds<font color=Cyan>)</font> <font color=Cyan>$$</font> text <font color=Magenta>"]&gt;"</font>+<a name="(line106)"></a>                           <font color=Green><u>where</u></font> hd <font color=Red>=</font> text <font color=Magenta>"&lt;!DOCTYPE"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line107)"></a>                                      maybe externalid eid+<a name="(line108)"></a>markupdecl <font color=Cyan>(</font>Element e<font color=Cyan>)</font>     <font color=Red>=</font> elementdecl e+<a name="(line109)"></a>markupdecl <font color=Cyan>(</font>AttList a<font color=Cyan>)</font>     <font color=Red>=</font> attlistdecl a+<a name="(line110)"></a>markupdecl <font color=Cyan>(</font>Entity e<font color=Cyan>)</font>      <font color=Red>=</font> entitydecl e+<a name="(line111)"></a>markupdecl <font color=Cyan>(</font>Notation n<font color=Cyan>)</font>    <font color=Red>=</font> notationdecl n+<a name="(line112)"></a>markupdecl <font color=Cyan>(</font>MarkupMisc m<font color=Cyan>)</font>  <font color=Red>=</font> misc m+<a name="(line113)"></a><font color=Blue>--markupdecl (MarkupPE p m)  = peref p</font>+<a name="(line114)"></a><font color=Blue>-- _ (ExtSubset t ds) = maybe textdecl t $$</font>+<a name="(line115)"></a><font color=Blue>--                              vcat (map extsubsetdecl ds)</font>+<a name="(line116)"></a><font color=Blue>-- _ (ExtMarkupDecl m)      = markupdecl m</font>+<a name="(line117)"></a><font color=Blue>-- extsubsetdecl (ExtConditionalSect c) = conditionalsect c</font>+<a name="(line118)"></a><font color=Blue>--extsubsetdecl (ExtPEReference p e)   = peref p</font>+<a name="(line119)"></a>+<a name="(line120)"></a>element <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line121)"></a>                         fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"/&gt;"</font>+<a name="(line122)"></a>element e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font>+<a name="(line123)"></a><font color=Blue>--  | any isText cs    = text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as) &lt;&gt;</font>+<a name="(line124)"></a><font color=Blue>--                       text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt;</font>+<a name="(line125)"></a><font color=Blue>--                       text "&lt;/" &lt;&gt; text n &lt;&gt; text "&gt;"</font>+<a name="(line126)"></a>    <font color=Red>|</font> isText <font color=Cyan>(</font>head cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line127)"></a>                         text <font color=Magenta>"&gt;"</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map content cs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line128)"></a>                         text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>+<a name="(line129)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>d<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> carryelem e empty+<a name="(line130)"></a>                         <font color=Green><u>in</u></font> d <font color=Cyan>&lt;&gt;</font> c+<a name="(line131)"></a>+<a name="(line132)"></a><a name="isText"></a>isText <font color=Red>::</font> Content t <font color=Red>-&gt;</font> Bool+<a name="(line133)"></a>isText <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True+<a name="(line134)"></a>isText <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font>      <font color=Red>=</font> True+<a name="(line135)"></a>isText <font color=Green><u>_</u></font>               <font color=Red>=</font> False+<a name="(line136)"></a>+<a name="(line137)"></a><a name="carryelem"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> []<font color=Cyan>)</font> c+<a name="(line138)"></a>                       <font color=Red>=</font> <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>+<a name="(line139)"></a>                           text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font>+<a name="(line140)"></a>                         <font color=Cyan>,</font> text <font color=Magenta>"/&gt;"</font><font color=Cyan>)</font>+<a name="(line141)"></a>carryelem <font color=Cyan>(</font>Elem n <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> c+<a name="(line142)"></a><font color=Blue>--  | any isText cs    =  ( c &lt;&gt; element e, empty)</font>+<a name="(line143)"></a>    <font color=Red>|</font> otherwise        <font color=Red>=</font>  <font color=Green><u>let</u></font> <font color=Cyan>(</font>cs0<font color=Cyan>,</font>d0<font color=Cyan>)</font> <font color=Red>=</font> carryscan carrycontent cs <font color=Cyan>(</font>text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>+<a name="(line144)"></a>                          <font color=Green><u>in</u></font>+<a name="(line145)"></a>                          <font color=Cyan>(</font> c <font color=Cyan>&lt;&gt;</font>+<a name="(line146)"></a>                            text <font color=Magenta>"&lt;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> fsep <font color=Cyan>(</font>map attribute <font color=Green><u>as</u></font><font color=Cyan>)</font> <font color=Cyan>$$</font>+<a name="(line147)"></a>                            nest <font color=Cyan>(</font><font color=Magenta>2</font> <font color=Red>::</font> Int<font color=Cyan>)</font> <font color=Cyan>(</font>vcat cs0<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> <font color=Blue>--- $$</font>+<a name="(line148)"></a>                            d0 <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&lt;/"</font> <font color=Cyan>&lt;&gt;</font> text n+<a name="(line149)"></a>                          <font color=Cyan>,</font> text <font color=Magenta>"&gt;"</font><font color=Cyan>)</font>+<a name="(line150)"></a><a name="carrycontent"></a>carrycontent <font color=Red>::</font> Content t <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>,</font> <font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>)</font>+<a name="(line151)"></a>carryelem <font color=Red>::</font> Element t <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>,</font> <font color=Red>[</font>Char<font color=Red>]</font><font color=Cyan>)</font>+<a name="(line152)"></a>carrycontent <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> carryelem e c+<a name="(line153)"></a>carrycontent <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> chardata s<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line154)"></a>carrycontent <font color=Cyan>(</font>CString True  s <font color=Green><u>_</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> cdsect s<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line155)"></a>carrycontent <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font> c    <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> reference r<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line156)"></a>carrycontent <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font> c   <font color=Red>=</font> <font color=Cyan>(</font>c <font color=Cyan>&lt;&gt;</font> misc m<font color=Cyan>,</font> empty<font color=Cyan>)</font>+<a name="(line157)"></a>+<a name="(line158)"></a><a name="carryscan"></a>carryscan <font color=Red>::</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>c<font color=Red>-&gt;</font><font color=Cyan>(</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> c <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Red>[</font>b<font color=Red>]</font><font color=Cyan>,</font>c<font color=Cyan>)</font>+<a name="(line159)"></a>carryscan <font color=Green><u>_</u></font> []     c <font color=Red>=</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>c<font color=Cyan>)</font>+<a name="(line160)"></a>carryscan f <font color=Cyan>(</font>a<font color=Red><b>:</b></font><font color=Green><u>as</u></font><font color=Cyan>)</font> c <font color=Red>=</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>b<font color=Cyan>,</font> c0<font color=Cyan>)</font> <font color=Red>=</font> f a c+<a name="(line161)"></a>                           <font color=Cyan>(</font>bs<font color=Cyan>,</font>c1<font color=Cyan>)</font> <font color=Red>=</font> carryscan f <font color=Green><u>as</u></font> c0+<a name="(line162)"></a>                       <font color=Green><u>in</u></font> <font color=Cyan>(</font>b<font color=Red><b>:</b></font>bs<font color=Cyan>,</font> c1<font color=Cyan>)</font>+<a name="(line163)"></a>+<a name="(line164)"></a><font color=Blue>--carryelem e@(Elem n as cs) c</font>+<a name="(line165)"></a><font color=Blue>--  | isText (head cs) =</font>+<a name="(line166)"></a><font color=Blue>--        ( start &lt;&gt;</font>+<a name="(line167)"></a><font color=Blue>--          text "&gt;" &lt;&gt; hcat (map content cs) &lt;&gt; text "&lt;/" &lt;&gt; text n</font>+<a name="(line168)"></a><font color=Blue>--        , text "&gt;")</font>+<a name="(line169)"></a><font color=Blue>--  | otherwise =</font>+<a name="(line170)"></a><font color=Blue>--        let (d,c0) = foldl carrycontent (start, text "&gt;") cs in</font>+<a name="(line171)"></a><font color=Blue>--        ( d &lt;&gt; c0 &lt;&gt; text "&lt;/" &lt;&gt; text n</font>+<a name="(line172)"></a><font color=Blue>--        , text "&gt;")</font>+<a name="(line173)"></a><font color=Blue>--  where start = c &lt;&gt; text "&lt;" &lt;&gt; text n &lt;+&gt; fsep (map attribute as)</font>+<a name="(line174)"></a><font color=Blue>--</font>+<a name="(line175)"></a><font color=Blue>--carrycontent (d,c) (CElem e)   = let (d',c') = carryelem e c in</font>+<a name="(line176)"></a><font color=Blue>--                                 (d $$ nest 2 d',       c')</font>+<a name="(line177)"></a><font color=Blue>--carrycontent (d,c) (CString _ s) = (d &lt;&gt; c &lt;&gt; chardata s, empty)</font>+<a name="(line178)"></a><font color=Blue>--carrycontent (d,c) (CRef r)    = (d &lt;&gt; c &lt;&gt; reference r,empty)</font>+<a name="(line179)"></a><font color=Blue>--carrycontent (d,c) (CMisc m)   = (d $$ c &lt;&gt; misc m,     empty)</font>+<a name="(line180)"></a>+<a name="(line181)"></a>+<a name="(line182)"></a>attribute <font color=Cyan>(</font>n<font color=Cyan>,</font>v<font color=Cyan>)</font>             <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"="</font> <font color=Cyan>&lt;&gt;</font> attvalue v+<a name="(line183)"></a>content <font color=Cyan>(</font>CElem e <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> element e+<a name="(line184)"></a>content <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> chardata s+<a name="(line185)"></a>content <font color=Cyan>(</font>CString True s <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> cdsect s+<a name="(line186)"></a>content <font color=Cyan>(</font>CRef r <font color=Green><u>_</u></font><font color=Cyan>)</font>          <font color=Red>=</font> reference r+<a name="(line187)"></a>content <font color=Cyan>(</font>CMisc m <font color=Green><u>_</u></font><font color=Cyan>)</font>         <font color=Red>=</font> misc m+<a name="(line188)"></a>+<a name="(line189)"></a><a name="elementdecl"></a>elementdecl <font color=Red>::</font> ElementDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line190)"></a>elementdecl <font color=Cyan>(</font>ElementDecl n cs<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ELEMENT"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line191)"></a>                                 contentspec cs <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>+<a name="(line192)"></a><a name="contentspec"></a>contentspec <font color=Red>::</font> ContentSpec <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line193)"></a>contentspec EMPTY              <font color=Red>=</font> text <font color=Magenta>"EMPTY"</font>+<a name="(line194)"></a>contentspec ANY                <font color=Red>=</font> text <font color=Magenta>"ANY"</font>+<a name="(line195)"></a>contentspec <font color=Cyan>(</font>Mixed m<font color=Cyan>)</font>          <font color=Red>=</font> mixed m+<a name="(line196)"></a>contentspec <font color=Cyan>(</font>ContentSpec c<font color=Cyan>)</font>    <font color=Red>=</font> cp c+<a name="(line197)"></a><font color=Blue>--contentspec (ContentPE p cs)   = peref p</font>+<a name="(line198)"></a>cp <font color=Cyan>(</font>TagName n m<font color=Cyan>)</font>       <font color=Red>=</font> text n <font color=Cyan>&lt;&gt;</font> modifier m+<a name="(line199)"></a>cp <font color=Cyan>(</font>Choice cs m<font color=Cyan>)</font>       <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line200)"></a>                           modifier m+<a name="(line201)"></a>cp <font color=Cyan>(</font>Seq cs m<font color=Cyan>)</font>          <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>","</font><font color=Cyan>)</font> <font color=Cyan>(</font>map cp cs<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line202)"></a>                           modifier m+<a name="(line203)"></a><a name="modifier"></a><font color=Blue>--cp (CPPE p c)          = peref p</font>+<a name="(line204)"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line205)"></a>modifier None          <font color=Red>=</font> empty+<a name="(line206)"></a>modifier Query         <font color=Red>=</font> text <font color=Magenta>"?"</font>+<a name="(line207)"></a>modifier Star          <font color=Red>=</font> text <font color=Magenta>"*"</font>+<a name="(line208)"></a>modifier Plus          <font color=Red>=</font> text <font color=Magenta>"+"</font>+<a name="(line209)"></a><a name="mixed"></a>mixed <font color=Red>::</font> Mixed <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line210)"></a>mixed  PCDATA          <font color=Red>=</font> text <font color=Magenta>"(#PCDATA)"</font>+<a name="(line211)"></a>mixed <font color=Cyan>(</font>PCDATAplus ns<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"(#PCDATA |"</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line212)"></a>                         hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line213)"></a>                         text <font color=Magenta>")*"</font>+<a name="(line214)"></a>+<a name="(line215)"></a><a name="attlistdecl"></a>attlistdecl <font color=Red>::</font> AttListDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line216)"></a>attlistdecl <font color=Cyan>(</font>AttListDecl n ds<font color=Cyan>)</font> <font color=Red>=</font> text <font color=Magenta>"&lt;!ATTLIST"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line217)"></a>                                 fsep <font color=Cyan>(</font>map attdef ds<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"&gt;"</font>+<a name="(line218)"></a><a name="attdef"></a>attdef <font color=Red>::</font> AttDef <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line219)"></a>attdef <font color=Cyan>(</font>AttDef n t d<font color=Cyan>)</font>          <font color=Red>=</font> text n <font color=Cyan>&lt;+&gt;</font> atttype t <font color=Cyan>&lt;+&gt;</font> defaultdecl d+<a name="(line220)"></a><a name="atttype"></a>atttype <font color=Red>::</font> AttType <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line221)"></a>atttype  StringType            <font color=Red>=</font> text <font color=Magenta>"CDATA"</font>+<a name="(line222)"></a>atttype <font color=Cyan>(</font>TokenizedType t<font color=Cyan>)</font>      <font color=Red>=</font> tokenizedtype t+<a name="(line223)"></a>atttype <font color=Cyan>(</font>EnumeratedType t<font color=Cyan>)</font>     <font color=Red>=</font> enumeratedtype t+<a name="(line224)"></a><a name="tokenizedtype"></a>tokenizedtype <font color=Red>::</font> TokenizedType <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line225)"></a>tokenizedtype ID               <font color=Red>=</font> text <font color=Magenta>"ID"</font>+<a name="(line226)"></a>tokenizedtype IDREF            <font color=Red>=</font> text <font color=Magenta>"IDREF"</font>+<a name="(line227)"></a>tokenizedtype IDREFS           <font color=Red>=</font> text <font color=Magenta>"IDREFS"</font>+<a name="(line228)"></a>tokenizedtype ENTITY           <font color=Red>=</font> text <font color=Magenta>"ENTITY"</font>+<a name="(line229)"></a>tokenizedtype ENTITIES         <font color=Red>=</font> text <font color=Magenta>"ENTITIES"</font>+<a name="(line230)"></a>tokenizedtype NMTOKEN          <font color=Red>=</font> text <font color=Magenta>"NMTOKEN"</font>+<a name="(line231)"></a>tokenizedtype NMTOKENS         <font color=Red>=</font> text <font color=Magenta>"NMTOKENS"</font>+<a name="(line232)"></a><a name="enumeratedtype"></a>enumeratedtype <font color=Red>::</font> EnumeratedType <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line233)"></a>enumeratedtype <font color=Cyan>(</font>NotationType n<font color=Cyan>)</font><font color=Red>=</font> notationtype n+<a name="(line234)"></a>enumeratedtype <font color=Cyan>(</font>Enumeration e<font color=Cyan>)</font> <font color=Red>=</font> enumeration e+<a name="(line235)"></a><a name="notationtype"></a>notationtype <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line236)"></a>notationtype ns                <font color=Red>=</font> text <font color=Magenta>"NOTATION"</font> <font color=Cyan>&lt;+&gt;</font>+<a name="(line237)"></a>                                 parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map text ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line238)"></a><a name="enumeration"></a>enumeration <font color=Red>::</font> <font color=Red>[</font><font color=Red>[</font>Char<font color=Red>]</font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line239)"></a>enumeration ns                 <font color=Red>=</font> parens <font color=Cyan>(</font>hcat <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>text <font color=Magenta>"|"</font><font color=Cyan>)</font> <font color=Cyan>(</font>map nmtoken ns<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line240)"></a><a name="defaultdecl"></a>defaultdecl <font color=Red>::</font> DefaultDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line241)"></a>defaultdecl  REQUIRED          <font color=Red>=</font> text <font color=Magenta>"#REQUIRED"</font>+<a name="(line242)"></a>defaultdecl  IMPLIED           <font color=Red>=</font> text <font color=Magenta>"#IMPLIED"</font>+<a name="(line243)"></a>defaultdecl <font color=Cyan>(</font>DefaultTo a f<font color=Cyan>)</font>    <font color=Red>=</font> maybe <font color=Cyan>(</font>const <font color=Cyan>(</font>text <font color=Magenta>"#FIXED"</font><font color=Cyan>)</font><font color=Cyan>)</font> f <font color=Cyan>&lt;+&gt;</font> attvalue a+<a name="(line244)"></a><a name="reference"></a><font color=Blue>-- _ (IncludeSect i)= text "&lt;![INCLUDE [" &lt;+&gt;</font>+<a name="(line245)"></a><font color=Blue>--                                  vcat (map extsubsetdecl i) &lt;+&gt; text "]]&gt;"</font>+<a name="(line246)"></a><font color=Blue>-- conditionalsect (IgnoreSect i) = text "&lt;![IGNORE [" &lt;+&gt;</font>+<a name="(line247)"></a><font color=Blue>--                                  fsep (map ignoresectcontents i) &lt;+&gt; text "]]&gt;"</font>+<a name="(line248)"></a><font color=Blue>-- _ (Ignore)                = empty</font>+<a name="(line249)"></a><font color=Blue>-- _ (IgnoreSectContents i is)</font>+<a name="(line250)"></a><font color=Blue>--                                = ignore i &lt;+&gt; vcat (map internal is)</font>+<a name="(line251)"></a><font color=Blue>--                           where internal (ics,i) = text "&lt;![[" &lt;+&gt;</font>+<a name="(line252)"></a><font color=Blue>--                                                    ignoresectcontents ics &lt;+&gt;</font>+<a name="(line253)"></a><font color=Blue>--                                                    text "]]&gt;" &lt;+&gt; ignore i</font>+<a name="(line254)"></a>reference <font color=Red>::</font> Reference <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line255)"></a>reference <font color=Cyan>(</font>RefEntity er<font color=Cyan>)</font>       <font color=Red>=</font> entityref er+<a name="(line256)"></a>reference <font color=Cyan>(</font>RefChar cr<font color=Cyan>)</font>         <font color=Red>=</font> charref cr+<a name="(line257)"></a><a name="entityref"></a>entityref <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line258)"></a>entityref n                    <font color=Red>=</font> text <font color=Magenta>"&amp;"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>+<a name="(line259)"></a><a name="charref"></a>charref <font color=Red>::</font> <font color=Cyan>(</font>Show a<font color=Cyan>)</font> <font color=Red>=&gt;</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line260)"></a>charref c                      <font color=Red>=</font> text <font color=Magenta>"&amp;#"</font> <font color=Cyan>&lt;&gt;</font> text <font color=Cyan>(</font>show c<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>";"</font>+<a name="(line261)"></a><a name="entitydecl"></a>entitydecl <font color=Red>::</font> EntityDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line262)"></a>entitydecl <font color=Cyan>(</font>EntityGEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> gedecl d+<a name="(line263)"></a>entitydecl <font color=Cyan>(</font>EntityPEDecl d<font color=Cyan>)</font>    <font color=Red>=</font> pedecl d+<a name="(line264)"></a><a name="gedecl"></a>gedecl <font color=Red>::</font> GEDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line265)"></a>gedecl <font color=Cyan>(</font>GEDecl n ed<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> entitydef ed <font color=Cyan>&lt;&gt;</font>+<a name="(line266)"></a>                                 text <font color=Magenta>"&gt;"</font>+<a name="(line267)"></a><a name="pedecl"></a>pedecl <font color=Red>::</font> PEDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line268)"></a>pedecl <font color=Cyan>(</font>PEDecl n pd<font color=Cyan>)</font>           <font color=Red>=</font> text <font color=Magenta>"&lt;!ENTITY %"</font> <font color=Cyan>&lt;&gt;</font> text n <font color=Cyan>&lt;+&gt;</font> pedef pd <font color=Cyan>&lt;&gt;</font>+<a name="(line269)"></a>                                 text <font color=Magenta>"&gt;"</font>+<a name="(line270)"></a><a name="entitydef"></a>entitydef <font color=Red>::</font> EntityDef <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line271)"></a>entitydef <font color=Cyan>(</font>DefEntityValue ew<font color=Cyan>)</font>  <font color=Red>=</font> entityvalue ew+<a name="(line272)"></a>entitydef <font color=Cyan>(</font>DefExternalID i nd<font color=Cyan>)</font> <font color=Red>=</font> externalid i <font color=Cyan>&lt;+&gt;</font> maybe ndatadecl nd+<a name="(line273)"></a><a name="pedef"></a>pedef <font color=Red>::</font> PEDef <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line274)"></a>pedef <font color=Cyan>(</font>PEDefEntityValue ew<font color=Cyan>)</font>    <font color=Red>=</font> entityvalue ew+<a name="(line275)"></a>pedef <font color=Cyan>(</font>PEDefExternalID eid<font color=Cyan>)</font>    <font color=Red>=</font> externalid eid+<a name="(line276)"></a><a name="externalid"></a>externalid <font color=Red>::</font> ExternalID <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line277)"></a>externalid <font color=Cyan>(</font>SYSTEM sl<font color=Cyan>)</font>         <font color=Red>=</font> text <font color=Magenta>"SYSTEM"</font> <font color=Cyan>&lt;+&gt;</font> systemliteral sl+<a name="(line278)"></a>externalid <font color=Cyan>(</font>PUBLIC i sl<font color=Cyan>)</font>       <font color=Red>=</font> text <font color=Magenta>"PUBLIC"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral i <font color=Cyan>&lt;+&gt;</font>+<a name="(line279)"></a>                                 systemliteral sl+<a name="(line280)"></a><a name="ndatadecl"></a>ndatadecl <font color=Red>::</font> NDataDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line281)"></a>ndatadecl <font color=Cyan>(</font>NDATA n<font color=Cyan>)</font>            <font color=Red>=</font> text <font color=Magenta>"NDATA"</font> <font color=Cyan>&lt;+&gt;</font> text n+<a name="(line282)"></a><a name="notationdecl"></a><font color=Blue>-- _ (TextDecl vi ed)      = text "&lt;?xml" &lt;+&gt; maybe text vi &lt;+&gt;</font>+<a name="(line283)"></a><font color=Blue>--                                  encodingdecl ed &lt;&gt; text "?&gt;"</font>+<a name="(line284)"></a><font color=Blue>-- _ (ExtParsedEnt t c)= maybe textdecl t &lt;+&gt; content c</font>+<a name="(line285)"></a><font color=Blue>-- _ (ExtPE t esd)            = maybe textdecl t &lt;+&gt;</font>+<a name="(line286)"></a><font color=Blue>--                                  vcat (map extsubsetdecl esd)</font>+<a name="(line287)"></a>notationdecl <font color=Red>::</font> NotationDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line288)"></a>notationdecl <font color=Cyan>(</font>NOTATION n e<font color=Cyan>)</font>    <font color=Red>=</font> text <font color=Magenta>"&lt;!NOTATION"</font> <font color=Cyan>&lt;+&gt;</font> text n <font color=Cyan>&lt;+&gt;</font>+<a name="(line289)"></a>                                 either externalid publicid e <font color=Cyan>&lt;&gt;</font>+<a name="(line290)"></a>                                 text <font color=Magenta>"&gt;"</font>+<a name="(line291)"></a><a name="publicid"></a>publicid <font color=Red>::</font> PublicID <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line292)"></a>publicid <font color=Cyan>(</font>PUBLICID p<font color=Cyan>)</font>          <font color=Red>=</font> text <font color=Magenta>"PUBLICID"</font> <font color=Cyan>&lt;+&gt;</font> pubidliteral p+<a name="(line293)"></a><a name="encodingdecl"></a>encodingdecl <font color=Red>::</font> EncodingDecl <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line294)"></a>encodingdecl <font color=Cyan>(</font>EncodingDecl s<font color=Cyan>)</font>  <font color=Red>=</font> text <font color=Magenta>"encoding='"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>+<a name="(line295)"></a><a name="nmtoken"></a>nmtoken <font color=Red>::</font> t <font color=Red>-&gt;</font> t+<a name="(line296)"></a>nmtoken s                      <font color=Red>=</font> text s+<a name="(line297)"></a><a name="attvalue"></a>attvalue <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line298)"></a>attvalue <font color=Cyan>(</font>AttValue esr<font color=Cyan>)</font>        <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line299)"></a>                                 hcat <font color=Cyan>(</font>map <font color=Cyan>(</font>either text reference<font color=Cyan>)</font> esr<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font>+<a name="(line300)"></a>                                 text <font color=Magenta>"\""</font>+<a name="(line301)"></a><a name="entityvalue"></a>entityvalue <font color=Red>::</font> EntityValue <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line302)"></a>entityvalue <font color=Cyan>(</font>EntityValue evs<font color=Cyan>)</font>+<a name="(line303)"></a>  <font color=Red>|</font> containsDoubleQuote evs    <font color=Red>=</font> text <font color=Magenta>"'"</font>  <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>+<a name="(line304)"></a>  <font color=Red>|</font> otherwise                  <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> hcat <font color=Cyan>(</font>map ev evs<font color=Cyan>)</font> <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>+<a name="(line305)"></a><a name="ev"></a>ev <font color=Red>::</font> EV <font color=Red>-&gt;</font> String+<a name="(line306)"></a>ev <font color=Cyan>(</font>EVString s<font color=Cyan>)</font>                <font color=Red>=</font> text s+<a name="(line307)"></a><font color=Blue>--ev (EVPERef p e)               = peref p</font>+<a name="(line308)"></a>ev <font color=Cyan>(</font>EVRef r<font color=Cyan>)</font>                   <font color=Red>=</font> reference r+<a name="(line309)"></a><a name="pubidliteral"></a>pubidliteral <font color=Red>::</font> PubidLiteral <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line310)"></a>pubidliteral <font color=Cyan>(</font>PubidLiteral s<font color=Cyan>)</font>+<a name="(line311)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>+<a name="(line312)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>+<a name="(line313)"></a><a name="systemliteral"></a>systemliteral <font color=Red>::</font> SystemLiteral <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line314)"></a>systemliteral <font color=Cyan>(</font>SystemLiteral s<font color=Cyan>)</font>+<a name="(line315)"></a>    <font color=Red>|</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s             <font color=Red>=</font> text <font color=Magenta>"'"</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"'"</font>+<a name="(line316)"></a>    <font color=Red>|</font> otherwise                <font color=Red>=</font> text <font color=Magenta>"\""</font> <font color=Cyan>&lt;&gt;</font> text s <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"\""</font>+<a name="(line317)"></a><a name="chardata"></a>chardata <font color=Red>::</font> t <font color=Red>-&gt;</font> t+<a name="(line318)"></a>chardata s                     <font color=Red>=</font> <font color=Blue>{-if all isSpace s then empty else-}</font> text s+<a name="(line319)"></a><a name="cdsect"></a>cdsect <font color=Red>::</font> <font color=Red>[</font>Char<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Char<font color=Red>]</font>+<a name="(line320)"></a>cdsect c                       <font color=Red>=</font> text <font color=Magenta>"&lt;![CDATA["</font> <font color=Cyan>&lt;&gt;</font> chardata c <font color=Cyan>&lt;&gt;</font> text <font color=Magenta>"]]&gt;"</font>+<a name="(line321)"></a>+<a name="(line322)"></a><a name="containsDoubleQuote"></a><font color=Blue>----</font>+<a name="(line323)"></a>containsDoubleQuote <font color=Red>::</font> <font color=Red>[</font>EV<font color=Red>]</font> <font color=Red>-&gt;</font> Bool+<a name="(line324)"></a>containsDoubleQuote evs <font color=Red>=</font> any csq evs+<a name="(line325)"></a>    <font color=Green><u>where</u></font> csq <font color=Cyan>(</font>EVString s<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>'"'</font> <font color=Cyan>`elem`</font> s+<a name="(line326)"></a>          csq <font color=Green><u>_</u></font>            <font color=Red>=</font> False+<a name="(line327)"></a> </pre> </html>
docs/HaXml/src/Text/XML/HaXml/TypeMapping.html view
@@ -92,118 +92,133 @@ <a name="(line90)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>,</font> HTypeable c<font color=Cyan>)</font> <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Green><u>where</u></font> <a name="(line91)"></a>    toHType p      <font color=Red>=</font> Tuple <font color=Red>[</font>toHType a<font color=Cyan>,</font> toHType b<font color=Cyan>,</font> toHType c<font color=Red>]</font> <a name="(line92)"></a>                   <font color=Green><u>where</u></font>  <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Red>=</font> p-<a name="(line93)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>)</font> <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line94)"></a>    toHType m      <font color=Red>=</font> Maybe <font color=Cyan>(</font>toHType x<font color=Cyan>)</font>   <font color=Green><u>where</u></font>   <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> m-<a name="(line95)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>)</font> <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>Either a b<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line96)"></a>    toHType m      <font color=Red>=</font> Defined <font color=Magenta>"Either"</font> <font color=Red>[</font>hx<font color=Cyan>,</font> hy<font color=Red>]</font>-<a name="(line97)"></a>                         <font color=Red>[</font> Constr <font color=Magenta>"Left"</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Blue>{-Nothing-}</font>-<a name="(line98)"></a>                         <font color=Cyan>,</font> Constr <font color=Magenta>"Right"</font> <font color=Red>[</font>hy<font color=Red>]</font> <font color=Red>[</font>hy<font color=Red>]</font> <font color=Blue>{-Nothing-}</font><font color=Red>]</font>-<a name="(line99)"></a>                   <font color=Green><u>where</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> m-<a name="(line100)"></a>                         <font color=Cyan>(</font>Right y<font color=Cyan>)</font> <font color=Red>=</font> m-<a name="(line101)"></a>                         hx <font color=Red>=</font> toHType x-<a name="(line102)"></a>                         hy <font color=Red>=</font> toHType y-<a name="(line103)"></a>-<a name="(line104)"></a><font color=Green><u>instance</u></font> HTypeable a <font color=Red>=&gt;</font> HTypeable <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>where</u></font>-<a name="(line105)"></a>    toHType xs     <font color=Red>=</font> <font color=Green><u>case</u></font> toHType x <font color=Green><u>of</u></font> <font color=Cyan>(</font>Prim <font color=Magenta>"Char"</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> String-<a name="(line106)"></a>                                       <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> List <font color=Cyan>(</font>toHType x<font color=Cyan>)</font>-<a name="(line107)"></a>                   <font color=Green><u>where</u></font>  <font color=Cyan>(</font>x<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xs-<a name="(line108)"></a>-<a name="(line109)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line110)"></a>-<a name="(line111)"></a><a name="toDTD"></a><font color=Blue>-- | 'toDTD' converts a concrete representation of the Haskell type of</font>-<a name="(line112)"></a><font color=Blue>--   a value (obtained by the method 'toHType') into a real DocTypeDecl.</font>-<a name="(line113)"></a><font color=Blue>--   It ensures that PERefs are defined before they are used, and that no</font>-<a name="(line114)"></a><font color=Blue>--   element or attribute-list is declared more than once.</font>-<a name="(line115)"></a>toDTD <font color=Red>::</font> HType <font color=Red>-&gt;</font> DocTypeDecl-<a name="(line116)"></a>toDTD ht <font color=Red>=</font>-<a name="(line117)"></a>  DTD <font color=Cyan>(</font>toplevel ht<font color=Cyan>)</font> Nothing <font color=Cyan>(</font>macrosFirst <font color=Cyan>(</font>reverse <font color=Cyan>(</font>h2d True [] [] <font color=Red>[</font>ht<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line118)"></a>  <font color=Green><u>where</u></font>-<a name="(line119)"></a>    macrosFirst <font color=Red>::</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font>-<a name="(line120)"></a>    macrosFirst decls <font color=Red>=</font> concat <font color=Red>[</font>p<font color=Cyan>,</font> p'<font color=Red>]</font> <font color=Green><u>where</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font> p'<font color=Cyan>)</font> <font color=Red>=</font> partition f decls-<a name="(line121)"></a>                                             f <font color=Cyan>(</font>Entity <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True-<a name="(line122)"></a>                                             f <font color=Green><u>_</u></font> <font color=Red>=</font> False-<a name="(line123)"></a>    toplevel ht<font color=Red>@</font><font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> showHType ht <font color=Magenta>"-XML"</font>-<a name="(line124)"></a>    toplevel ht<font color=Red>@</font><font color=Green><u>_</u></font>               <font color=Red>=</font> showHType ht <font color=Magenta>""</font>-<a name="(line125)"></a>    c0 <font color=Red>=</font> False-<a name="(line126)"></a>    h2d <font color=Red>::</font> Bool <font color=Red>-&gt;</font> <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Constr<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font>-<a name="(line127)"></a>    <font color=Blue>-- toplevel?   history    history   remainingwork     result</font>-<a name="(line128)"></a>    h2d c history chist []       <font color=Red>=</font> []-<a name="(line129)"></a>    h2d c history chist <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>hts<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line130)"></a>      <font color=Green><u>if</u></font> ht <font color=Cyan>`elem`</font> history <font color=Green><u>then</u></font> h2d c0 history chist hts-<a name="(line131)"></a>      <font color=Green><u>else</u></font>-<a name="(line132)"></a>        <font color=Green><u>case</u></font> ht <font color=Green><u>of</u></font>-<a name="(line133)"></a>          Maybe ht0  <font color=Red>-&gt;</font> declelem ht<font color=Red><b>:</b></font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist <font color=Cyan>(</font>ht0<font color=Red><b>:</b></font>hts<font color=Cyan>)</font>-<a name="(line134)"></a>          List ht0   <font color=Red>-&gt;</font> declelem ht<font color=Red><b>:</b></font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist <font color=Cyan>(</font>ht0<font color=Red><b>:</b></font>hts<font color=Cyan>)</font>-<a name="(line135)"></a>          Tuple hts0 <font color=Red>-&gt;</font> <font color=Cyan>(</font>c <font color=Cyan>?</font> <font color=Cyan>(</font>declelem ht<font color=Red><b>:</b></font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line136)"></a>                                     <font color=Cyan>(</font>h2d c0 history chist <font color=Cyan>(</font>hts0<font color=Cyan>++</font>hts<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line137)"></a>          Prim s t   <font color=Red>-&gt;</font> declprim ht <font color=Cyan>++</font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist hts-<a name="(line138)"></a>          String     <font color=Red>-&gt;</font> declstring<font color=Red><b>:</b></font>    h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist hts-<a name="(line139)"></a>          Defined s <font color=Green><u>_</u></font> cs <font color=Red>-&gt;</font>-<a name="(line140)"></a>               <font color=Green><u>let</u></font> hts0 <font color=Red>=</font> concatMap grab cs <font color=Green><u>in</u></font>-<a name="(line141)"></a>               <font color=Cyan>(</font>c <font color=Cyan>?</font> <font color=Cyan>(</font>decltopelem ht<font color=Red><b>:</b></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>declmacro ht chist<font color=Cyan>)</font>-<a name="(line142)"></a>               <font color=Cyan>++</font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> <font color=Cyan>(</font>cs<font color=Cyan>++</font>chist<font color=Cyan>)</font> <font color=Cyan>(</font>hts0<font color=Cyan>++</font>hts<font color=Cyan>)</font>-<a name="(line143)"></a>    declelem ht <font color=Red>=</font>-<a name="(line144)"></a>      Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>outerHtExpr ht<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line145)"></a>    decltopelem ht <font color=Red>=</font>    <font color=Blue>-- hack to avoid peref at toplevel</font>-<a name="(line146)"></a>      Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>innerHtExpr ht None<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line147)"></a>    declmacro ht<font color=Red>@</font><font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> chist <font color=Red>=</font>-<a name="(line148)"></a>      Entity <font color=Cyan>(</font>EntityPEDecl <font color=Cyan>(</font>PEDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font>-<a name="(line149)"></a>      concatMap <font color=Cyan>(</font>declConstr chist<font color=Cyan>)</font> cs-<a name="(line150)"></a>      <font color=Green><u>where</u></font> ev <font color=Red>=</font> EntityValue <font color=Red>[</font>EVString <font color=Cyan>(</font>render <font color=Cyan>(</font>PP<font color=Cyan>.</font>cp <font color=Cyan>(</font>outerHtExpr ht<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>-<a name="(line151)"></a>    declConstr chist c<font color=Red>@</font><font color=Cyan>(</font>Constr s fv hts<font color=Cyan>)</font>-<a name="(line152)"></a>      <font color=Red>|</font> c <font color=Cyan>`notElem`</font> chist <font color=Red>=</font>-<a name="(line153)"></a>          <font color=Red>[</font>Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>flatConstr c <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>constrHtExpr c<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>-<a name="(line154)"></a>      <font color=Red>|</font> otherwise <font color=Red>=</font> [] -<a name="(line155)"></a>    declprim <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line156)"></a>      <font color=Red>[</font> Element <font color=Cyan>(</font>ElementDecl t EMPTY<font color=Cyan>)</font>-<a name="(line157)"></a>      <font color=Cyan>,</font> AttList <font color=Cyan>(</font>AttListDecl t <font color=Red>[</font>AttDef <font color=Magenta>"value"</font> StringType REQUIRED<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>-<a name="(line158)"></a>    declstring <font color=Red>=</font>-<a name="(line159)"></a>      Element <font color=Cyan>(</font>ElementDecl <font color=Magenta>"string"</font> <font color=Cyan>(</font>Mixed PCDATA<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line160)"></a>    grab <font color=Cyan>(</font>Constr <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> hts<font color=Cyan>)</font> <font color=Red>=</font> hts-<a name="(line161)"></a>-<a name="(line162)"></a><a name="?"></a><font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>::</font> Bool <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>a<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>a<font color=Cyan>)</font>-<a name="(line163)"></a><a name="b"></a>b <font color=Cyan>?</font> f <font color=Red>|</font> b     <font color=Red>=</font> f-<a name="(line164)"></a>      <font color=Red>|</font> not b <font color=Red>=</font> id-<a name="(line165)"></a>-<a name="(line166)"></a><a name="showHType"></a><font color=Blue>-- Flatten an HType to a String suitable for an XML tagname.</font>-<a name="(line167)"></a>showHType <font color=Red>::</font> HType <font color=Red>-&gt;</font> ShowS-<a name="(line168)"></a>showHType <font color=Cyan>(</font>Maybe ht<font color=Cyan>)</font>  <font color=Red>=</font> showString <font color=Magenta>"maybe-"</font> <font color=Cyan>.</font> showHType ht-<a name="(line169)"></a>showHType <font color=Cyan>(</font>List ht<font color=Cyan>)</font>   <font color=Red>=</font> showString <font color=Magenta>"list-"</font> <font color=Cyan>.</font> showHType ht-<a name="(line170)"></a>showHType <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"tuple"</font> <font color=Cyan>.</font> shows <font color=Cyan>(</font>length hts<font color=Cyan>)</font>-<a name="(line171)"></a>                        <font color=Cyan>.</font> showChar <font color=Magenta>'-'</font>-<a name="(line172)"></a>                        <font color=Cyan>.</font> foldr1 <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font>-<a name="(line173)"></a>                                                  <font color=Cyan>(</font>map showHType hts<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line174)"></a>showHType <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font>  <font color=Red>=</font> showString t-<a name="(line175)"></a>showHType String      <font color=Red>=</font> showString <font color=Magenta>"string"</font>-<a name="(line176)"></a>showHType <font color=Cyan>(</font>Defined s fv <font color=Green><u>_</u></font><font color=Cyan>)</font>-<a name="(line177)"></a>                      <font color=Red>=</font> showString s <font color=Cyan>.</font> <font color=Cyan>(</font><font color=Cyan>(</font>length fv <font color=Cyan>&gt;</font> <font color=Magenta>0</font><font color=Cyan>)</font> <font color=Cyan>?</font> <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line178)"></a>                        <font color=Cyan>.</font> foldr <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> id <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font>-<a name="(line179)"></a>                                                    <font color=Cyan>(</font>map showHType fv<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line93)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>,</font> HTypeable c<font color=Cyan>,</font> HTypeable d<font color=Cyan>)</font> <font color=Red>=&gt;</font>+<a name="(line94)"></a>         HTypeable <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line95)"></a>    toHType p      <font color=Red>=</font> Tuple <font color=Red>[</font>toHType a<font color=Cyan>,</font> toHType b<font color=Cyan>,</font> toHType c<font color=Cyan>,</font> toHType d<font color=Red>]</font>+<a name="(line96)"></a>                   <font color=Green><u>where</u></font>  <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>)</font> <font color=Red>=</font> p+<a name="(line97)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>,</font> HTypeable c<font color=Cyan>,</font> HTypeable d<font color=Cyan>,</font> HTypeable e<font color=Cyan>)</font> <font color=Red>=&gt;</font>+<a name="(line98)"></a>         HTypeable <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line99)"></a>    toHType p      <font color=Red>=</font> Tuple <font color=Red>[</font> toHType a<font color=Cyan>,</font> toHType b<font color=Cyan>,</font> toHType c<font color=Cyan>,</font> toHType d+<a name="(line100)"></a>                           <font color=Cyan>,</font> toHType e <font color=Red>]</font>+<a name="(line101)"></a>                   <font color=Green><u>where</u></font>  <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>)</font> <font color=Red>=</font> p+<a name="(line102)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font> HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>,</font> HTypeable c<font color=Cyan>,</font> HTypeable d<font color=Cyan>,</font> HTypeable e+<a name="(line103)"></a>         <font color=Cyan>,</font> HTypeable f<font color=Cyan>)</font> <font color=Red>=&gt;</font>+<a name="(line104)"></a>         HTypeable <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>,</font>f<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line105)"></a>    toHType p      <font color=Red>=</font> Tuple <font color=Red>[</font> toHType a<font color=Cyan>,</font> toHType b<font color=Cyan>,</font> toHType c<font color=Cyan>,</font> toHType d+<a name="(line106)"></a>                           <font color=Cyan>,</font> toHType e<font color=Cyan>,</font> toHType f <font color=Red>]</font>+<a name="(line107)"></a>                   <font color=Green><u>where</u></font>  <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>,</font>f<font color=Cyan>)</font> <font color=Red>=</font> p+<a name="(line108)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>)</font> <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line109)"></a>    toHType m      <font color=Red>=</font> Maybe <font color=Cyan>(</font>toHType x<font color=Cyan>)</font>   <font color=Green><u>where</u></font>   <font color=Cyan>(</font>Just x<font color=Cyan>)</font> <font color=Red>=</font> m+<a name="(line110)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>,</font> HTypeable b<font color=Cyan>)</font> <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>Either a b<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line111)"></a>    toHType m      <font color=Red>=</font> Defined <font color=Magenta>"Either"</font> <font color=Red>[</font>hx<font color=Cyan>,</font> hy<font color=Red>]</font>+<a name="(line112)"></a>                         <font color=Red>[</font> Constr <font color=Magenta>"Left"</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Blue>{-Nothing-}</font>+<a name="(line113)"></a>                         <font color=Cyan>,</font> Constr <font color=Magenta>"Right"</font> <font color=Red>[</font>hy<font color=Red>]</font> <font color=Red>[</font>hy<font color=Red>]</font> <font color=Blue>{-Nothing-}</font><font color=Red>]</font>+<a name="(line114)"></a>                   <font color=Green><u>where</u></font> <font color=Cyan>(</font>Left x<font color=Cyan>)</font>  <font color=Red>=</font> m+<a name="(line115)"></a>                         <font color=Cyan>(</font>Right y<font color=Cyan>)</font> <font color=Red>=</font> m+<a name="(line116)"></a>                         hx <font color=Red>=</font> toHType x+<a name="(line117)"></a>                         hy <font color=Red>=</font> toHType y+<a name="(line118)"></a>+<a name="(line119)"></a><font color=Green><u>instance</u></font> HTypeable a <font color=Red>=&gt;</font> HTypeable <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>where</u></font>+<a name="(line120)"></a>    toHType xs     <font color=Red>=</font> <font color=Green><u>case</u></font> toHType x <font color=Green><u>of</u></font> <font color=Cyan>(</font>Prim <font color=Magenta>"Char"</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> String+<a name="(line121)"></a>                                       <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> List <font color=Cyan>(</font>toHType x<font color=Cyan>)</font>+<a name="(line122)"></a>                   <font color=Green><u>where</u></font>  <font color=Cyan>(</font>x<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xs+<a name="(line123)"></a>+<a name="(line124)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line125)"></a>+<a name="(line126)"></a><a name="toDTD"></a><font color=Blue>-- | 'toDTD' converts a concrete representation of the Haskell type of</font>+<a name="(line127)"></a><font color=Blue>--   a value (obtained by the method 'toHType') into a real DocTypeDecl.</font>+<a name="(line128)"></a><font color=Blue>--   It ensures that PERefs are defined before they are used, and that no</font>+<a name="(line129)"></a><font color=Blue>--   element or attribute-list is declared more than once.</font>+<a name="(line130)"></a>toDTD <font color=Red>::</font> HType <font color=Red>-&gt;</font> DocTypeDecl+<a name="(line131)"></a>toDTD ht <font color=Red>=</font>+<a name="(line132)"></a>  DTD <font color=Cyan>(</font>toplevel ht<font color=Cyan>)</font> Nothing <font color=Cyan>(</font>macrosFirst <font color=Cyan>(</font>reverse <font color=Cyan>(</font>h2d True [] [] <font color=Red>[</font>ht<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line133)"></a>  <font color=Green><u>where</u></font>+<a name="(line134)"></a>    macrosFirst <font color=Red>::</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font>+<a name="(line135)"></a>    macrosFirst decls <font color=Red>=</font> concat <font color=Red>[</font>p<font color=Cyan>,</font> p'<font color=Red>]</font> <font color=Green><u>where</u></font> <font color=Cyan>(</font>p<font color=Cyan>,</font> p'<font color=Cyan>)</font> <font color=Red>=</font> partition f decls+<a name="(line136)"></a>                                             f <font color=Cyan>(</font>Entity <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True+<a name="(line137)"></a>                                             f <font color=Green><u>_</u></font> <font color=Red>=</font> False+<a name="(line138)"></a>    toplevel ht<font color=Red>@</font><font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> showHType ht <font color=Magenta>"-XML"</font>+<a name="(line139)"></a>    toplevel ht<font color=Red>@</font><font color=Green><u>_</u></font>               <font color=Red>=</font> showHType ht <font color=Magenta>""</font>+<a name="(line140)"></a>    c0 <font color=Red>=</font> False+<a name="(line141)"></a>    h2d <font color=Red>::</font> Bool <font color=Red>-&gt;</font> <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>Constr<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>HType<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font>+<a name="(line142)"></a>    <font color=Blue>-- toplevel?   history    history   remainingwork     result</font>+<a name="(line143)"></a>    h2d c history chist []       <font color=Red>=</font> []+<a name="(line144)"></a>    h2d c history chist <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>hts<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line145)"></a>      <font color=Green><u>if</u></font> ht <font color=Cyan>`elem`</font> history <font color=Green><u>then</u></font> h2d c0 history chist hts+<a name="(line146)"></a>      <font color=Green><u>else</u></font>+<a name="(line147)"></a>        <font color=Green><u>case</u></font> ht <font color=Green><u>of</u></font>+<a name="(line148)"></a>          Maybe ht0  <font color=Red>-&gt;</font> declelem ht<font color=Red><b>:</b></font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist <font color=Cyan>(</font>ht0<font color=Red><b>:</b></font>hts<font color=Cyan>)</font>+<a name="(line149)"></a>          List ht0   <font color=Red>-&gt;</font> declelem ht<font color=Red><b>:</b></font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist <font color=Cyan>(</font>ht0<font color=Red><b>:</b></font>hts<font color=Cyan>)</font>+<a name="(line150)"></a>          Tuple hts0 <font color=Red>-&gt;</font> <font color=Cyan>(</font>c <font color=Cyan>?</font> <font color=Cyan>(</font>declelem ht<font color=Red><b>:</b></font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line151)"></a>                                     <font color=Cyan>(</font>h2d c0 history chist <font color=Cyan>(</font>hts0<font color=Cyan>++</font>hts<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line152)"></a>          Prim s t   <font color=Red>-&gt;</font> declprim ht <font color=Cyan>++</font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist hts+<a name="(line153)"></a>          String     <font color=Red>-&gt;</font> declstring<font color=Red><b>:</b></font>    h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> chist hts+<a name="(line154)"></a>          Defined s <font color=Green><u>_</u></font> cs <font color=Red>-&gt;</font>+<a name="(line155)"></a>               <font color=Green><u>let</u></font> hts0 <font color=Red>=</font> concatMap grab cs <font color=Green><u>in</u></font>+<a name="(line156)"></a>               <font color=Cyan>(</font>c <font color=Cyan>?</font> <font color=Cyan>(</font>decltopelem ht<font color=Red><b>:</b></font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>declmacro ht chist<font color=Cyan>)</font>+<a name="(line157)"></a>               <font color=Cyan>++</font> h2d c0 <font color=Cyan>(</font>ht<font color=Red><b>:</b></font>history<font color=Cyan>)</font> <font color=Cyan>(</font>cs<font color=Cyan>++</font>chist<font color=Cyan>)</font> <font color=Cyan>(</font>hts0<font color=Cyan>++</font>hts<font color=Cyan>)</font>+<a name="(line158)"></a>    declelem ht <font color=Red>=</font>+<a name="(line159)"></a>      Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>outerHtExpr ht<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line160)"></a>    decltopelem ht <font color=Red>=</font>    <font color=Blue>-- hack to avoid peref at toplevel</font>+<a name="(line161)"></a>      Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>innerHtExpr ht None<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line162)"></a>    declmacro ht<font color=Red>@</font><font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> chist <font color=Red>=</font>+<a name="(line163)"></a>      Entity <font color=Cyan>(</font>EntityPEDecl <font color=Cyan>(</font>PEDecl <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>PEDefEntityValue ev<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font>+<a name="(line164)"></a>      concatMap <font color=Cyan>(</font>declConstr chist<font color=Cyan>)</font> cs+<a name="(line165)"></a>      <font color=Green><u>where</u></font> ev <font color=Red>=</font> EntityValue <font color=Red>[</font>EVString <font color=Cyan>(</font>render <font color=Cyan>(</font>PP<font color=Cyan>.</font>cp <font color=Cyan>(</font>outerHtExpr ht<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>+<a name="(line166)"></a>    declConstr chist c<font color=Red>@</font><font color=Cyan>(</font>Constr s fv hts<font color=Cyan>)</font>+<a name="(line167)"></a>      <font color=Red>|</font> c <font color=Cyan>`notElem`</font> chist <font color=Red>=</font>+<a name="(line168)"></a>          <font color=Red>[</font>Element <font color=Cyan>(</font>ElementDecl <font color=Cyan>(</font>flatConstr c <font color=Magenta>""</font><font color=Cyan>)</font> <font color=Cyan>(</font>ContentSpec <font color=Cyan>(</font>constrHtExpr c<font color=Cyan>)</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font>+<a name="(line169)"></a>      <font color=Red>|</font> otherwise <font color=Red>=</font> [] +<a name="(line170)"></a>    declprim <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line171)"></a>      <font color=Red>[</font> Element <font color=Cyan>(</font>ElementDecl t EMPTY<font color=Cyan>)</font>+<a name="(line172)"></a>      <font color=Cyan>,</font> AttList <font color=Cyan>(</font>AttListDecl t <font color=Red>[</font>AttDef <font color=Magenta>"value"</font> StringType REQUIRED<font color=Red>]</font><font color=Cyan>)</font><font color=Red>]</font>+<a name="(line173)"></a>    declstring <font color=Red>=</font>+<a name="(line174)"></a>      Element <font color=Cyan>(</font>ElementDecl <font color=Magenta>"string"</font> <font color=Cyan>(</font>Mixed PCDATA<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line175)"></a>    grab <font color=Cyan>(</font>Constr <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> hts<font color=Cyan>)</font> <font color=Red>=</font> hts+<a name="(line176)"></a>+<a name="(line177)"></a><a name="?"></a><font color=Cyan>(</font><font color=Cyan>?</font><font color=Cyan>)</font> <font color=Red>::</font> Bool <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>a<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>a<font color=Red>-&gt;</font>a<font color=Cyan>)</font>+<a name="(line178)"></a><a name="b"></a>b <font color=Cyan>?</font> f <font color=Red>|</font> b     <font color=Red>=</font> f+<a name="(line179)"></a>      <font color=Red>|</font> not b <font color=Red>=</font> id <a name="(line180)"></a>-<a name="(line181)"></a><a name="flatConstr"></a>flatConstr <font color=Red>::</font> Constr <font color=Red>-&gt;</font> ShowS-<a name="(line182)"></a>flatConstr <font color=Cyan>(</font>Constr s fv <font color=Green><u>_</u></font><font color=Cyan>)</font>-<a name="(line183)"></a>        <font color=Red>=</font> showString s <font color=Cyan>.</font> <font color=Cyan>(</font><font color=Cyan>(</font>length fv <font color=Cyan>&gt;</font> <font color=Magenta>0</font><font color=Cyan>)</font> <font color=Cyan>?</font> <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line184)"></a>          <font color=Cyan>.</font> foldr <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> id <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font> <font color=Cyan>(</font>map showHType fv<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line185)"></a>-<a name="(line186)"></a><a name="outerHtExpr"></a>outerHtExpr <font color=Red>::</font> HType <font color=Red>-&gt;</font> CP-<a name="(line187)"></a>outerHtExpr <font color=Cyan>(</font>Maybe ht<font color=Cyan>)</font>      <font color=Red>=</font> innerHtExpr ht Query-<a name="(line188)"></a>outerHtExpr <font color=Cyan>(</font>List ht<font color=Cyan>)</font>       <font color=Red>=</font> innerHtExpr ht Star-<a name="(line189)"></a>outerHtExpr <font color=Cyan>(</font>Defined s fv cs<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line190)"></a>    Choice <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font>TagName <font color=Cyan>(</font>flatConstr c <font color=Magenta>""</font><font color=Cyan>)</font> None<font color=Cyan>)</font> cs<font color=Cyan>)</font> None-<a name="(line191)"></a>outerHtExpr ht              <font color=Red>=</font> innerHtExpr ht None-<a name="(line192)"></a>-<a name="(line193)"></a><a name="innerHtExpr"></a>innerHtExpr <font color=Red>::</font> HType <font color=Red>-&gt;</font> Modifier <font color=Red>-&gt;</font> CP-<a name="(line194)"></a>innerHtExpr <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font>  m <font color=Red>=</font> TagName t m-<a name="(line195)"></a>innerHtExpr <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> m <font color=Red>=</font> Seq <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font> innerHtExpr c None<font color=Cyan>)</font> hts<font color=Cyan>)</font> m-<a name="(line196)"></a>innerHtExpr ht<font color=Red>@</font><font color=Cyan>(</font>Defined s hts cs<font color=Cyan>)</font> m <font color=Red>=</font> <font color=Blue>-- CPPE (showHType ht "") (outerHtExpr ht)</font>-<a name="(line197)"></a>                                      TagName <font color=Cyan>(</font><font color=Magenta>'%'</font><font color=Red><b>:</b></font> showHType ht <font color=Magenta>";"</font><font color=Cyan>)</font> m-<a name="(line198)"></a>                                                        <font color=Blue>--  ***HACK!!!***</font>-<a name="(line199)"></a>innerHtExpr ht m <font color=Red>=</font> TagName <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> m+<a name="(line181)"></a><a name="showHType"></a><font color=Blue>-- Flatten an HType to a String suitable for an XML tagname.</font>+<a name="(line182)"></a>showHType <font color=Red>::</font> HType <font color=Red>-&gt;</font> ShowS+<a name="(line183)"></a>showHType <font color=Cyan>(</font>Maybe ht<font color=Cyan>)</font>  <font color=Red>=</font> showString <font color=Magenta>"maybe-"</font> <font color=Cyan>.</font> showHType ht+<a name="(line184)"></a>showHType <font color=Cyan>(</font>List ht<font color=Cyan>)</font>   <font color=Red>=</font> showString <font color=Magenta>"list-"</font> <font color=Cyan>.</font> showHType ht+<a name="(line185)"></a>showHType <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> <font color=Red>=</font> showString <font color=Magenta>"tuple"</font> <font color=Cyan>.</font> shows <font color=Cyan>(</font>length hts<font color=Cyan>)</font>+<a name="(line186)"></a>                        <font color=Cyan>.</font> showChar <font color=Magenta>'-'</font>+<a name="(line187)"></a>                        <font color=Cyan>.</font> foldr1 <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font>+<a name="(line188)"></a>                                                  <font color=Cyan>(</font>map showHType hts<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line189)"></a>showHType <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font>  <font color=Red>=</font> showString t+<a name="(line190)"></a>showHType String      <font color=Red>=</font> showString <font color=Magenta>"string"</font>+<a name="(line191)"></a>showHType <font color=Cyan>(</font>Defined s fv <font color=Green><u>_</u></font><font color=Cyan>)</font>+<a name="(line192)"></a>                      <font color=Red>=</font> showString s <font color=Cyan>.</font> <font color=Cyan>(</font><font color=Cyan>(</font>length fv <font color=Cyan>&gt;</font> <font color=Magenta>0</font><font color=Cyan>)</font> <font color=Cyan>?</font> <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line193)"></a>                        <font color=Cyan>.</font> foldr <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> id <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font>+<a name="(line194)"></a>                                                    <font color=Cyan>(</font>map showHType fv<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line195)"></a>+<a name="(line196)"></a><a name="flatConstr"></a>flatConstr <font color=Red>::</font> Constr <font color=Red>-&gt;</font> ShowS+<a name="(line197)"></a>flatConstr <font color=Cyan>(</font>Constr s fv <font color=Green><u>_</u></font><font color=Cyan>)</font>+<a name="(line198)"></a>        <font color=Red>=</font> showString s <font color=Cyan>.</font> <font color=Cyan>(</font><font color=Cyan>(</font>length fv <font color=Cyan>&gt;</font> <font color=Magenta>0</font><font color=Cyan>)</font> <font color=Cyan>?</font> <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line199)"></a>          <font color=Cyan>.</font> foldr <font color=Cyan>(</font><font color=Cyan>.</font><font color=Cyan>)</font> id <font color=Cyan>(</font>intersperse <font color=Cyan>(</font>showChar <font color=Magenta>'-'</font><font color=Cyan>)</font> <font color=Cyan>(</font>map showHType fv<font color=Cyan>)</font><font color=Cyan>)</font> <a name="(line200)"></a>-<a name="(line201)"></a><a name="constrHtExpr"></a>constrHtExpr <font color=Red>::</font> Constr <font color=Red>-&gt;</font> CP-<a name="(line202)"></a>constrHtExpr <font color=Cyan>(</font>Constr s fv []<font color=Cyan>)</font>  <font color=Red>=</font> TagName <font color=Magenta>"EMPTY"</font> None   <font color=Blue>--  ***HACK!!!***</font>-<a name="(line203)"></a>constrHtExpr <font color=Cyan>(</font>Constr s fv hts<font color=Cyan>)</font> <font color=Red>=</font> innerHtExpr <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> None-<a name="(line204)"></a>-<a name="(line205)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line201)"></a><a name="outerHtExpr"></a>outerHtExpr <font color=Red>::</font> HType <font color=Red>-&gt;</font> CP+<a name="(line202)"></a>outerHtExpr <font color=Cyan>(</font>Maybe ht<font color=Cyan>)</font>      <font color=Red>=</font> innerHtExpr ht Query+<a name="(line203)"></a>outerHtExpr <font color=Cyan>(</font>List ht<font color=Cyan>)</font>       <font color=Red>=</font> innerHtExpr ht Star+<a name="(line204)"></a>outerHtExpr <font color=Cyan>(</font>Defined s fv cs<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line205)"></a>    Choice <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font>TagName <font color=Cyan>(</font>flatConstr c <font color=Magenta>""</font><font color=Cyan>)</font> None<font color=Cyan>)</font> cs<font color=Cyan>)</font> None+<a name="(line206)"></a>outerHtExpr ht              <font color=Red>=</font> innerHtExpr ht None+<a name="(line207)"></a>+<a name="(line208)"></a><a name="innerHtExpr"></a>innerHtExpr <font color=Red>::</font> HType <font color=Red>-&gt;</font> Modifier <font color=Red>-&gt;</font> CP+<a name="(line209)"></a>innerHtExpr <font color=Cyan>(</font>Prim s t<font color=Cyan>)</font>  m <font color=Red>=</font> TagName t m+<a name="(line210)"></a>innerHtExpr <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> m <font color=Red>=</font> Seq <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font> innerHtExpr c None<font color=Cyan>)</font> hts<font color=Cyan>)</font> m+<a name="(line211)"></a>innerHtExpr ht<font color=Red>@</font><font color=Cyan>(</font>Defined s hts cs<font color=Cyan>)</font> m <font color=Red>=</font> <font color=Blue>-- CPPE (showHType ht "") (outerHtExpr ht)</font>+<a name="(line212)"></a>                                      TagName <font color=Cyan>(</font><font color=Magenta>'%'</font><font color=Red><b>:</b></font> showHType ht <font color=Magenta>";"</font><font color=Cyan>)</font> m+<a name="(line213)"></a>                                                        <font color=Blue>--  ***HACK!!!***</font>+<a name="(line214)"></a>innerHtExpr ht m <font color=Red>=</font> TagName <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> m+<a name="(line215)"></a>+<a name="(line216)"></a><a name="constrHtExpr"></a>constrHtExpr <font color=Red>::</font> Constr <font color=Red>-&gt;</font> CP+<a name="(line217)"></a>constrHtExpr <font color=Cyan>(</font>Constr s fv []<font color=Cyan>)</font>  <font color=Red>=</font> TagName <font color=Magenta>"EMPTY"</font> None   <font color=Blue>--  ***HACK!!!***</font>+<a name="(line218)"></a>constrHtExpr <font color=Cyan>(</font>Constr s fv hts<font color=Cyan>)</font> <font color=Red>=</font> innerHtExpr <font color=Cyan>(</font>Tuple hts<font color=Cyan>)</font> None+<a name="(line219)"></a>+<a name="(line220)"></a><font color=Blue>------------------------------------------------------------------------</font> </pre> </html>
docs/HaXml/src/Text/XML/HaXml/Types.html view
@@ -137,15 +137,15 @@ <a name="(line135)"></a><a name="XMLDecl"></a><font color=Green><u>data</u></font> XMLDecl    <font color=Red>=</font> XMLDecl VersionInfo <font color=Cyan>(</font>Maybe EncodingDecl<font color=Cyan>)</font> <font color=Cyan>(</font>Maybe SDDecl<font color=Cyan>)</font> <a name="(line136)"></a>                  <font color=Green><u>deriving</u></font> Eq <a name="(line137)"></a><a name="Misc"></a><font color=Green><u>data</u></font> Misc       <font color=Red>=</font> Comment Comment-<a name="(line138)"></a>                <font color=Red>|</font> PI ProcessingInstruction +<a name="(line138)"></a>                <font color=Red>|</font> PI ProcessingInstruction <a name="(line139)"></a>                <font color=Green><u>deriving</u></font> Eq-<a name="(line140)"></a>              +<a name="(line140)"></a> <a name="(line141)"></a><a name="ProcessingInstruction"></a><font color=Green><u>type</u></font> ProcessingInstruction <font color=Red>=</font> <font color=Cyan>(</font>PITarget<font color=Cyan>,</font>String<font color=Cyan>)</font> <a name="(line142)"></a>-<a name="(line143)"></a><a name="SDDecl"></a><font color=Green><u>type</u></font> SDDecl      <font color=Red>=</font> Bool -<a name="(line144)"></a><a name="VersionInfo"></a><font color=Green><u>type</u></font> VersionInfo <font color=Red>=</font> String -<a name="(line145)"></a><a name="Comment"></a><font color=Green><u>type</u></font> Comment     <font color=Red>=</font> String -<a name="(line146)"></a><a name="PITarget"></a><font color=Green><u>type</u></font> PITarget    <font color=Red>=</font> String +<a name="(line143)"></a><a name="SDDecl"></a><font color=Green><u>type</u></font> SDDecl      <font color=Red>=</font> Bool+<a name="(line144)"></a><a name="VersionInfo"></a><font color=Green><u>type</u></font> VersionInfo <font color=Red>=</font> String+<a name="(line145)"></a><a name="Comment"></a><font color=Green><u>type</u></font> Comment     <font color=Red>=</font> String+<a name="(line146)"></a><a name="PITarget"></a><font color=Green><u>type</u></font> PITarget    <font color=Red>=</font> String <a name="(line147)"></a> <a name="(line148)"></a><a name="DocTypeDecl"></a><font color=Green><u>data</u></font> DocTypeDecl <font color=Red>=</font> DTD Name <font color=Cyan>(</font>Maybe ExternalID<font color=Cyan>)</font> <font color=Red>[</font>MarkupDecl<font color=Red>]</font>  <font color=Green><u>deriving</u></font> Eq <a name="(line149)"></a><a name="MarkupDecl"></a><font color=Green><u>data</u></font> MarkupDecl  <font color=Red>=</font> Element  ElementDecl@@ -161,134 +161,136 @@ <a name="(line159)"></a>                   <font color=Green><u>deriving</u></font> Eq <a name="(line160)"></a> <a name="(line161)"></a><a name="Element"></a><font color=Green><u>data</u></font> Element i <font color=Red>=</font> Elem Name <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>[</font>Content i<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq-<a name="(line162)"></a>                                       	<font color=Blue>--  intermediate for parsing</font>+<a name="(line162)"></a>                                        <font color=Blue>--  intermediate for parsing</font> <a name="(line163)"></a><a name="ElemTag"></a><font color=Green><u>data</u></font> ElemTag   <font color=Red>=</font> ElemTag Name <font color=Red>[</font>Attribute<font color=Red>]</font> <a name="(line164)"></a><a name="Attribute"></a><font color=Green><u>type</u></font> Attribute <font color=Red>=</font> <font color=Cyan>(</font>Name<font color=Cyan>,</font> AttValue<font color=Cyan>)</font> <a name="(line165)"></a><a name="Content"></a><font color=Green><u>data</u></font> Content i <font color=Red>=</font> CElem <font color=Cyan>(</font>Element i<font color=Cyan>)</font> i <a name="(line166)"></a>               <font color=Red>|</font> CString Bool CharData i-<a name="(line167)"></a>			<font color=Blue>-- ^ bool is whether whitespace is significant</font>+<a name="(line167)"></a>                        <font color=Blue>-- ^ bool is whether whitespace is significant</font> <a name="(line168)"></a>               <font color=Red>|</font> CRef Reference i <a name="(line169)"></a>               <font color=Red>|</font> CMisc Misc i <a name="(line170)"></a>               <font color=Green><u>deriving</u></font> Eq-<a name="(line171)"></a><a name="info"></a>info <font color=Cyan>(</font>CElem <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i-<a name="(line172)"></a>info <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i-<a name="(line173)"></a>info <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i-<a name="(line174)"></a>info <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i-<a name="(line175)"></a>-<a name="(line176)"></a><font color=Green><u>instance</u></font> Functor Document <font color=Green><u>where</u></font>-<a name="(line177)"></a>  fmap f <font color=Cyan>(</font>Document p st e ms<font color=Cyan>)</font> <font color=Red>=</font> Document p st <font color=Cyan>(</font>fmap f e<font color=Cyan>)</font> ms-<a name="(line178)"></a><font color=Green><u>instance</u></font> Functor Element <font color=Green><u>where</u></font>-<a name="(line179)"></a>  fmap f <font color=Cyan>(</font>Elem t <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font> Elem t <font color=Green><u>as</u></font> <font color=Cyan>(</font>map <font color=Cyan>(</font>fmap f<font color=Cyan>)</font> cs<font color=Cyan>)</font>-<a name="(line180)"></a><font color=Green><u>instance</u></font> Functor Content <font color=Green><u>where</u></font>-<a name="(line181)"></a>  fmap f <font color=Cyan>(</font>CElem e i<font color=Cyan>)</font>     <font color=Red>=</font> CElem <font color=Cyan>(</font>fmap f e<font color=Cyan>)</font> <font color=Cyan>(</font>f i<font color=Cyan>)</font>-<a name="(line182)"></a>  fmap f <font color=Cyan>(</font>CString b s i<font color=Cyan>)</font> <font color=Red>=</font> CString b s <font color=Cyan>(</font>f i<font color=Cyan>)</font>-<a name="(line183)"></a>  fmap f <font color=Cyan>(</font>CRef r i<font color=Cyan>)</font>      <font color=Red>=</font> CRef r <font color=Cyan>(</font>f i<font color=Cyan>)</font>-<a name="(line184)"></a>  fmap f <font color=Cyan>(</font>CMisc m i<font color=Cyan>)</font>     <font color=Red>=</font> CMisc m <font color=Cyan>(</font>f i<font color=Cyan>)</font>-<a name="(line185)"></a>-<a name="(line186)"></a><a name="ElementDecl"></a><font color=Green><u>data</u></font> ElementDecl <font color=Red>=</font> ElementDecl Name ContentSpec <font color=Green><u>deriving</u></font> Eq-<a name="(line187)"></a><a name="ContentSpec"></a><font color=Green><u>data</u></font> ContentSpec <font color=Red>=</font> EMPTY-<a name="(line188)"></a>                 <font color=Red>|</font> ANY-<a name="(line189)"></a>                 <font color=Red>|</font> Mixed Mixed-<a name="(line190)"></a>                 <font color=Red>|</font> ContentSpec CP-<a name="(line191)"></a>                 <font color=Green><u>deriving</u></font> Eq-<a name="(line192)"></a><a name="CP"></a><font color=Blue>-- FIXME: What is TagName here? Seems to be in disagreement with XML spec.</font>-<a name="(line193)"></a><a name="CP"></a><font color=Green><u>data</u></font> CP <font color=Red>=</font> TagName Name Modifier-<a name="(line194)"></a>        <font color=Red>|</font> Choice <font color=Red>[</font>CP<font color=Red>]</font> Modifier-<a name="(line195)"></a>        <font color=Red>|</font> Seq <font color=Red>[</font>CP<font color=Red>]</font> Modifier -<a name="(line196)"></a>        <font color=Green><u>deriving</u></font> Eq-<a name="(line197)"></a><a name="Modifier"></a><font color=Green><u>data</u></font> Modifier <font color=Red>=</font> None  <font color=Blue>-- ^ Just One</font>-<a name="(line198)"></a>              <font color=Red>|</font> Query <font color=Blue>-- ^ Zero Or One</font>-<a name="(line199)"></a>              <font color=Red>|</font> Star  <font color=Blue>-- ^ Zero Or More</font>-<a name="(line200)"></a>              <font color=Red>|</font> Plus  <font color=Blue>-- ^ One Or More </font>-<a name="(line201)"></a>              <font color=Green><u>deriving</u></font> Eq-<a name="(line202)"></a><a name="Mixed"></a><font color=Green><u>data</u></font> Mixed <font color=Red>=</font> PCDATA-<a name="(line203)"></a>           <font color=Red>|</font> PCDATAplus <font color=Red>[</font>Name<font color=Red>]</font> -<a name="(line204)"></a>           <font color=Green><u>deriving</u></font> Eq-<a name="(line205)"></a><a name="AttListDecl"></a><font color=Green><u>data</u></font> AttListDecl <font color=Red>=</font> AttListDecl Name <font color=Red>[</font>AttDef<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq-<a name="(line206)"></a><a name="AttDef"></a><font color=Green><u>data</u></font> AttDef      <font color=Red>=</font> AttDef Name AttType DefaultDecl <font color=Green><u>deriving</u></font> Eq-<a name="(line207)"></a><a name="AttType"></a><font color=Green><u>data</u></font> AttType     <font color=Red>=</font> StringType-<a name="(line208)"></a>                 <font color=Red>|</font> TokenizedType TokenizedType-<a name="(line209)"></a>                 <font color=Red>|</font> EnumeratedType EnumeratedType -<a name="(line210)"></a>                 <font color=Green><u>deriving</u></font> Eq-<a name="(line211)"></a><a name="TokenizedType"></a><font color=Green><u>data</u></font> TokenizedType <font color=Red>=</font> ID-<a name="(line212)"></a>                   <font color=Red>|</font> IDREF-<a name="(line213)"></a>                   <font color=Red>|</font> IDREFS-<a name="(line214)"></a>                   <font color=Red>|</font> ENTITY-<a name="(line215)"></a>                   <font color=Red>|</font> ENTITIES-<a name="(line216)"></a>                   <font color=Red>|</font> NMTOKEN-<a name="(line217)"></a>                   <font color=Red>|</font> NMTOKENS -<a name="(line218)"></a>                   <font color=Green><u>deriving</u></font> Eq-<a name="(line219)"></a><a name="EnumeratedType"></a><font color=Green><u>data</u></font> EnumeratedType <font color=Red>=</font> NotationType NotationType-<a name="(line220)"></a>                    <font color=Red>|</font> Enumeration Enumeration -<a name="(line221)"></a>                    <font color=Green><u>deriving</u></font> Eq-<a name="(line222)"></a><a name="NotationType"></a><font color=Green><u>type</u></font> NotationType   <font color=Red>=</font> <font color=Red>[</font>Name<font color=Red>]</font>	<font color=Blue>-- nonempty list</font>-<a name="(line223)"></a><a name="Enumeration"></a><font color=Green><u>type</u></font> Enumeration    <font color=Red>=</font> <font color=Red>[</font>NmToken<font color=Red>]</font>	<font color=Blue>-- nonempty list</font>-<a name="(line224)"></a><a name="DefaultDecl"></a><font color=Green><u>data</u></font> DefaultDecl    <font color=Red>=</font> REQUIRED-<a name="(line225)"></a>                    <font color=Red>|</font> IMPLIED-<a name="(line226)"></a>                    <font color=Red>|</font> DefaultTo AttValue <font color=Cyan>(</font>Maybe FIXED<font color=Cyan>)</font> -<a name="(line227)"></a>                    <font color=Green><u>deriving</u></font> Eq-<a name="(line228)"></a><a name="FIXED"></a><font color=Green><u>data</u></font> FIXED          <font color=Red>=</font> FIXED <font color=Green><u>deriving</u></font> Eq-<a name="(line229)"></a>-<a name="(line230)"></a><a name="ConditionalSect"></a><font color=Green><u>data</u></font> ConditionalSect <font color=Red>=</font> IncludeSect IncludeSect-<a name="(line231)"></a>                     <font color=Red>|</font> IgnoreSect IgnoreSect -<a name="(line232)"></a>                     <font color=Green><u>deriving</u></font> Eq-<a name="(line233)"></a><a name="IncludeSect"></a><font color=Green><u>type</u></font> IncludeSect <font color=Red>=</font> <font color=Red>[</font>ExtSubsetDecl<font color=Red>]</font>-<a name="(line234)"></a><a name="IgnoreSect"></a><font color=Green><u>type</u></font> IgnoreSect  <font color=Red>=</font> <font color=Red>[</font>IgnoreSectContents<font color=Red>]</font>-<a name="(line235)"></a><a name="Ignore"></a><font color=Green><u>data</u></font> Ignore      <font color=Red>=</font> Ignore <font color=Green><u>deriving</u></font> Eq-<a name="(line236)"></a><a name="IgnoreSectContents"></a><font color=Green><u>data</u></font> IgnoreSectContents <font color=Red>=</font> IgnoreSectContents Ignore <font color=Red>[</font><font color=Cyan>(</font>IgnoreSectContents<font color=Cyan>,</font>Ignore<font color=Cyan>)</font><font color=Red>]</font>  <font color=Green><u>deriving</u></font> Eq-<a name="(line237)"></a>-<a name="(line238)"></a><a name="Reference"></a><font color=Green><u>data</u></font> Reference    <font color=Red>=</font> RefEntity EntityRef-<a name="(line239)"></a>                  <font color=Red>|</font> RefChar CharRef -<a name="(line240)"></a>                  <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line241)"></a><a name="EntityRef"></a><font color=Green><u>type</u></font> EntityRef    <font color=Red>=</font> Name -<a name="(line242)"></a><a name="CharRef"></a><font color=Green><u>type</u></font> CharRef      <font color=Red>=</font> Int-<a name="(line243)"></a><a name="PEReference"></a><font color=Green><u>type</u></font> PEReference  <font color=Red>=</font> Name -<a name="(line244)"></a>-<a name="(line245)"></a><a name="EntityDecl"></a><font color=Green><u>data</u></font> EntityDecl   <font color=Red>=</font> EntityGEDecl GEDecl-<a name="(line246)"></a>                  <font color=Red>|</font> EntityPEDecl PEDecl -<a name="(line247)"></a>                  <font color=Green><u>deriving</u></font> Eq-<a name="(line248)"></a><a name="GEDecl"></a><font color=Green><u>data</u></font> GEDecl       <font color=Red>=</font> GEDecl Name EntityDef <font color=Green><u>deriving</u></font> Eq-<a name="(line249)"></a><a name="PEDecl"></a><font color=Green><u>data</u></font> PEDecl       <font color=Red>=</font> PEDecl Name PEDef <font color=Green><u>deriving</u></font> Eq-<a name="(line250)"></a><a name="EntityDef"></a><font color=Green><u>data</u></font> EntityDef    <font color=Red>=</font> DefEntityValue EntityValue -<a name="(line251)"></a>                  <font color=Red>|</font> DefExternalID ExternalID <font color=Cyan>(</font>Maybe NDataDecl<font color=Cyan>)</font> -<a name="(line252)"></a>                  <font color=Green><u>deriving</u></font> Eq-<a name="(line253)"></a><a name="PEDef"></a><font color=Green><u>data</u></font> PEDef        <font color=Red>=</font> PEDefEntityValue EntityValue-<a name="(line254)"></a>                  <font color=Red>|</font> PEDefExternalID ExternalID <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line255)"></a><a name="ExternalID"></a><font color=Green><u>data</u></font> ExternalID   <font color=Red>=</font> SYSTEM SystemLiteral-<a name="(line256)"></a>                  <font color=Red>|</font> PUBLIC PubidLiteral SystemLiteral <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line257)"></a><a name="NDataDecl"></a><font color=Green><u>newtype</u></font> NDataDecl <font color=Red>=</font> NDATA Name  <font color=Green><u>deriving</u></font> Eq-<a name="(line258)"></a>-<a name="(line259)"></a><a name="TextDecl"></a><font color=Green><u>data</u></font> TextDecl       <font color=Red>=</font> TextDecl <font color=Cyan>(</font>Maybe VersionInfo<font color=Cyan>)</font> EncodingDecl  <font color=Green><u>deriving</u></font> Eq-<a name="(line260)"></a><a name="ExtParsedEnt"></a><font color=Green><u>data</u></font> ExtParsedEnt i <font color=Red>=</font> ExtParsedEnt <font color=Cyan>(</font>Maybe TextDecl<font color=Cyan>)</font> <font color=Cyan>(</font>Content i<font color=Cyan>)</font> <font color=Green><u>deriving</u></font> Eq-<a name="(line261)"></a><a name="ExtPE"></a><font color=Green><u>data</u></font> ExtPE          <font color=Red>=</font> ExtPE <font color=Cyan>(</font>Maybe TextDecl<font color=Cyan>)</font> <font color=Red>[</font>ExtSubsetDecl<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq-<a name="(line262)"></a>-<a name="(line263)"></a><a name="NotationDecl"></a><font color=Green><u>data</u></font> NotationDecl    <font color=Red>=</font> NOTATION Name <font color=Cyan>(</font>Either ExternalID PublicID<font color=Cyan>)</font> <font color=Green><u>deriving</u></font> Eq-<a name="(line264)"></a><a name="PublicID"></a><font color=Green><u>newtype</u></font> PublicID     <font color=Red>=</font> PUBLICID PubidLiteral <font color=Green><u>deriving</u></font> Eq-<a name="(line265)"></a><a name="EncodingDecl"></a><font color=Green><u>newtype</u></font> EncodingDecl <font color=Red>=</font> EncodingDecl String <font color=Green><u>deriving</u></font> Eq-<a name="(line266)"></a>-<a name="(line267)"></a><a name="Name"></a><font color=Green><u>type</u></font> Name     <font color=Red>=</font> String		 <font color=Blue>-- non-empty string</font>-<a name="(line268)"></a><a name="Names"></a><font color=Green><u>type</u></font> Names    <font color=Red>=</font> <font color=Red>[</font>Name<font color=Red>]</font>		 <font color=Blue>-- non-empty list</font>-<a name="(line269)"></a><a name="NmToken"></a><font color=Green><u>type</u></font> NmToken  <font color=Red>=</font> String		 <font color=Blue>-- non-empty string</font>-<a name="(line270)"></a><a name="NmTokens"></a><font color=Green><u>type</u></font> NmTokens <font color=Red>=</font> <font color=Red>[</font>NmToken<font color=Red>]</font>	 <font color=Blue>-- non-empty list</font>-<a name="(line271)"></a>-<a name="(line272)"></a><a name="AttValue"></a><font color=Green><u>data</u></font> AttValue    <font color=Red>=</font> AttValue <font color=Red>[</font>Either String Reference<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq-<a name="(line273)"></a><font color=Green><u>instance</u></font> Show AttValue <font color=Green><u>where</u></font>-<a name="(line274)"></a>  show <font color=Cyan>(</font>AttValue v<font color=Cyan>)</font> <font color=Red>=</font> concatMap decode v-<a name="(line275)"></a>    <font color=Green><u>where</u></font>-<a name="(line276)"></a>      decode <font color=Cyan>(</font>Left  v<font color=Cyan>)</font>               <font color=Red>=</font> v-<a name="(line277)"></a>      decode <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity ent<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&amp;"</font><font color=Cyan>++</font>ent<font color=Cyan>++</font><font color=Magenta>";"</font>-<a name="(line278)"></a>      decode <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefChar cref<font color=Cyan>)</font><font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"&amp;"</font><font color=Cyan>++</font>show cref<font color=Cyan>++</font><font color=Magenta>";"</font>-<a name="(line279)"></a>-<a name="(line280)"></a><a name="EntityValue"></a><font color=Green><u>data</u></font> EntityValue <font color=Red>=</font> EntityValue <font color=Red>[</font>EV<font color=Red>]</font> <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line281)"></a><a name="EV"></a><font color=Green><u>data</u></font> EV <font color=Red>=</font> EVString String-<a name="(line282)"></a> <font color=Blue>--  -- | EVPERef PEReference</font>-<a name="(line283)"></a>        <font color=Red>|</font> EVRef Reference  <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line284)"></a><a name="PubidLiteral"></a><font color=Green><u>newtype</u></font> PubidLiteral  <font color=Red>=</font> PubidLiteral String <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line285)"></a><a name="SystemLiteral"></a><font color=Green><u>newtype</u></font> SystemLiteral <font color=Red>=</font> SystemLiteral String <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line286)"></a><a name="CharData"></a><font color=Green><u>type</u></font> CharData         <font color=Red>=</font> String -<a name="(line287)"></a><a name="CDSect"></a><font color=Green><u>type</u></font> CDSect           <font color=Red>=</font> CharData-<a name="(line288)"></a>-<a name="(line289)"></a><font color=Green><u>instance</u></font> Eq ElemTag <font color=Green><u>where</u></font>-<a name="(line290)"></a>    <font color=Cyan>(</font>ElemTag n <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>==</font> <font color=Cyan>(</font>ElemTag m <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> n<font color=Cyan>==</font>m+<a name="(line171)"></a>+<a name="(line172)"></a><a name="info"></a>info <font color=Red>::</font> Content t <font color=Red>-&gt;</font> t+<a name="(line173)"></a>info <font color=Cyan>(</font>CElem <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i+<a name="(line174)"></a>info <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i+<a name="(line175)"></a>info <font color=Cyan>(</font>CRef <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i+<a name="(line176)"></a>info <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> i<font color=Cyan>)</font> <font color=Red>=</font> i+<a name="(line177)"></a>+<a name="(line178)"></a><font color=Green><u>instance</u></font> Functor Document <font color=Green><u>where</u></font>+<a name="(line179)"></a>  fmap f <font color=Cyan>(</font>Document p st e ms<font color=Cyan>)</font> <font color=Red>=</font> Document p st <font color=Cyan>(</font>fmap f e<font color=Cyan>)</font> ms+<a name="(line180)"></a><font color=Green><u>instance</u></font> Functor Element <font color=Green><u>where</u></font>+<a name="(line181)"></a>  fmap f <font color=Cyan>(</font>Elem t <font color=Green><u>as</u></font> cs<font color=Cyan>)</font> <font color=Red>=</font> Elem t <font color=Green><u>as</u></font> <font color=Cyan>(</font>map <font color=Cyan>(</font>fmap f<font color=Cyan>)</font> cs<font color=Cyan>)</font>+<a name="(line182)"></a><font color=Green><u>instance</u></font> Functor Content <font color=Green><u>where</u></font>+<a name="(line183)"></a>  fmap f <font color=Cyan>(</font>CElem e i<font color=Cyan>)</font>     <font color=Red>=</font> CElem <font color=Cyan>(</font>fmap f e<font color=Cyan>)</font> <font color=Cyan>(</font>f i<font color=Cyan>)</font>+<a name="(line184)"></a>  fmap f <font color=Cyan>(</font>CString b s i<font color=Cyan>)</font> <font color=Red>=</font> CString b s <font color=Cyan>(</font>f i<font color=Cyan>)</font>+<a name="(line185)"></a>  fmap f <font color=Cyan>(</font>CRef r i<font color=Cyan>)</font>      <font color=Red>=</font> CRef r <font color=Cyan>(</font>f i<font color=Cyan>)</font>+<a name="(line186)"></a>  fmap f <font color=Cyan>(</font>CMisc m i<font color=Cyan>)</font>     <font color=Red>=</font> CMisc m <font color=Cyan>(</font>f i<font color=Cyan>)</font>+<a name="(line187)"></a>+<a name="(line188)"></a><a name="ElementDecl"></a><font color=Green><u>data</u></font> ElementDecl <font color=Red>=</font> ElementDecl Name ContentSpec <font color=Green><u>deriving</u></font> Eq+<a name="(line189)"></a><a name="ContentSpec"></a><font color=Green><u>data</u></font> ContentSpec <font color=Red>=</font> EMPTY+<a name="(line190)"></a>                 <font color=Red>|</font> ANY+<a name="(line191)"></a>                 <font color=Red>|</font> Mixed Mixed+<a name="(line192)"></a>                 <font color=Red>|</font> ContentSpec CP+<a name="(line193)"></a>                 <font color=Green><u>deriving</u></font> Eq+<a name="(line194)"></a><a name="CP"></a><font color=Blue>-- FIXME: What is TagName here? Seems to be in disagreement with XML spec.</font>+<a name="(line195)"></a><a name="CP"></a><font color=Green><u>data</u></font> CP <font color=Red>=</font> TagName Name Modifier+<a name="(line196)"></a>        <font color=Red>|</font> Choice <font color=Red>[</font>CP<font color=Red>]</font> Modifier+<a name="(line197)"></a>        <font color=Red>|</font> Seq <font color=Red>[</font>CP<font color=Red>]</font> Modifier+<a name="(line198)"></a>        <font color=Green><u>deriving</u></font> Eq+<a name="(line199)"></a><a name="Modifier"></a><font color=Green><u>data</u></font> Modifier <font color=Red>=</font> None  <font color=Blue>-- ^ Just One</font>+<a name="(line200)"></a>              <font color=Red>|</font> Query <font color=Blue>-- ^ Zero Or One</font>+<a name="(line201)"></a>              <font color=Red>|</font> Star  <font color=Blue>-- ^ Zero Or More</font>+<a name="(line202)"></a>              <font color=Red>|</font> Plus  <font color=Blue>-- ^ One Or More</font>+<a name="(line203)"></a>              <font color=Green><u>deriving</u></font> Eq+<a name="(line204)"></a><a name="Mixed"></a><font color=Green><u>data</u></font> Mixed <font color=Red>=</font> PCDATA+<a name="(line205)"></a>           <font color=Red>|</font> PCDATAplus <font color=Red>[</font>Name<font color=Red>]</font>+<a name="(line206)"></a>           <font color=Green><u>deriving</u></font> Eq+<a name="(line207)"></a><a name="AttListDecl"></a><font color=Green><u>data</u></font> AttListDecl <font color=Red>=</font> AttListDecl Name <font color=Red>[</font>AttDef<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq+<a name="(line208)"></a><a name="AttDef"></a><font color=Green><u>data</u></font> AttDef      <font color=Red>=</font> AttDef Name AttType DefaultDecl <font color=Green><u>deriving</u></font> Eq+<a name="(line209)"></a><a name="AttType"></a><font color=Green><u>data</u></font> AttType     <font color=Red>=</font> StringType+<a name="(line210)"></a>                 <font color=Red>|</font> TokenizedType TokenizedType+<a name="(line211)"></a>                 <font color=Red>|</font> EnumeratedType EnumeratedType+<a name="(line212)"></a>                 <font color=Green><u>deriving</u></font> Eq+<a name="(line213)"></a><a name="TokenizedType"></a><font color=Green><u>data</u></font> TokenizedType <font color=Red>=</font> ID+<a name="(line214)"></a>                   <font color=Red>|</font> IDREF+<a name="(line215)"></a>                   <font color=Red>|</font> IDREFS+<a name="(line216)"></a>                   <font color=Red>|</font> ENTITY+<a name="(line217)"></a>                   <font color=Red>|</font> ENTITIES+<a name="(line218)"></a>                   <font color=Red>|</font> NMTOKEN+<a name="(line219)"></a>                   <font color=Red>|</font> NMTOKENS+<a name="(line220)"></a>                   <font color=Green><u>deriving</u></font> Eq+<a name="(line221)"></a><a name="EnumeratedType"></a><font color=Green><u>data</u></font> EnumeratedType <font color=Red>=</font> NotationType NotationType+<a name="(line222)"></a>                    <font color=Red>|</font> Enumeration Enumeration+<a name="(line223)"></a>                    <font color=Green><u>deriving</u></font> Eq+<a name="(line224)"></a><a name="NotationType"></a><font color=Green><u>type</u></font> NotationType   <font color=Red>=</font> <font color=Red>[</font>Name<font color=Red>]</font>    <font color=Blue>-- nonempty list</font>+<a name="(line225)"></a><a name="Enumeration"></a><font color=Green><u>type</u></font> Enumeration    <font color=Red>=</font> <font color=Red>[</font>NmToken<font color=Red>]</font> <font color=Blue>-- nonempty list</font>+<a name="(line226)"></a><a name="DefaultDecl"></a><font color=Green><u>data</u></font> DefaultDecl    <font color=Red>=</font> REQUIRED+<a name="(line227)"></a>                    <font color=Red>|</font> IMPLIED+<a name="(line228)"></a>                    <font color=Red>|</font> DefaultTo AttValue <font color=Cyan>(</font>Maybe FIXED<font color=Cyan>)</font>+<a name="(line229)"></a>                    <font color=Green><u>deriving</u></font> Eq+<a name="(line230)"></a><a name="FIXED"></a><font color=Green><u>data</u></font> FIXED          <font color=Red>=</font> FIXED <font color=Green><u>deriving</u></font> Eq+<a name="(line231)"></a>+<a name="(line232)"></a><a name="ConditionalSect"></a><font color=Green><u>data</u></font> ConditionalSect <font color=Red>=</font> IncludeSect IncludeSect+<a name="(line233)"></a>                     <font color=Red>|</font> IgnoreSect IgnoreSect+<a name="(line234)"></a>                     <font color=Green><u>deriving</u></font> Eq+<a name="(line235)"></a><a name="IncludeSect"></a><font color=Green><u>type</u></font> IncludeSect <font color=Red>=</font> <font color=Red>[</font>ExtSubsetDecl<font color=Red>]</font>+<a name="(line236)"></a><a name="IgnoreSect"></a><font color=Green><u>type</u></font> IgnoreSect  <font color=Red>=</font> <font color=Red>[</font>IgnoreSectContents<font color=Red>]</font>+<a name="(line237)"></a><a name="Ignore"></a><font color=Green><u>data</u></font> Ignore      <font color=Red>=</font> Ignore <font color=Green><u>deriving</u></font> Eq+<a name="(line238)"></a><a name="IgnoreSectContents"></a><font color=Green><u>data</u></font> IgnoreSectContents <font color=Red>=</font> IgnoreSectContents Ignore <font color=Red>[</font><font color=Cyan>(</font>IgnoreSectContents<font color=Cyan>,</font>Ignore<font color=Cyan>)</font><font color=Red>]</font>  <font color=Green><u>deriving</u></font> Eq+<a name="(line239)"></a>+<a name="(line240)"></a><a name="Reference"></a><font color=Green><u>data</u></font> Reference    <font color=Red>=</font> RefEntity EntityRef+<a name="(line241)"></a>                  <font color=Red>|</font> RefChar CharRef+<a name="(line242)"></a>                  <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line243)"></a><a name="EntityRef"></a><font color=Green><u>type</u></font> EntityRef    <font color=Red>=</font> Name+<a name="(line244)"></a><a name="CharRef"></a><font color=Green><u>type</u></font> CharRef      <font color=Red>=</font> Int+<a name="(line245)"></a><a name="PEReference"></a><font color=Green><u>type</u></font> PEReference  <font color=Red>=</font> Name+<a name="(line246)"></a>+<a name="(line247)"></a><a name="EntityDecl"></a><font color=Green><u>data</u></font> EntityDecl   <font color=Red>=</font> EntityGEDecl GEDecl+<a name="(line248)"></a>                  <font color=Red>|</font> EntityPEDecl PEDecl+<a name="(line249)"></a>                  <font color=Green><u>deriving</u></font> Eq+<a name="(line250)"></a><a name="GEDecl"></a><font color=Green><u>data</u></font> GEDecl       <font color=Red>=</font> GEDecl Name EntityDef <font color=Green><u>deriving</u></font> Eq+<a name="(line251)"></a><a name="PEDecl"></a><font color=Green><u>data</u></font> PEDecl       <font color=Red>=</font> PEDecl Name PEDef <font color=Green><u>deriving</u></font> Eq+<a name="(line252)"></a><a name="EntityDef"></a><font color=Green><u>data</u></font> EntityDef    <font color=Red>=</font> DefEntityValue EntityValue+<a name="(line253)"></a>                  <font color=Red>|</font> DefExternalID ExternalID <font color=Cyan>(</font>Maybe NDataDecl<font color=Cyan>)</font>+<a name="(line254)"></a>                  <font color=Green><u>deriving</u></font> Eq+<a name="(line255)"></a><a name="PEDef"></a><font color=Green><u>data</u></font> PEDef        <font color=Red>=</font> PEDefEntityValue EntityValue+<a name="(line256)"></a>                  <font color=Red>|</font> PEDefExternalID ExternalID <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line257)"></a><a name="ExternalID"></a><font color=Green><u>data</u></font> ExternalID   <font color=Red>=</font> SYSTEM SystemLiteral+<a name="(line258)"></a>                  <font color=Red>|</font> PUBLIC PubidLiteral SystemLiteral <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line259)"></a><a name="NDataDecl"></a><font color=Green><u>newtype</u></font> NDataDecl <font color=Red>=</font> NDATA Name  <font color=Green><u>deriving</u></font> Eq+<a name="(line260)"></a>+<a name="(line261)"></a><a name="TextDecl"></a><font color=Green><u>data</u></font> TextDecl       <font color=Red>=</font> TextDecl <font color=Cyan>(</font>Maybe VersionInfo<font color=Cyan>)</font> EncodingDecl  <font color=Green><u>deriving</u></font> Eq+<a name="(line262)"></a><a name="ExtParsedEnt"></a><font color=Green><u>data</u></font> ExtParsedEnt i <font color=Red>=</font> ExtParsedEnt <font color=Cyan>(</font>Maybe TextDecl<font color=Cyan>)</font> <font color=Cyan>(</font>Content i<font color=Cyan>)</font> <font color=Green><u>deriving</u></font> Eq+<a name="(line263)"></a><a name="ExtPE"></a><font color=Green><u>data</u></font> ExtPE          <font color=Red>=</font> ExtPE <font color=Cyan>(</font>Maybe TextDecl<font color=Cyan>)</font> <font color=Red>[</font>ExtSubsetDecl<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq+<a name="(line264)"></a>+<a name="(line265)"></a><a name="NotationDecl"></a><font color=Green><u>data</u></font> NotationDecl    <font color=Red>=</font> NOTATION Name <font color=Cyan>(</font>Either ExternalID PublicID<font color=Cyan>)</font> <font color=Green><u>deriving</u></font> Eq+<a name="(line266)"></a><a name="PublicID"></a><font color=Green><u>newtype</u></font> PublicID     <font color=Red>=</font> PUBLICID PubidLiteral <font color=Green><u>deriving</u></font> Eq+<a name="(line267)"></a><a name="EncodingDecl"></a><font color=Green><u>newtype</u></font> EncodingDecl <font color=Red>=</font> EncodingDecl String <font color=Green><u>deriving</u></font> Eq+<a name="(line268)"></a>+<a name="(line269)"></a><a name="Name"></a><font color=Green><u>type</u></font> Name     <font color=Red>=</font> String           <font color=Blue>-- non-empty string</font>+<a name="(line270)"></a><a name="Names"></a><font color=Green><u>type</u></font> Names    <font color=Red>=</font> <font color=Red>[</font>Name<font color=Red>]</font>           <font color=Blue>-- non-empty list</font>+<a name="(line271)"></a><a name="NmToken"></a><font color=Green><u>type</u></font> NmToken  <font color=Red>=</font> String           <font color=Blue>-- non-empty string</font>+<a name="(line272)"></a><a name="NmTokens"></a><font color=Green><u>type</u></font> NmTokens <font color=Red>=</font> <font color=Red>[</font>NmToken<font color=Red>]</font>        <font color=Blue>-- non-empty list</font>+<a name="(line273)"></a>+<a name="(line274)"></a><a name="AttValue"></a><font color=Green><u>data</u></font> AttValue    <font color=Red>=</font> AttValue <font color=Red>[</font>Either String Reference<font color=Red>]</font> <font color=Green><u>deriving</u></font> Eq+<a name="(line275)"></a><font color=Green><u>instance</u></font> Show AttValue <font color=Green><u>where</u></font>+<a name="(line276)"></a>  show <font color=Cyan>(</font>AttValue v<font color=Cyan>)</font> <font color=Red>=</font> concatMap decode v+<a name="(line277)"></a>    <font color=Green><u>where</u></font>+<a name="(line278)"></a>      decode <font color=Cyan>(</font>Left  w<font color=Cyan>)</font>               <font color=Red>=</font> w+<a name="(line279)"></a>      decode <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity ent<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"&amp;"</font><font color=Cyan>++</font>ent<font color=Cyan>++</font><font color=Magenta>";"</font>+<a name="(line280)"></a>      decode <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefChar cref<font color=Cyan>)</font><font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"&amp;"</font><font color=Cyan>++</font>show cref<font color=Cyan>++</font><font color=Magenta>";"</font>+<a name="(line281)"></a>+<a name="(line282)"></a><a name="EntityValue"></a><font color=Green><u>data</u></font> EntityValue <font color=Red>=</font> EntityValue <font color=Red>[</font>EV<font color=Red>]</font> <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line283)"></a><a name="EV"></a><font color=Green><u>data</u></font> EV <font color=Red>=</font> EVString String+<a name="(line284)"></a> <font color=Blue>--  -- | EVPERef PEReference</font>+<a name="(line285)"></a>        <font color=Red>|</font> EVRef Reference  <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line286)"></a><a name="PubidLiteral"></a><font color=Green><u>newtype</u></font> PubidLiteral  <font color=Red>=</font> PubidLiteral String <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line287)"></a><a name="SystemLiteral"></a><font color=Green><u>newtype</u></font> SystemLiteral <font color=Red>=</font> SystemLiteral String <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line288)"></a><a name="CharData"></a><font color=Green><u>type</u></font> CharData         <font color=Red>=</font> String+<a name="(line289)"></a><a name="CDSect"></a><font color=Green><u>type</u></font> CDSect           <font color=Red>=</font> CharData+<a name="(line290)"></a>+<a name="(line291)"></a><font color=Green><u>instance</u></font> Eq ElemTag <font color=Green><u>where</u></font>+<a name="(line292)"></a>    <font color=Cyan>(</font>ElemTag n <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Cyan>==</font> <font color=Cyan>(</font>ElemTag m <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> n<font color=Cyan>==</font>m </pre> </html>
docs/HaXml/src/Text/XML/HaXml/Validate.html view
@@ -222,49 +222,55 @@ <a name="(line220)"></a> <a name="(line221)"></a>    choice elem ns cps <font color=Red>=</font>  <font color=Blue>-- return only those parses that don't give any errors</font> <a name="(line222)"></a>        <font color=Red>[</font> rem <font color=Red>|</font> <font color=Cyan>(</font>[]<font color=Cyan>,</font>rem<font color=Cyan>)</font> <font color=Red>&lt;-</font> map <font color=Cyan>(</font><font color=Red>\</font>cp<font color=Red>-&gt;</font> checkCP elem <font color=Cyan>(</font>definite cp<font color=Cyan>)</font> ns<font color=Cyan>)</font> cps <font color=Red>]</font>-<a name="(line223)"></a>        <font color=Green><u>where</u></font> definite <font color=Cyan>(</font>TagName n Query<font color=Cyan>)</font>  <font color=Red>=</font> TagName n None-<a name="(line224)"></a>              definite <font color=Cyan>(</font>Choice cps Query<font color=Cyan>)</font> <font color=Red>=</font> Choice cps None-<a name="(line225)"></a>              definite <font color=Cyan>(</font>Seq cps Query<font color=Cyan>)</font>    <font color=Red>=</font> Seq cps None-<a name="(line226)"></a>              definite <font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font>   <font color=Red>=</font> TagName n Plus-<a name="(line227)"></a>              definite <font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font>  <font color=Red>=</font> Choice cps Plus-<a name="(line228)"></a>              definite <font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font>     <font color=Red>=</font> Seq cps Plus-<a name="(line229)"></a>              definite x                  <font color=Red>=</font> x-<a name="(line230)"></a>    sequence elem ns cps <font color=Red>=</font>  <font color=Blue>-- accumulate errors down the sequence</font>-<a name="(line231)"></a>        foldl <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>es<font color=Cyan>,</font>ns<font color=Cyan>)</font> cp<font color=Red>-&gt;</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>es'<font color=Cyan>,</font>ns'<font color=Cyan>)</font> <font color=Red>=</font> checkCP elem cp ns-<a name="(line232)"></a>                             <font color=Green><u>in</u></font> <font color=Cyan>(</font>es<font color=Cyan>++</font>es'<font color=Cyan>,</font> ns'<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line233)"></a>              <font color=Cyan>(</font>[]<font color=Cyan>,</font>ns<font color=Cyan>)</font> cps-<a name="(line234)"></a>-<a name="(line235)"></a>    checkIDs elem <font color=Red>=</font>-<a name="(line236)"></a>        <font color=Green><u>let</u></font> celem <font color=Red>=</font> CElem elem undefined-<a name="(line237)"></a>            showAttr a <font color=Red>=</font> iffind a literal none-<a name="(line238)"></a>            idElems <font color=Red>=</font> concatMap <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>name<font color=Cyan>,</font>at<font color=Cyan>)</font><font color=Red>-&gt;</font> multi <font color=Cyan>(</font>showAttr at <font color=Cyan>`o`</font> tag name<font color=Cyan>)</font>-<a name="(line239)"></a>                                                    celem<font color=Cyan>)</font>-<a name="(line240)"></a>                                <font color=Cyan>(</font>ids dtd<font color=Cyan>)</font>-<a name="(line241)"></a>            badIds  <font color=Red>=</font> duplicates <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Red>-&gt;</font>s<font color=Cyan>)</font> idElems<font color=Cyan>)</font>-<a name="(line242)"></a>        <font color=Green><u>in</u></font> not <font color=Cyan>(</font>null badIds<font color=Cyan>)</font> <font color=Cyan>`gives`</font>-<a name="(line243)"></a>               <font color=Cyan>(</font><font color=Magenta>"These attribute values of type ID are not unique: "</font>-<a name="(line244)"></a>                <font color=Cyan>++</font>concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> badIds<font color=Cyan>)</font><font color=Cyan>++</font><font color=Magenta>"."</font><font color=Cyan>)</font>-<a name="(line245)"></a>-<a name="(line246)"></a>-<a name="(line247)"></a><a name="cpError"></a>cpError <font color=Red>::</font> Name <font color=Red>-&gt;</font> CP <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font>-<a name="(line248)"></a>cpError elem cp <font color=Red>=</font>-<a name="(line249)"></a>    <font color=Red>[</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt; should contain "</font><font color=Cyan>++</font>display cp<font color=Cyan>++</font><font color=Magenta>" but does not."</font><font color=Red>]</font>-<a name="(line250)"></a>+<a name="(line223)"></a>        <font color=Cyan>++</font> <font color=Red>[</font> ns <font color=Red>|</font> all possEmpty cps <font color=Red>]</font>+<a name="(line224)"></a>        <font color=Green><u>where</u></font> definite <font color=Cyan>(</font>TagName n Query<font color=Cyan>)</font>  <font color=Red>=</font> TagName n None+<a name="(line225)"></a>              definite <font color=Cyan>(</font>Choice cps Query<font color=Cyan>)</font> <font color=Red>=</font> Choice cps None+<a name="(line226)"></a>              definite <font color=Cyan>(</font>Seq cps Query<font color=Cyan>)</font>    <font color=Red>=</font> Seq cps None+<a name="(line227)"></a>              definite <font color=Cyan>(</font>TagName n Star<font color=Cyan>)</font>   <font color=Red>=</font> TagName n Plus+<a name="(line228)"></a>              definite <font color=Cyan>(</font>Choice cps Star<font color=Cyan>)</font>  <font color=Red>=</font> Choice cps Plus+<a name="(line229)"></a>              definite <font color=Cyan>(</font>Seq cps Star<font color=Cyan>)</font>     <font color=Red>=</font> Seq cps Plus+<a name="(line230)"></a>              definite x                  <font color=Red>=</font> x+<a name="(line231)"></a>              possEmpty <font color=Cyan>(</font>TagName <font color=Green><u>_</u></font> mod<font color=Cyan>)</font>   <font color=Red>=</font> mod <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> <font color=Red>[</font>Query<font color=Cyan>,</font>Star<font color=Red>]</font>+<a name="(line232)"></a>              possEmpty <font color=Cyan>(</font>Choice cps None<font color=Cyan>)</font> <font color=Red>=</font> all possEmpty cps+<a name="(line233)"></a>              possEmpty <font color=Cyan>(</font>Choice <font color=Green><u>_</u></font> mod<font color=Cyan>)</font>    <font color=Red>=</font> mod <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> <font color=Red>[</font>Query<font color=Cyan>,</font>Star<font color=Red>]</font>+<a name="(line234)"></a>              possEmpty <font color=Cyan>(</font>Seq cps None<font color=Cyan>)</font>    <font color=Red>=</font> all possEmpty cps+<a name="(line235)"></a>              possEmpty <font color=Cyan>(</font>Seq <font color=Green><u>_</u></font> mod<font color=Cyan>)</font>       <font color=Red>=</font> mod <font color=Cyan>`</font>Prelude<font color=Cyan>.</font>elem<font color=Cyan>`</font> <font color=Red>[</font>Query<font color=Cyan>,</font>Star<font color=Red>]</font>+<a name="(line236)"></a>    sequence elem ns cps <font color=Red>=</font>  <font color=Blue>-- accumulate errors down the sequence</font>+<a name="(line237)"></a>        foldl <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>es<font color=Cyan>,</font>ns<font color=Cyan>)</font> cp<font color=Red>-&gt;</font> <font color=Green><u>let</u></font> <font color=Cyan>(</font>es'<font color=Cyan>,</font>ns'<font color=Cyan>)</font> <font color=Red>=</font> checkCP elem cp ns+<a name="(line238)"></a>                             <font color=Green><u>in</u></font> <font color=Cyan>(</font>es<font color=Cyan>++</font>es'<font color=Cyan>,</font> ns'<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line239)"></a>              <font color=Cyan>(</font>[]<font color=Cyan>,</font>ns<font color=Cyan>)</font> cps+<a name="(line240)"></a>+<a name="(line241)"></a>    checkIDs elem <font color=Red>=</font>+<a name="(line242)"></a>        <font color=Green><u>let</u></font> celem <font color=Red>=</font> CElem elem undefined+<a name="(line243)"></a>            showAttr a <font color=Red>=</font> iffind a literal none+<a name="(line244)"></a>            idElems <font color=Red>=</font> concatMap <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>name<font color=Cyan>,</font>at<font color=Cyan>)</font><font color=Red>-&gt;</font> multi <font color=Cyan>(</font>showAttr at <font color=Cyan>`o`</font> tag name<font color=Cyan>)</font>+<a name="(line245)"></a>                                                    celem<font color=Cyan>)</font>+<a name="(line246)"></a>                                <font color=Cyan>(</font>ids dtd<font color=Cyan>)</font>+<a name="(line247)"></a>            badIds  <font color=Red>=</font> duplicates <font color=Cyan>(</font>map <font color=Cyan>(</font><font color=Red>\</font><font color=Cyan>(</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Red>-&gt;</font>s<font color=Cyan>)</font> idElems<font color=Cyan>)</font>+<a name="(line248)"></a>        <font color=Green><u>in</u></font> not <font color=Cyan>(</font>null badIds<font color=Cyan>)</font> <font color=Cyan>`gives`</font>+<a name="(line249)"></a>               <font color=Cyan>(</font><font color=Magenta>"These attribute values of type ID are not unique: "</font>+<a name="(line250)"></a>                <font color=Cyan>++</font>concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> badIds<font color=Cyan>)</font><font color=Cyan>++</font><font color=Magenta>"."</font><font color=Cyan>)</font> <a name="(line251)"></a>-<a name="(line252)"></a><a name="display"></a>display <font color=Red>::</font> CP <font color=Red>-&gt;</font> String-<a name="(line253)"></a>display <font color=Cyan>(</font>TagName name mod<font color=Cyan>)</font> <font color=Red>=</font> name <font color=Cyan>++</font> modifier mod-<a name="(line254)"></a>display <font color=Cyan>(</font>Choice cps mod<font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"("</font> <font color=Cyan>++</font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>"|"</font> <font color=Cyan>(</font>map display cps<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line255)"></a>                             <font color=Cyan>++</font> <font color=Magenta>")"</font> <font color=Cyan>++</font> modifier mod-<a name="(line256)"></a>display <font color=Cyan>(</font>Seq cps mod<font color=Cyan>)</font>      <font color=Red>=</font> <font color=Magenta>"("</font> <font color=Cyan>++</font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> <font color=Cyan>(</font>map display cps<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line257)"></a>                             <font color=Cyan>++</font> <font color=Magenta>")"</font> <font color=Cyan>++</font> modifier mod-<a name="(line258)"></a>-<a name="(line259)"></a><a name="modifier"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-&gt;</font> String-<a name="(line260)"></a>modifier None  <font color=Red>=</font> <font color=Magenta>""</font>-<a name="(line261)"></a>modifier Query <font color=Red>=</font> <font color=Magenta>"?"</font>-<a name="(line262)"></a>modifier Star  <font color=Red>=</font> <font color=Magenta>"*"</font>-<a name="(line263)"></a>modifier Plus  <font color=Red>=</font> <font color=Magenta>"+"</font>+<a name="(line252)"></a>+<a name="(line253)"></a><a name="cpError"></a>cpError <font color=Red>::</font> Name <font color=Red>-&gt;</font> CP <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font>+<a name="(line254)"></a>cpError elem cp <font color=Red>=</font>+<a name="(line255)"></a>    <font color=Red>[</font><font color=Magenta>"Element &lt;"</font><font color=Cyan>++</font>elem<font color=Cyan>++</font><font color=Magenta>"&gt; should contain "</font><font color=Cyan>++</font>display cp<font color=Cyan>++</font><font color=Magenta>" but does not."</font><font color=Red>]</font>+<a name="(line256)"></a>+<a name="(line257)"></a>+<a name="(line258)"></a><a name="display"></a>display <font color=Red>::</font> CP <font color=Red>-&gt;</font> String+<a name="(line259)"></a>display <font color=Cyan>(</font>TagName name mod<font color=Cyan>)</font> <font color=Red>=</font> name <font color=Cyan>++</font> modifier mod+<a name="(line260)"></a>display <font color=Cyan>(</font>Choice cps mod<font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"("</font> <font color=Cyan>++</font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>"|"</font> <font color=Cyan>(</font>map display cps<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line261)"></a>                             <font color=Cyan>++</font> <font color=Magenta>")"</font> <font color=Cyan>++</font> modifier mod+<a name="(line262)"></a>display <font color=Cyan>(</font>Seq cps mod<font color=Cyan>)</font>      <font color=Red>=</font> <font color=Magenta>"("</font> <font color=Cyan>++</font> concat <font color=Cyan>(</font>intersperse <font color=Magenta>","</font> <font color=Cyan>(</font>map display cps<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line263)"></a>                             <font color=Cyan>++</font> <font color=Magenta>")"</font> <font color=Cyan>++</font> modifier mod <a name="(line264)"></a>-<a name="(line265)"></a><a name="duplicates"></a>duplicates <font color=Red>::</font> Eq a <font color=Red>=&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font>-<a name="(line266)"></a>duplicates xs <font color=Red>=</font> xs <font color=Cyan>\\</font> <font color=Cyan>(</font>nub xs<font color=Cyan>)</font>+<a name="(line265)"></a><a name="modifier"></a>modifier <font color=Red>::</font> Modifier <font color=Red>-&gt;</font> String+<a name="(line266)"></a>modifier None  <font color=Red>=</font> <font color=Magenta>""</font>+<a name="(line267)"></a>modifier Query <font color=Red>=</font> <font color=Magenta>"?"</font>+<a name="(line268)"></a>modifier Star  <font color=Red>=</font> <font color=Magenta>"*"</font>+<a name="(line269)"></a>modifier Plus  <font color=Red>=</font> <font color=Magenta>"+"</font>+<a name="(line270)"></a>+<a name="(line271)"></a><a name="duplicates"></a>duplicates <font color=Red>::</font> Eq a <font color=Red>=&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font>+<a name="(line272)"></a>duplicates xs <font color=Red>=</font> xs <font color=Cyan>\\</font> <font color=Cyan>(</font>nub xs<font color=Cyan>)</font> </pre> </html>
docs/HaXml/src/Text/XML/HaXml/XmlContent.html view
@@ -1,640 +1,683 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html>-<pre><a name="(line1)"></a><font color=Blue>{-# OPTIONS -fglasgow-exts #-}</font>-<a name="(line2)"></a><font color=Blue>-- | The class 'XmlContent' is a kind of replacement for Read and Show:</font>-<a name="(line3)"></a><font color=Blue>--   it provides conversions between a generic XML tree representation</font>-<a name="(line4)"></a><font color=Blue>--   and your own more specialised typeful Haskell data trees.</font>-<a name="(line5)"></a><font color=Blue>--</font>-<a name="(line6)"></a><font color=Blue>--   If you are starting with a set of Haskell datatypes, use DrIFT to</font>-<a name="(line7)"></a><font color=Blue>--   derive instances of this class for you:</font>-<a name="(line8)"></a><font color=Blue>--       http:\/\/repetae.net\/john\/computer\/haskell\/DrIFT</font>-<a name="(line9)"></a><font color=Blue>--   If you are starting with an XML DTD, use HaXml's tool DtdToHaskell</font>-<a name="(line10)"></a><font color=Blue>--   to generate both the Haskell types and the corresponding instances.</font>-<a name="(line11)"></a><font color=Blue>--</font>-<a name="(line12)"></a><font color=Blue>--   This unified class interface replaces two previous (somewhat similar)</font>-<a name="(line13)"></a><font color=Blue>--   classes: Haskell2Xml and Xml2Haskell.  There was no real reason to have</font>-<a name="(line14)"></a><font color=Blue>--   separate classes depending on how you originally defined your datatypes.</font>-<a name="(line15)"></a>-<a name="(line16)"></a><font color=Blue>--   The methods 'toContents' and 'parseContents' convert a value to and from</font>-<a name="(line17)"></a><font color=Blue>--   a generic internal representation of an XML document /without/ a DTD.</font>-<a name="(line18)"></a><font color=Blue>--   The functions 'toXml' and 'fromXml' convert a value to and from a generic</font>-<a name="(line19)"></a><font color=Blue>--   internal representation of an XML document /including/ a DTD.</font>-<a name="(line20)"></a><font color=Blue>--   The functions 'readXml' and 'showXml' convert to and from Strings.</font>-<a name="(line21)"></a><font color=Blue>--   The functions 'fReadXml' and 'fWriteXml' do the conversion to and from</font>-<a name="(line22)"></a><font color=Blue>--   the given filenames.</font>-<a name="(line23)"></a><font color=Blue>--   The functions 'hGetXml' and 'hPutXml' do the conversion to and from</font>-<a name="(line24)"></a><font color=Blue>--   the given file handles.</font>-<a name="(line25)"></a><font color=Blue>--   (See the type signatures.)</font>-<a name="(line26)"></a><font color=Blue>--  </font>-<a name="(line27)"></a>-<a name="(line28)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent-<a name="(line29)"></a>  <font color=Cyan>(</font> <font color=Blue>-- * Re-export the relevant set of generic XML document type definitions</font>-<a name="(line30)"></a>    Document<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line31)"></a>  <font color=Cyan>,</font> Element<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line32)"></a>  <font color=Cyan>,</font> ElemTag<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line33)"></a>  <font color=Cyan>,</font> Content<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line34)"></a>  <font color=Cyan>,</font> Attribute<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line35)"></a>  <font color=Cyan>,</font> AttValue<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line36)"></a>  <font color=Cyan>,</font> Prolog<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line37)"></a>  <font color=Cyan>,</font> Reference<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line38)"></a>  <font color=Blue>-- * The enabling classes, that define parsing\/unparsing between Haskell</font>-<a name="(line39)"></a>  <font color=Blue>--   datatypes and a generic XML representation.</font>-<a name="(line40)"></a>  <font color=Cyan>,</font> XmlContent<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line41)"></a>  <font color=Cyan>,</font> XmlAttributes<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line42)"></a>  <font color=Cyan>,</font> XmlAttrType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line43)"></a>  <font color=Blue>-- ** Auxiliaries for writing parsers in the XmlContent class</font>-<a name="(line44)"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly-<a name="(line45)"></a>  <font color=Cyan>,</font> XMLParser-<a name="(line46)"></a>  <font color=Cyan>,</font> content<font color=Cyan>,</font> posnElement<font color=Cyan>,</font> element<font color=Cyan>,</font> interior<font color=Cyan>,</font> inElement<font color=Cyan>,</font> text<font color=Cyan>,</font> attributes-<a name="(line47)"></a>  <font color=Cyan>,</font> posnElementWith<font color=Cyan>,</font> elementWith<font color=Cyan>,</font> inElementWith-<a name="(line48)"></a>  <font color=Cyan>,</font> choice<font color=Cyan>,</font> definite <font color=Blue>-- ???</font>-<a name="(line49)"></a>  <font color=Blue>-- ** Auxiliaries for generating in the XmlContent class</font>-<a name="(line50)"></a>  <font color=Cyan>,</font> mkElem<font color=Cyan>,</font> mkElemC<font color=Cyan>,</font> mkAttr-<a name="(line51)"></a>  <font color=Cyan>,</font> toText<font color=Cyan>,</font> toCData-<a name="(line52)"></a>  <font color=Blue>-- ** Auxiliaries for the attribute-related classes</font>-<a name="(line53)"></a>  <font color=Cyan>,</font> maybeToAttr<font color=Cyan>,</font> defaultToAttr-<a name="(line54)"></a>  <font color=Cyan>,</font> definiteA<font color=Cyan>,</font> defaultA<font color=Cyan>,</font> possibleA<font color=Cyan>,</font> fromAttrToStr<font color=Cyan>,</font> toAttrFrStr-<a name="(line55)"></a>  <font color=Cyan>,</font> Defaultable<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line56)"></a>  <font color=Cyan>,</font> str2attr<font color=Cyan>,</font> attr2str<font color=Cyan>,</font> attval-<a name="(line57)"></a>  <font color=Cyan>,</font> catMaybes	<font color=Blue>-- re-exported from Maybe</font>-<a name="(line58)"></a>  <font color=Blue>-- * Whole-document conversion functions</font>-<a name="(line59)"></a>  <font color=Cyan>,</font> toXml<font color=Cyan>,</font> fromXml-<a name="(line60)"></a>  <font color=Cyan>,</font> readXml<font color=Cyan>,</font> showXml<font color=Cyan>,</font> fpsShowXml-<a name="(line61)"></a>  <font color=Cyan>,</font> fReadXml<font color=Cyan>,</font> fWriteXml<font color=Cyan>,</font> fpsWriteXml-<a name="(line62)"></a>  <font color=Cyan>,</font> hGetXml<font color=Cyan>,</font>  hPutXml<font color=Cyan>,</font> fpsHPutXml-<a name="(line63)"></a>  <font color=Blue>-- * Explicit representation of Haskell datatype information</font>-<a name="(line64)"></a>  <font color=Blue>--   (for conversion to a DTD)</font>-<a name="(line65)"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping-<a name="(line66)"></a>  <font color=Blue>-- * Types useful for some content models</font>-<a name="(line67)"></a>  <font color=Cyan>,</font> List1<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line68)"></a>  <font color=Cyan>,</font> ANYContent<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>-<a name="(line69)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line70)"></a>-<a name="(line71)"></a><font color=Green><u>import</u></font> IO-<a name="(line72)"></a><font color=Green><u>import</u></font> Maybe <font color=Cyan>(</font>catMaybes<font color=Cyan>)</font>-<a name="(line73)"></a><font color=Green><u>import</u></font> Char  <font color=Cyan>(</font>chr<font color=Cyan>,</font> ord<font color=Cyan>,</font> isSpace<font color=Cyan>)</font>-<a name="(line74)"></a><font color=Green><u>import</u></font> List  <font color=Cyan>(</font>intersperse<font color=Cyan>,</font> isPrefixOf<font color=Cyan>,</font> isSuffixOf<font color=Cyan>,</font> partition<font color=Cyan>)</font>-<a name="(line75)"></a>-<a name="(line76)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ <font color=Cyan>(</font>render<font color=Cyan>)</font>-<a name="(line77)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty <font color=Green><u>as</u></font> PP-<a name="(line78)"></a>-<a name="(line79)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types-<a name="(line80)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping-<a name="(line81)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn     <font color=Cyan>(</font>Posn<font color=Cyan>,</font> posInNewCxt<font color=Cyan>)</font>-<a name="(line82)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty   <font color=Cyan>(</font>document<font color=Cyan>)</font>-<a name="(line83)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse    <font color=Cyan>(</font>xmlParse<font color=Cyan>,</font> fst3<font color=Cyan>)</font>-<a name="(line84)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim <font color=Cyan>(</font>Verbatim<font color=Cyan>(</font>verbatim<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line85)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ByteStringPP <font color=Green><u>as</u></font> FPS <font color=Cyan>(</font>document<font color=Cyan>)</font>-<a name="(line86)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8 <font color=Green><u>as</u></font> FPS-<a name="(line87)"></a>-<a name="(line88)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly-<a name="(line89)"></a>-<a name="(line90)"></a><font color=Blue>--  #define DEBUG</font>-<a name="(line91)"></a>-<a name="(line92)"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>-<a name="(line93)"></a><font color=Green><u>import</u></font> Debug<font color=Cyan>.</font>Trace<font color=Cyan>(</font>trace<font color=Cyan>)</font>-<a name="(line94)"></a><a name="debug"></a>debug <font color=Red>::</font> a <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> a-<a name="(line95)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> s <font color=Red>=</font> trace s v-<a name="(line96)"></a><font color=Magenta><em>#else</em></font>-<a name="(line97)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> s <font color=Red>=</font> v-<a name="(line98)"></a><font color=Magenta><em>#endif</em></font>-<a name="(line99)"></a>-<a name="(line100)"></a>-<a name="(line101)"></a><a name="attval"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line102)"></a><font color=Blue>-- | Read a single attribute called "value".</font>-<a name="(line103)"></a>attval <font color=Red>::</font> <font color=Cyan>(</font>Read a<font color=Cyan>)</font> <font color=Red>=&gt;</font> Element i <font color=Red>-&gt;</font> a-<a name="(line104)"></a>attval <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"value"</font><font color=Cyan>,</font>v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> <font color=Red>=</font> read <font color=Cyan>(</font>show v<font color=Cyan>)</font>-<a name="(line105)"></a>-<a name="(line106)"></a><a name="mkAttr"></a><font color=Blue>-- | Generate a single attribute.</font>-<a name="(line107)"></a>mkAttr <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Attribute-<a name="(line108)"></a>mkAttr n v <font color=Red>=</font> <font color=Cyan>(</font>n<font color=Cyan>,</font> AttValue <font color=Red>[</font>Left v<font color=Red>]</font><font color=Cyan>)</font>-<a name="(line109)"></a>-<a name="(line110)"></a><a name="mkElem"></a><font color=Blue>-- | Generate an element with no attributes, named for its HType.</font>-<a name="(line111)"></a>mkElem <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font> <font color=Red>-&gt;</font> Content ()-<a name="(line112)"></a>mkElem x cs  <font color=Red>=</font> CElem <font color=Cyan>(</font>Elem <font color=Cyan>(</font>showHType <font color=Cyan>(</font>toHType x<font color=Cyan>)</font> <font color=Magenta>""</font><font color=Cyan>)</font> [] cs<font color=Cyan>)</font> ()-<a name="(line113)"></a>-<a name="(line114)"></a><a name="mkElemC"></a><font color=Blue>-- | Generate an element with no attributes, named directly.</font>-<a name="(line115)"></a>mkElemC <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font> <font color=Red>-&gt;</font> Content ()-<a name="(line116)"></a>mkElemC x cs <font color=Red>=</font> CElem <font color=Cyan>(</font>Elem x [] cs<font color=Cyan>)</font> ()-<a name="(line117)"></a>-<a name="(line118)"></a><a name="toText"></a><font color=Blue>-- | Turn a simple string into XML text. </font>-<a name="(line119)"></a>toText <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>-<a name="(line120)"></a>toText s <font color=Red>=</font> <font color=Red>[</font>CString False s ()<font color=Red>]</font>-<a name="(line121)"></a>-<a name="(line122)"></a><a name="toCData"></a><font color=Blue>-- | Turn a string into an XML CDATA section.</font>-<a name="(line123)"></a><font color=Blue>--   (i.e. special characters like '&amp;' are preserved without interpretation.)</font>-<a name="(line124)"></a>toCData <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>-<a name="(line125)"></a>toCData s <font color=Red>=</font> <font color=Red>[</font>CString True s ()<font color=Red>]</font>-<a name="(line126)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line127)"></a>-<a name="(line128)"></a>	<font color=Blue>-- probably want to write DTD separately from value, and have</font>-<a name="(line129)"></a>	<font color=Blue>-- easy ways to combine DTD + value into a document, or write</font>-<a name="(line130)"></a>	<font color=Blue>-- them to separate files.</font>-<a name="(line131)"></a>-<a name="(line132)"></a><a name="fReadXml"></a><font color=Blue>-- | Read an XML document from a file and convert it to a fully-typed</font>-<a name="(line133)"></a><font color=Blue>--   Haskell value.</font>-<a name="(line134)"></a>fReadXml  <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> FilePath <font color=Red>-&gt;</font> IO a-<a name="(line135)"></a>fReadXml fp <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line136)"></a>    f <font color=Red>&lt;-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdin-<a name="(line137)"></a>           <font color=Green><u>else</u></font> openFile fp ReadMode <font color=Cyan>)</font>-<a name="(line138)"></a>    x <font color=Red>&lt;-</font> hGetContents f -<a name="(line139)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse fp x-<a name="(line140)"></a>        y' <font color=Red>=</font> CElem y <font color=Cyan>(</font>posInNewCxt fp Nothing<font color=Cyan>)</font>-<a name="(line141)"></a>    either fail return <font color=Cyan>(</font>fst <font color=Cyan>(</font>runParser parseContents <font color=Red>[</font>y'<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line142)"></a>-<a name="(line143)"></a><a name="fWriteXml"></a><font color=Blue>-- | Write a fully-typed Haskell value to the given file as an XML</font>-<a name="(line144)"></a><font color=Blue>--   document.</font>-<a name="(line145)"></a>fWriteXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> FilePath <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()-<a name="(line146)"></a>fWriteXml fp x <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line147)"></a>    f <font color=Red>&lt;-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout-<a name="(line148)"></a>           <font color=Green><u>else</u></font> openFile fp WriteMode <font color=Cyan>)</font>-<a name="(line149)"></a>    hPutXml f False x-<a name="(line150)"></a>    hClose f-<a name="(line151)"></a>-<a name="(line152)"></a><a name="fpsWriteXml"></a><font color=Blue>-- | Write any Haskell value to the given file as an XML document,</font>-<a name="(line153)"></a><font color=Blue>--   using the FastPackedString interface (output will not be prettified).</font>-<a name="(line154)"></a>fpsWriteXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> FilePath <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()-<a name="(line155)"></a>fpsWriteXml fp x <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line156)"></a>    f <font color=Red>&lt;-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout-<a name="(line157)"></a>           <font color=Green><u>else</u></font> openFile fp WriteMode <font color=Cyan>)</font>-<a name="(line158)"></a>    fpsHPutXml f False x-<a name="(line159)"></a>    hClose f-<a name="(line160)"></a>-<a name="(line161)"></a><a name="readXml"></a><font color=Blue>-- | Read a fully-typed XML document from a string.</font>-<a name="(line162)"></a>readXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> String <font color=Red>-&gt;</font> Either String a-<a name="(line163)"></a>readXml s <font color=Red>=</font>-<a name="(line164)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse <font color=Magenta>"string input"</font> s <font color=Green><u>in</u></font>-<a name="(line165)"></a>    fst <font color=Cyan>(</font>runParser parseContents-<a name="(line166)"></a>                   <font color=Red>[</font>CElem y <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"string input"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>-<a name="(line167)"></a>-<a name="(line168)"></a><a name="showXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (without DTD).</font>-<a name="(line169)"></a>showXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> String-<a name="(line170)"></a>showXml dtd x <font color=Red>=</font>-<a name="(line171)"></a>    <font color=Green><u>case</u></font> toContents x <font color=Green><u>of</u></font>-<a name="(line172)"></a>      <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>render <font color=Cyan>.</font> document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x-<a name="(line173)"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Magenta>""</font>-<a name="(line174)"></a>-<a name="(line175)"></a><a name="fpsShowXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a ByteString (without DTD).</font>-<a name="(line176)"></a>fpsShowXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> FPS<font color=Cyan>.</font>ByteString-<a name="(line177)"></a>fpsShowXml dtd x <font color=Red>=</font>-<a name="(line178)"></a>    <font color=Green><u>case</u></font> toContents x <font color=Green><u>of</u></font>-<a name="(line179)"></a>      <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>FPS<font color=Cyan>.</font>document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x-<a name="(line180)"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> FPS<font color=Cyan>.</font>empty-<a name="(line181)"></a>-<a name="(line182)"></a>-<a name="(line183)"></a><a name="toXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (with or without DTD).</font>-<a name="(line184)"></a>toXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Document ()-<a name="(line185)"></a>toXml dtd value <font color=Red>=</font>-<a name="(line186)"></a>    <font color=Green><u>let</u></font> ht <font color=Red>=</font> toHType value <font color=Green><u>in</u></font>-<a name="(line187)"></a>    Document <font color=Cyan>(</font>Prolog <font color=Cyan>(</font>Just <font color=Cyan>(</font>XMLDecl <font color=Magenta>"1.0"</font> Nothing Nothing<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line188)"></a>                     [] <font color=Cyan>(</font><font color=Green><u>if</u></font> dtd <font color=Green><u>then</u></font> Just <font color=Cyan>(</font>toDTD ht<font color=Cyan>)</font> <font color=Green><u>else</u></font> Nothing<font color=Cyan>)</font> []<font color=Cyan>)</font>-<a name="(line189)"></a>             emptyST-<a name="(line190)"></a>             <font color=Cyan>(</font> <font color=Green><u>case</u></font> <font color=Cyan>(</font>ht<font color=Cyan>,</font> toContents value<font color=Cyan>)</font> <font color=Green><u>of</u></font>-<a name="(line191)"></a>                 <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font>       <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> [] cs-<a name="(line192)"></a>                 <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> [] cs-<a name="(line193)"></a>                 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Red>[</font>CElem e ()<font color=Red>]</font><font color=Cyan>)</font>   <font color=Red>-&gt;</font> e <font color=Cyan>)</font>-<a name="(line194)"></a>             []-<a name="(line195)"></a>-<a name="(line196)"></a><a name="fromXml"></a><font color=Blue>-- | Read a Haskell value from an XML document, ignoring the DTD and</font>-<a name="(line197)"></a><font color=Blue>--   using the Haskell result type to determine how to parse it.</font>-<a name="(line198)"></a>fromXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Document Posn <font color=Red>-&gt;</font> Either String a-<a name="(line199)"></a>fromXml <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font>-<a name="(line200)"></a>  <font color=Red>|</font> <font color=Magenta>"tuple"</font> <font color=Cyan>`isPrefixOf`</font> n <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents cs<font color=Cyan>)</font>-<a name="(line201)"></a>  <font color=Red>|</font> <font color=Magenta>"-XML"</font>  <font color=Cyan>`isSuffixOf`</font> n <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents cs<font color=Cyan>)</font>-<a name="(line202)"></a>  <font color=Red>|</font> otherwise <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents-<a name="(line203)"></a>                               <font color=Red>[</font>CElem e <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"document"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>-<a name="(line204)"></a>-<a name="(line205)"></a>-<a name="(line206)"></a><a name="hGetXml"></a><font color=Blue>-- | Read a fully-typed XML document from a file handle.</font>-<a name="(line207)"></a>hGetXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Handle <font color=Red>-&gt;</font> IO a-<a name="(line208)"></a>hGetXml h <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line209)"></a>    x <font color=Red>&lt;-</font> hGetContents h -<a name="(line210)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse <font color=Magenta>"file handle"</font> x-<a name="(line211)"></a>    either fail return-<a name="(line212)"></a>           <font color=Cyan>(</font>fst <font color=Cyan>(</font>runParser parseContents-<a name="(line213)"></a>                           <font color=Red>[</font>CElem y <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"file handle"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line214)"></a>-<a name="(line215)"></a><a name="hPutXml"></a><font color=Blue>-- | Write a fully-typed XML document to a file handle.</font>-<a name="(line216)"></a>hPutXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Handle <font color=Red>-&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()-<a name="(line217)"></a>hPutXml h dtd x <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line218)"></a>    <font color=Cyan>(</font>hPutStrLn h <font color=Cyan>.</font> render <font color=Cyan>.</font> document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x-<a name="(line219)"></a>-<a name="(line220)"></a><a name="fpsHPutXml"></a><font color=Blue>-- | Write a fully-typed XML document to a file handle, using the</font>-<a name="(line221)"></a><font color=Blue>--   FastPackedString interface (output will not be prettified).</font>-<a name="(line222)"></a>fpsHPutXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Handle <font color=Red>-&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()-<a name="(line223)"></a>fpsHPutXml h dtd x <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line224)"></a>    <font color=Cyan>(</font>FPS<font color=Cyan>.</font>hPut h <font color=Cyan>.</font> FPS<font color=Cyan>.</font>document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x-<a name="(line225)"></a>-<a name="(line226)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line227)"></a>-<a name="(line228)"></a><a name="XMLParser"></a><font color=Blue>-- | We need a parsing monad for reading generic XML Content into specific</font>-<a name="(line229)"></a><a name="XMLParser"></a><font color=Blue>--   datatypes.  This is a specialisation of the Text.ParserCombinators.Poly</font>-<a name="(line230)"></a><a name="XMLParser"></a><font color=Blue>--   ones, where the input token type is fixed as XML Content.</font>-<a name="(line231)"></a><a name="XMLParser"></a><font color=Green><u>type</u></font> XMLParser a <font color=Red>=</font> Parser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font> a-<a name="(line232)"></a>-<a name="(line233)"></a>-<a name="(line234)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line235)"></a><font color=Blue>-- Some useful parsing combinators</font>-<a name="(line236)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line237)"></a>-<a name="(line238)"></a><a name="content"></a><font color=Blue>-- | The most primitive combinator for XMLParser - get one content item.</font>-<a name="(line239)"></a>content <font color=Red>::</font> String <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font>-<a name="(line240)"></a>content word <font color=Red>=</font> next <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Magenta>" when expecting "</font><font color=Cyan>++</font>word<font color=Cyan>)</font>-<a name="(line241)"></a>-<a name="(line242)"></a><a name="posnElementWith"></a><font color=Blue>-- | Get the next content element, checking that it has one of the required</font>-<a name="(line243)"></a><font color=Blue>--   tags, using the given matching function. </font>-<a name="(line244)"></a><font color=Blue>--   (Skips over comments and whitespace, rejects text and refs.</font>-<a name="(line245)"></a><font color=Blue>--    Also returns position of element.)</font>-<a name="(line246)"></a>posnElementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font>-<a name="(line247)"></a>                   <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Posn<font color=Cyan>,</font> Element Posn<font color=Cyan>)</font>-<a name="(line248)"></a>posnElementWith match tags <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line249)"></a>    <font color=Cyan>{</font> c <font color=Red>&lt;-</font> content <font color=Cyan>(</font>formatted tags<font color=Cyan>)</font>-<a name="(line250)"></a>    <font color=Cyan>;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>-<a name="(line251)"></a>          CElem e<font color=Red>@</font><font color=Cyan>(</font>Elem t <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> pos-<a name="(line252)"></a>              <font color=Red>|</font> any <font color=Cyan>(</font>match t<font color=Cyan>)</font> tags <font color=Red>-&gt;</font> return <font color=Cyan>(</font>pos<font color=Cyan>,</font> e<font color=Cyan>)</font>-<a name="(line253)"></a>              <font color=Red>|</font> otherwise          <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Found a &lt;"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>"&gt;, but expected "</font>-<a name="(line254)"></a>                                           <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>-<a name="(line255)"></a>          CString b s pos-<a name="(line256)"></a>              <font color=Red>|</font> not b <font color=Cyan>&amp;&amp;</font> all isSpace s <font color=Red>-&gt;</font> posnElementWith match tags-<a name="(line257)"></a>							<font color=Blue>-- ignore blank space</font>-<a name="(line258)"></a>              <font color=Red>|</font> otherwise <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Found text content, but expected "</font>-<a name="(line259)"></a>                                  <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\ntext is: "</font><font color=Cyan>++</font>s-<a name="(line260)"></a>                                  <font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>-<a name="(line261)"></a>          CRef r pos <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Found reference, but expected "</font>-<a name="(line262)"></a>                             <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\nreference is: "</font><font color=Cyan>++</font>verbatim r-<a name="(line263)"></a>                             <font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>-<a name="(line264)"></a>          CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> posnElementWith match tags  <font color=Blue>-- skip comments, PIs, etc.</font>-<a name="(line265)"></a>    <font color=Cyan>}</font>-<a name="(line266)"></a>  <font color=Green><u>where</u></font>-<a name="(line267)"></a>    formatted <font color=Red>[</font>t<font color=Red>]</font>  <font color=Red>=</font> <font color=Magenta>"a &lt;"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>"&gt;"</font>-<a name="(line268)"></a>    formatted tags <font color=Red>=</font> <font color=Magenta>"one of"</font><font color=Cyan>++</font> concatMap <font color=Cyan>(</font><font color=Red>\</font>t<font color=Red>-&gt;</font><font color=Magenta>" &lt;"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>"&gt;"</font><font color=Cyan>)</font> tags-<a name="(line269)"></a>-<a name="(line270)"></a><a name="posnElement"></a><font color=Blue>-- | A specialisation of @posnElementWith (==)@.</font>-<a name="(line271)"></a>posnElement <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Posn<font color=Cyan>,</font> Element Posn<font color=Cyan>)</font>-<a name="(line272)"></a>posnElement <font color=Red>=</font> posnElementWith <font color=Cyan>(</font><font color=Cyan>==</font><font color=Cyan>)</font>-<a name="(line273)"></a>-<a name="(line274)"></a><a name="element"></a><font color=Blue>-- | Get the next content element, checking that it has one of the required</font>-<a name="(line275)"></a><font color=Blue>--   tags.  (Skips over comments and whitespace, rejects text and refs.)</font>-<a name="(line276)"></a>element <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>-<a name="(line277)"></a>element tags <font color=Red>=</font> fmap snd <font color=Cyan>(</font>posnElement tags<font color=Cyan>)</font>-<a name="(line278)"></a>				<font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Element: "</font><font color=Cyan>++</font>unwords tags<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font>-<a name="(line279)"></a>-<a name="(line280)"></a><a name="elementWith"></a><font color=Blue>-- | Like element, only permits a more flexible match against the tagname.</font>-<a name="(line281)"></a>elementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>-<a name="(line282)"></a>elementWith match tags <font color=Red>=</font> fmap snd <font color=Cyan>(</font>posnElementWith match tags<font color=Cyan>)</font>-<a name="(line283)"></a>				<font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Element: "</font><font color=Cyan>++</font>unwords tags<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font>-<a name="(line284)"></a>-<a name="(line285)"></a><a name="interior"></a><font color=Blue>-- | Run an XMLParser on the contents of the given element (i.e. not on the</font>-<a name="(line286)"></a><font color=Blue>--   current monadic content sequence), checking that the contents are</font>-<a name="(line287)"></a><font color=Blue>--   exhausted, before returning the calculated value within the current</font>-<a name="(line288)"></a><font color=Blue>--   parser context.</font>-<a name="(line289)"></a>interior <font color=Red>::</font> Element Posn <font color=Red>-&gt;</font> XMLParser a <font color=Red>-&gt;</font> XMLParser a-<a name="(line290)"></a>interior <font color=Cyan>(</font>Elem e <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> p <font color=Red>=</font>-<a name="(line291)"></a>    <font color=Green><u>case</u></font> runParser p cs <font color=Green><u>of</u></font>-<a name="(line292)"></a>        <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> fail msg-<a name="(line293)"></a>        <font color=Cyan>(</font>Right x<font color=Cyan>,</font> []<font color=Cyan>)</font> <font color=Red>-&gt;</font> return x-<a name="(line294)"></a>        <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs<font color=Red>@</font><font color=Cyan>(</font>c<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line295)"></a>            <font color=Red>|</font> all onlyMisc cs <font color=Red>-&gt;</font> return x-<a name="(line296)"></a>            <font color=Red>|</font> otherwise       <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Too many elements inside &lt;"</font><font color=Cyan>++</font>e<font color=Cyan>++</font><font color=Magenta>"&gt; at\n"</font>-<a name="(line297)"></a>                                      <font color=Cyan>++</font>show <font color=Cyan>(</font>info c<font color=Cyan>)</font><font color=Cyan>++</font><font color=Magenta>"\n"</font>-<a name="(line298)"></a>                                      <font color=Cyan>++</font><font color=Magenta>"Found excess: "</font><font color=Cyan>++</font>verbatim c<font color=Cyan>)</font>-<a name="(line299)"></a>  <font color=Green><u>where</u></font> onlyMisc <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True-<a name="(line300)"></a>        onlyMisc <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>|</font> all isSpace s <font color=Red>=</font> True-<a name="(line301)"></a>        onlyMisc <font color=Green><u>_</u></font> <font color=Red>=</font> False-<a name="(line302)"></a>-<a name="(line303)"></a><a name="inElement"></a><font color=Blue>-- | A combination of element + interior.</font>-<a name="(line304)"></a>inElement <font color=Red>::</font> String <font color=Red>-&gt;</font> XMLParser a <font color=Red>-&gt;</font> XMLParser a-<a name="(line305)"></a>inElement tag p <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font>tag<font color=Red>]</font><font color=Cyan>;</font> commit <font color=Cyan>(</font>interior e p<font color=Cyan>)</font> <font color=Cyan>}</font>-<a name="(line306)"></a>-<a name="(line307)"></a><a name="inElementWith"></a><font color=Blue>-- | A combination of elementWith + interior.</font>-<a name="(line308)"></a>inElementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> XMLParser a <font color=Red>-&gt;</font> XMLParser a-<a name="(line309)"></a>inElementWith match tag p <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> elementWith match <font color=Red>[</font>tag<font color=Red>]</font>-<a name="(line310)"></a>                               <font color=Cyan>;</font> commit <font color=Cyan>(</font>interior e p<font color=Cyan>)</font> <font color=Cyan>}</font>-<a name="(line311)"></a>-<a name="(line312)"></a><a name="attributes"></a><font color=Blue>-- | Do some parsing of the attributes of the given element</font>-<a name="(line313)"></a>attributes <font color=Red>::</font> XmlAttributes a <font color=Red>=&gt;</font> Element Posn <font color=Red>-&gt;</font> XMLParser a-<a name="(line314)"></a>attributes <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Green><u>as</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> return <font color=Cyan>(</font>fromAttrs <font color=Green><u>as</u></font><font color=Cyan>)</font>-<a name="(line315)"></a>-<a name="(line316)"></a><a name="text"></a><font color=Blue>-- | 'text' is a counterpart to 'element', parsing text content if it</font>-<a name="(line317)"></a><font color=Blue>--   exists.  Adjacent text and references are coalesced.</font>-<a name="(line318)"></a>text <font color=Red>::</font> XMLParser String-<a name="(line319)"></a>text <font color=Red>=</font> text' []-<a name="(line320)"></a>  <font color=Green><u>where</u></font> text' acc <font color=Red>=</font>-<a name="(line321)"></a>          <font color=Green><u>do</u></font> <font color=Cyan>{</font> c <font color=Red>&lt;-</font> content <font color=Magenta>"plain text"</font>-<a name="(line322)"></a>             <font color=Cyan>;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>-<a name="(line323)"></a>                 CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font>        <font color=Red>-&gt;</font> text' <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font>-<a name="(line324)"></a>                 CRef <font color=Cyan>(</font>RefChar s<font color=Cyan>)</font> <font color=Green><u>_</u></font>   <font color=Red>-&gt;</font> text' <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"&amp;#"</font><font color=Cyan>++</font>show s<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font> <font color=Red><b>:</b></font>acc<font color=Cyan>)</font>-<a name="(line325)"></a>                 CRef <font color=Cyan>(</font>RefEntity s<font color=Cyan>)</font> <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> text' <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>'&amp;'</font><font color=Red><b>:</b></font>s<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font><font color=Red><b>:</b></font>acc<font color=Cyan>)</font>-<a name="(line326)"></a>                 CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font>            <font color=Red>-&gt;</font> text' acc-<a name="(line327)"></a>                 CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font>         <font color=Red>-&gt;</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> reparse <font color=Red>[</font>c<font color=Red>]</font> <font color=Blue>-- put it back!</font>-<a name="(line328)"></a>                                         <font color=Cyan>;</font> <font color=Green><u>if</u></font> null acc <font color=Green><u>then</u></font> fail <font color=Magenta>"empty string"</font>-<a name="(line329)"></a>                                           <font color=Green><u>else</u></font> return <font color=Cyan>(</font>concat <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line330)"></a>                                         <font color=Cyan>}</font>-<a name="(line331)"></a>             <font color=Cyan>}</font>-<a name="(line332)"></a>          <font color=Cyan>`onFail`</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> null acc <font color=Green><u>then</u></font> fail <font color=Magenta>"empty string"</font>-<a name="(line333)"></a>                     <font color=Green><u>else</u></font> return <font color=Cyan>(</font>concat <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>)</font>-<a name="(line334)"></a>-<a name="(line335)"></a>-<a name="(line336)"></a><a name="choice"></a><font color=Blue>-- | 'choice f p' means if parseContents succeeds, apply f to the result,</font>-<a name="(line337)"></a><font color=Blue>--   otherwise use the continuation parser.</font>-<a name="(line338)"></a>choice <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> <font color=Cyan>(</font>a <font color=Red>-&gt;</font> b<font color=Cyan>)</font> <font color=Red>-&gt;</font> XMLParser b <font color=Red>-&gt;</font> XMLParser b-<a name="(line339)"></a>choice cons <font color=Cyan>(</font>P other<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line340)"></a>    P <font color=Cyan>(</font><font color=Red>\</font>cs<font color=Red>-&gt;</font> <font color=Green><u>case</u></font> runParser parseContents cs <font color=Green><u>of</u></font>-<a name="(line341)"></a>                 <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> other cs-<a name="(line342)"></a>                 <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs'<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>cons x<font color=Cyan>)</font><font color=Cyan>,</font> cs'<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line343)"></a>-<a name="(line344)"></a><font color=Blue>--choice cons other = fmap cons parseContents `onFail` other</font>-<a name="(line345)"></a>-<a name="(line346)"></a><a name="definite"></a><font color=Blue>-- | not sure this is needed now.   'definite p' previously ensured that</font>-<a name="(line347)"></a><font color=Blue>--   an element was definitely present.  Now I think the monad might take</font>-<a name="(line348)"></a><font color=Blue>--   care of that for us.</font>-<a name="(line349)"></a>definite <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> XMLParser a <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> XMLParser a-<a name="(line350)"></a>definite p inner tag <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>cs<font color=Red>-&gt;</font> <font color=Green><u>case</u></font> runParser p cs <font color=Green><u>of</u></font>-<a name="(line351)"></a>                                   <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> cs'<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>msg'<font color=Cyan>)</font><font color=Cyan>,</font> cs'<font color=Cyan>)</font>-<a name="(line352)"></a>                                   <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs'<font color=Cyan>)</font>  <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right x<font color=Cyan>,</font>   cs'<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line353)"></a>  <font color=Green><u>where</u></font> msg' <font color=Red>=</font> <font color=Magenta>"content error: expected "</font><font color=Cyan>++</font>inner<font color=Cyan>++</font><font color=Magenta>" inside &lt;"</font><font color=Cyan>++</font>tag-<a name="(line354)"></a>               <font color=Cyan>++</font><font color=Magenta>"&gt; element\n"</font>-<a name="(line355)"></a>-<a name="(line356)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line357)"></a>-<a name="(line358)"></a><a name="XmlContent"></a><font color=Blue>-- | The @XmlContent@ class promises that an XML Content element can be</font>-<a name="(line359)"></a><a name="XmlContent"></a><font color=Blue>--   converted to and from a Haskell value.</font>-<a name="(line360)"></a><a name="XmlContent"></a><font color=Green><u>class</u></font> HTypeable a <font color=Red>=&gt;</font> XmlContent a <font color=Green><u>where</u></font>-<a name="(line361)"></a>    <font color=Blue>-- | Convert from XML to Haskell</font>-<a name="(line362)"></a>    parseContents <font color=Red>::</font> XMLParser a-<a name="(line363)"></a>    <font color=Blue>-- | Convert from Haskell to XML</font>-<a name="(line364)"></a>    toContents    <font color=Red>::</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>-<a name="(line365)"></a>-<a name="(line366)"></a>    <font color=Blue>-- | Dummy functions (for most types): used /only/ in the Char instance</font>-<a name="(line367)"></a>    <font color=Blue>--   for coercing lists of Char into String.</font>-<a name="(line368)"></a>    xToChar       <font color=Red>::</font> a <font color=Red>-&gt;</font> Char-<a name="(line369)"></a>    xFromChar     <font color=Red>::</font> Char <font color=Red>-&gt;</font> a-<a name="(line370)"></a>    xToChar        <font color=Red>=</font> error <font color=Magenta>"HaXml.XmlContent.xToChar used in error"</font>-<a name="(line371)"></a>    xFromChar      <font color=Red>=</font> error <font color=Magenta>"HaXml.XmlContent.xFromChar used in error"</font>-<a name="(line372)"></a>-<a name="(line373)"></a><a name="XmlAttributes"></a><font color=Blue>-- | The @XmlAttributes@ class promises that a list of XML tag attributes</font>-<a name="(line374)"></a><a name="XmlAttributes"></a><font color=Blue>--   can be converted to and from a Haskell value.</font>-<a name="(line375)"></a><a name="XmlAttributes"></a><font color=Green><u>class</u></font> XmlAttributes a <font color=Green><u>where</u></font>-<a name="(line376)"></a>    fromAttrs <font color=Red>::</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> a-<a name="(line377)"></a>    toAttrs   <font color=Red>::</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font>-<a name="(line378)"></a><a name="XmlAttrType"></a><font color=Blue>-- | The @XmlAttrType@ class promises that an attribute taking an XML</font>-<a name="(line379)"></a><a name="XmlAttrType"></a><font color=Blue>--   enumerated type can be converted to and from a Haskell value.</font>-<a name="(line380)"></a><a name="XmlAttrType"></a><font color=Green><u>class</u></font> XmlAttrType a <font color=Green><u>where</u></font>-<a name="(line381)"></a>    fromAttrToTyp <font color=Red>::</font> String <font color=Red>-&gt;</font> Attribute <font color=Red>-&gt;</font> Maybe a-<a name="(line382)"></a>    toAttrFrTyp   <font color=Red>::</font> String <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Maybe Attribute-<a name="(line383)"></a>-<a name="(line384)"></a>-<a name="(line385)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line386)"></a><font color=Blue>-- Instances for all the standard basic datatypes.</font>-<a name="(line387)"></a><font color=Blue>-- These are for Haskell datatypes being derived to go to XML.</font>-<a name="(line388)"></a><font color=Blue>-- DtdToHaskell does not use these instances.</font>-<a name="(line389)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line390)"></a>-<a name="(line391)"></a><font color=Green><u>instance</u></font> XmlContent Bool <font color=Green><u>where</u></font>-<a name="(line392)"></a>    toContents b   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"bool"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show b<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>-<a name="(line393)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"bool"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>-<a name="(line394)"></a>    -<a name="(line395)"></a><font color=Green><u>instance</u></font> XmlContent Int <font color=Green><u>where</u></font>-<a name="(line396)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"int"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>-<a name="(line397)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"int"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>-<a name="(line398)"></a>-<a name="(line399)"></a><font color=Green><u>instance</u></font> XmlContent Integer <font color=Green><u>where</u></font>-<a name="(line400)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"integer"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>-<a name="(line401)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"integer"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>-<a name="(line402)"></a>    -<a name="(line403)"></a><font color=Green><u>instance</u></font> XmlContent Float <font color=Green><u>where</u></font>-<a name="(line404)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"float"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>-<a name="(line405)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"float"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>-<a name="(line406)"></a>-<a name="(line407)"></a><font color=Green><u>instance</u></font> XmlContent Double <font color=Green><u>where</u></font>-<a name="(line408)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"double"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>-<a name="(line409)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"double"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>-<a name="(line410)"></a>-<a name="(line411)"></a><font color=Green><u>instance</u></font> XmlContent Char <font color=Green><u>where</u></font>-<a name="(line412)"></a>    <font color=Blue>-- NOT in a string</font>-<a name="(line413)"></a>    toContents c   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"char"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Red>[</font>c<font color=Red>]</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>-<a name="(line414)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"value"</font><font color=Cyan>,</font><font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Red>[</font>c<font color=Red>]</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font>-<a name="(line415)"></a>                             <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"char"</font><font color=Red>]</font>-<a name="(line416)"></a>                       <font color=Cyan>;</font> return c-<a name="(line417)"></a>                       <font color=Cyan>}</font>-<a name="(line418)"></a>    <font color=Blue>-- Only defined for Char and no other types:</font>-<a name="(line419)"></a>    xToChar   <font color=Red>=</font> id-<a name="(line420)"></a>    xFromChar <font color=Red>=</font> id-<a name="(line421)"></a>-<a name="(line422)"></a><font color=Green><u>instance</u></font> XmlContent a <font color=Red>=&gt;</font> XmlContent <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>where</u></font>-<a name="(line423)"></a>    toContents xs  <font color=Red>=</font> <font color=Green><u>case</u></font> toHType x <font color=Green><u>of</u></font>-<a name="(line424)"></a>                       <font color=Cyan>(</font>Prim <font color=Magenta>"Char"</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font>-<a name="(line425)"></a>                            <font color=Red>[</font>mkElem <font color=Magenta>"string"</font> <font color=Red>[</font>CString True <font color=Cyan>(</font>map xToChar xs<font color=Cyan>)</font> ()<font color=Red>]</font><font color=Red>]</font>-<a name="(line426)"></a>                       <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Red>[</font>mkElem xs <font color=Cyan>(</font>concatMap toContents xs<font color=Cyan>)</font><font color=Red>]</font>-<a name="(line427)"></a>                   <font color=Green><u>where</u></font>   <font color=Cyan>(</font>x<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xs-<a name="(line428)"></a>    parseContents <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>x <font color=Red>-&gt;</font>-<a name="(line429)"></a>        <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>-<a name="(line430)"></a>            <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>-<a name="(line431)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>map xFromChar s<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>-<a name="(line432)"></a>            <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"string"</font> [] <font color=Red>[</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Red>]</font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>-<a name="(line433)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>map xFromChar s<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>-<a name="(line434)"></a>            <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem e [] xs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>|</font> <font color=Magenta>"list"</font> <font color=Cyan>`isPrefixOf`</font> e-<a name="(line435)"></a>                   <font color=Red>-&gt;</font> scanElements xs-<a name="(line436)"></a>                   <font color=Green><u>where</u></font>-<a name="(line437)"></a>                  <font color=Blue>-- scanElements :: [Content] -&gt; (Either String [a],[Content])</font>-<a name="(line438)"></a>                     scanElements [] <font color=Red>=</font> <font color=Cyan>(</font>Right []<font color=Cyan>,</font> cs<font color=Cyan>)</font>-<a name="(line439)"></a>                     scanElements es <font color=Red>=</font>-<a name="(line440)"></a>                        <font color=Green><u>case</u></font> runParser parseContents es <font color=Green><u>of</u></font>-<a name="(line441)"></a>                            <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> es'<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>msg<font color=Cyan>)</font><font color=Cyan>,</font> es'<font color=Cyan>)</font>-<a name="(line442)"></a>                            <font color=Cyan>(</font>Right x<font color=Cyan>,</font> es'<font color=Cyan>)</font> <font color=Red>-&gt;</font>-<a name="(line443)"></a>                                <font color=Green><u>case</u></font> scanElements es' <font color=Green><u>of</u></font>-<a name="(line444)"></a>                                    <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> cs<font color=Cyan>)</font>-<a name="(line445)"></a>                                    <font color=Cyan>(</font>Right xs<font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>-<a name="(line446)"></a>            <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem e <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> cs<font color=Cyan>)</font>-<a name="(line447)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False-<a name="(line448)"></a>                            <font color=Cyan>,</font><font color=Magenta>"Expected a &lt;list-...&gt;, but found a &lt;"</font><font color=Cyan>++</font>e<font color=Cyan>++</font><font color=Magenta>"&gt; at\n"</font>-<a name="(line449)"></a>                            <font color=Cyan>++</font> show pos<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>-<a name="(line450)"></a>            <font color=Cyan>(</font>CRef r pos<font color=Red><b>:</b></font> cs<font color=Cyan>)</font>-<a name="(line451)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False-<a name="(line452)"></a>                            <font color=Cyan>,</font><font color=Magenta>"Expected a &lt;list-...&gt;, but found a ref "</font>-<a name="(line453)"></a>                            <font color=Cyan>++</font>verbatim r<font color=Cyan>++</font><font color=Magenta>" at\n"</font><font color=Cyan>++</font> show pos<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>-<a name="(line454)"></a>            <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>P p<font color=Cyan>)</font><font color=Red>-&gt;</font> p<font color=Cyan>)</font> parseContents<font color=Cyan>)</font> cs  <font color=Blue>-- skip comments etc.</font>-<a name="(line455)"></a>            []     <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False-<a name="(line456)"></a>                            <font color=Cyan>,</font><font color=Magenta>"Ran out of input XML whilst secondary parsing"</font><font color=Cyan>)</font>-<a name="(line457)"></a>                      <font color=Cyan>,</font> []<font color=Cyan>)</font>-<a name="(line458)"></a>        <font color=Cyan>)</font>-<a name="(line459)"></a>-<a name="(line460)"></a><font color=Green><u>instance</u></font> XmlContent () <font color=Green><u>where</u></font>-<a name="(line461)"></a>    toContents ()  <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"unit"</font> [] []<font color=Cyan>)</font> ()<font color=Red>]</font>-<a name="(line462)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> element <font color=Red>[</font><font color=Magenta>"unit"</font><font color=Red>]</font><font color=Cyan>;</font> return () <font color=Cyan>}</font>-<a name="(line463)"></a>-<a name="(line464)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line465)"></a>    toContents <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b-<a name="(line466)"></a>    parseContents    <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line467)"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents-<a name="(line468)"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents-<a name="(line469)"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font>-<a name="(line470)"></a>        <font color=Cyan>}</font>-<a name="(line471)"></a>-<a name="(line472)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line473)"></a>    toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z-<a name="(line474)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line475)"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents-<a name="(line476)"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents-<a name="(line477)"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents-<a name="(line478)"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font>-<a name="(line479)"></a>        <font color=Cyan>}</font>-<a name="(line480)"></a>-<a name="(line481)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line482)"></a>    toContents m   <font color=Red>=</font> <font color=Red>[</font>mkElem m <font color=Cyan>(</font>maybe [] toContents m<font color=Cyan>)</font><font color=Red>]</font>-<a name="(line483)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>-<a name="(line484)"></a>        <font color=Cyan>{</font> e <font color=Red>&lt;-</font> elementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Red>[</font><font color=Magenta>"maybe"</font><font color=Red>]</font>-<a name="(line485)"></a>        <font color=Cyan>;</font> <font color=Green><u>case</u></font> e <font color=Green><u>of</u></font> <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> [] []<font color=Cyan>)</font> <font color=Red>-&gt;</font> return Nothing-<a name="(line486)"></a>                    <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> [] <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> fmap Just <font color=Cyan>(</font>interior e parseContents<font color=Cyan>)</font>-<a name="(line487)"></a>        <font color=Cyan>}</font>-<a name="(line488)"></a>-<a name="(line489)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>Either a b<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line490)"></a>    toContents v<font color=Red>@</font><font color=Cyan>(</font>Left aa<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line491)"></a>        <font color=Red>[</font>mkElemC <font color=Cyan>(</font>showConstr <font color=Magenta>0</font> <font color=Cyan>(</font>toHType v<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>toContents aa<font color=Cyan>)</font><font color=Red>]</font>-<a name="(line492)"></a>    toContents v<font color=Red>@</font><font color=Cyan>(</font>Right ab<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line493)"></a>        <font color=Red>[</font>mkElemC <font color=Cyan>(</font>showConstr <font color=Magenta>1</font> <font color=Cyan>(</font>toHType v<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>toContents ab<font color=Cyan>)</font><font color=Red>]</font>-<a name="(line494)"></a>    parseContents <font color=Red>=</font>-<a name="(line495)"></a>        <font color=Cyan>(</font>inElementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Magenta>"Left"</font>  <font color=Cyan>$</font> fmap Left  parseContents<font color=Cyan>)</font>-<a name="(line496)"></a>          <font color=Cyan>`onFail`</font>-<a name="(line497)"></a>        <font color=Cyan>(</font>inElementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Magenta>"Right"</font> <font color=Cyan>$</font> fmap Right parseContents<font color=Cyan>)</font>-<a name="(line498)"></a>-<a name="(line499)"></a><font color=Blue>--    do{ e@(Elem t [] _) &lt;- element ["Left","Right"]</font>-<a name="(line500)"></a><font color=Blue>--      ; case t of</font>-<a name="(line501)"></a><font color=Blue>--          _ | "Left"  `isPrefixOf` t -&gt; fmap Left  (interior e parseContents)</font>-<a name="(line502)"></a><font color=Blue>--            | "Right" `isPrefixOf` t -&gt; fmap Right (interior e parseContents)</font>-<a name="(line503)"></a><font color=Blue>--      }</font>-<a name="(line504)"></a>-<a name="(line505)"></a>-<a name="(line506)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line507)"></a><font color=Blue>-- Useful auxiliaries for "fromAttributes" </font>-<a name="(line508)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line509)"></a>-<a name="(line510)"></a><a name="Defaultable"></a><font color=Blue>-- | If an attribute is defaultable, then it either takes the default</font>-<a name="(line511)"></a><a name="Defaultable"></a><font color=Blue>--   value (which is omitted from the output), or a non-default value</font>-<a name="(line512)"></a><a name="Defaultable"></a><font color=Blue>--   (which obviously must be printed).</font>-<a name="(line513)"></a><a name="Defaultable"></a><font color=Green><u>data</u></font> Defaultable a  <font color=Red>=</font> Default a    <font color=Red>|</font> NonDefault a    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>-<a name="(line514)"></a>-<a name="(line515)"></a><a name="searchMaybe"></a>searchMaybe <font color=Red>::</font> <font color=Cyan>(</font>a <font color=Red>-&gt;</font> Maybe b<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> Maybe b-<a name="(line516)"></a>searchMaybe f [] <font color=Red>=</font> Nothing-<a name="(line517)"></a>searchMaybe f <font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line518)"></a>    <font color=Green><u>let</u></font> fx <font color=Red>=</font> f x <font color=Green><u>in</u></font>-<a name="(line519)"></a>    <font color=Green><u>case</u></font> fx <font color=Green><u>of</u></font>-<a name="(line520)"></a>      Nothing  <font color=Red>-&gt;</font> searchMaybe f xs-<a name="(line521)"></a>      <font color=Cyan>(</font>Just <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> fx-<a name="(line522)"></a>-<a name="(line523)"></a><a name="maybeToAttr"></a>maybeToAttr <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>a<font color=Red>-&gt;</font>Maybe Attribute<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Maybe a-<a name="(line524)"></a>               <font color=Red>-&gt;</font> Maybe Attribute-<a name="(line525)"></a>maybeToAttr to n Nothing  <font color=Red>=</font> Nothing-<a name="(line526)"></a>maybeToAttr to n <font color=Cyan>(</font>Just v<font color=Cyan>)</font> <font color=Red>=</font> to n v-<a name="(line527)"></a>-<a name="(line528)"></a><a name="defaultToAttr"></a>defaultToAttr <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>a<font color=Red>-&gt;</font>Maybe Attribute<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Defaultable a-<a name="(line529)"></a>                 <font color=Red>-&gt;</font> Maybe Attribute-<a name="(line530)"></a>defaultToAttr to n <font color=Cyan>(</font>Default v<font color=Cyan>)</font>  <font color=Red>=</font> Nothing-<a name="(line531)"></a>defaultToAttr to n <font color=Cyan>(</font>NonDefault v<font color=Cyan>)</font> <font color=Red>=</font> to n v-<a name="(line532)"></a>-<a name="(line533)"></a><a name="definiteA"></a>definiteA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Attribute<font color=Red>-&gt;</font>Maybe a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> String-<a name="(line534)"></a>             <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> a-<a name="(line535)"></a>definiteA from tag at <font color=Green><u>as</u></font> <font color=Red>=</font>-<a name="(line536)"></a>    <font color=Green><u>case</u></font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font> <font color=Green><u>of</u></font>-<a name="(line537)"></a>      Nothing  <font color=Red>-&gt;</font> error <font color=Cyan>(</font><font color=Magenta>"missing attribute "</font><font color=Cyan>++</font>at<font color=Cyan>++</font><font color=Magenta>" in tag &lt;"</font><font color=Cyan>++</font>tag<font color=Cyan>++</font><font color=Magenta>"&gt;"</font><font color=Cyan>)</font>-<a name="(line538)"></a>      <font color=Cyan>(</font>Just a<font color=Cyan>)</font> <font color=Red>-&gt;</font> a-<a name="(line539)"></a>-<a name="(line540)"></a><a name="defaultA"></a>defaultA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Attribute<font color=Red>-&gt;</font>Maybe a<font color=Cyan>)</font> <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> String-<a name="(line541)"></a>            <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> Defaultable a-<a name="(line542)"></a>defaultA from def at <font color=Green><u>as</u></font> <font color=Red>=</font>-<a name="(line543)"></a>    <font color=Green><u>case</u></font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font> <font color=Green><u>of</u></font>-<a name="(line544)"></a>      Nothing  <font color=Red>-&gt;</font> Default def-<a name="(line545)"></a>      <font color=Cyan>(</font>Just a<font color=Cyan>)</font> <font color=Red>-&gt;</font> NonDefault a-<a name="(line546)"></a>-<a name="(line547)"></a><a name="possibleA"></a>possibleA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Attribute<font color=Red>-&gt;</font>Maybe a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> Maybe a-<a name="(line548)"></a>possibleA from at <font color=Green><u>as</u></font> <font color=Red>=</font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font>-<a name="(line549)"></a>-<a name="(line550)"></a><a name="fromAttrToStr"></a>fromAttrToStr <font color=Red>::</font> String <font color=Red>-&gt;</font> Attribute <font color=Red>-&gt;</font> Maybe String-<a name="(line551)"></a>fromAttrToStr n <font color=Cyan>(</font>n0<font color=Cyan>,</font>v<font color=Cyan>)</font>-<a name="(line552)"></a>        <font color=Red>|</font> n <font color=Cyan>==</font> n0   <font color=Red>=</font> Just <font color=Cyan>(</font>attr2str v<font color=Cyan>)</font>-<a name="(line553)"></a>        <font color=Red>|</font> otherwise <font color=Red>=</font> Nothing-<a name="(line554)"></a>-<a name="(line555)"></a><a name="toAttrFrStr"></a>toAttrFrStr   <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Maybe Attribute-<a name="(line556)"></a>toAttrFrStr n v <font color=Red>=</font> Just <font color=Cyan>(</font>n<font color=Cyan>,</font> str2attr v<font color=Cyan>)</font>-<a name="(line557)"></a>-<a name="(line558)"></a><a name="str2attr"></a>str2attr <font color=Red>::</font> String <font color=Red>-&gt;</font> AttValue-<a name="(line559)"></a>str2attr s <font color=Red>=</font>-<a name="(line560)"></a>    <font color=Green><u>let</u></font> f s <font color=Red>=</font>-<a name="(line561)"></a>          <font color=Green><u>let</u></font> <font color=Cyan>(</font>l<font color=Cyan>,</font>r<font color=Cyan>)</font> <font color=Red>=</font> span <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font> not <font color=Cyan>(</font>elem c <font color=Magenta>"\"&amp;&lt;&gt;'"</font><font color=Cyan>)</font><font color=Cyan>)</font> s-<a name="(line562)"></a>          <font color=Green><u>in</u></font> <font color=Green><u>if</u></font> null r <font color=Green><u>then</u></font> <font color=Red>[</font>Left l<font color=Red>]</font>-<a name="(line563)"></a>             <font color=Green><u>else</u></font> Left l<font color=Red><b>:</b></font> Right <font color=Cyan>(</font>g <font color=Cyan>(</font>head r<font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font> f <font color=Cyan>(</font>tail r<font color=Cyan>)</font>-<a name="(line564)"></a>        g <font color=Magenta>'"'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"quot"</font>-<a name="(line565)"></a>        g <font color=Magenta>'&amp;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"amp"</font>-<a name="(line566)"></a>        g <font color=Magenta>'&lt;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"lt"</font>-<a name="(line567)"></a>        g <font color=Magenta>'&gt;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"gt"</font>-<a name="(line568)"></a>        g <font color=Magenta>'\''</font> <font color=Red>=</font> RefEntity <font color=Magenta>"apos"</font>-<a name="(line569)"></a>    <font color=Green><u>in</u></font> AttValue <font color=Cyan>(</font>f s<font color=Cyan>)</font>-<a name="(line570)"></a>-<a name="(line571)"></a><a name="attr2str"></a>attr2str <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> String          <font color=Blue>-- really needs symbol table</font>-<a name="(line572)"></a>attr2str <font color=Cyan>(</font>AttValue xs<font color=Cyan>)</font> <font color=Red>=</font>-<a name="(line573)"></a>    <font color=Green><u>let</u></font> f <font color=Cyan>(</font>Left s<font color=Cyan>)</font> <font color=Red>=</font> s-<a name="(line574)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefChar i<font color=Cyan>)</font><font color=Cyan>)</font>        <font color=Red>=</font> <font color=Red>[</font>chr i<font color=Red>]</font>-<a name="(line575)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"quot"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"\""</font>-<a name="(line576)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"amp"</font><font color=Cyan>)</font><font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"&amp;"</font>-<a name="(line577)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"lt"</font><font color=Cyan>)</font><font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&lt;"</font>-<a name="(line578)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"gt"</font><font color=Cyan>)</font><font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&gt;"</font>-<a name="(line579)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"apos"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"'"</font>-<a name="(line580)"></a>        f <font color=Cyan>(</font>Right <font color=Green><u>_</u></font><font color=Cyan>)</font>                  <font color=Red>=</font> <font color=Magenta>"*"</font>  <font color=Blue>-- Ooops, ST needed here.</font>-<a name="(line581)"></a>    <font color=Green><u>in</u></font> concatMap f xs-<a name="(line582)"></a>-<a name="(line583)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line584)"></a><font color=Blue>--  New content-model types</font>-<a name="(line585)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line586)"></a>-<a name="(line587)"></a><font color=Blue>{--<a name="(line588)"></a>data OneOf2 a b-<a name="(line589)"></a>data OneOf3 a b c-<a name="(line590)"></a>data OneOf4 a b c d-<a name="(line591)"></a>    ... etc are now defined (with instances) in module OneOfN.-<a name="(line592)"></a>-}</font>-<a name="(line593)"></a>-<a name="(line594)"></a><a name="ANYContent"></a><font color=Blue>-- | A type corresponding to XML's ANY contentspec. </font>-<a name="(line595)"></a><a name="ANYContent"></a><font color=Blue>--   It is either a list of unconverted xml 'Content' </font>-<a name="(line596)"></a><a name="ANYContent"></a><font color=Blue>--   or some 'XmlContent'-able value.</font>-<a name="(line597)"></a><a name="ANYContent"></a><font color=Blue>--</font>-<a name="(line598)"></a><a name="ANYContent"></a><font color=Blue>-- Parsing functions (e.g. 'parseContents') will always produce 'UnConverted'.</font>-<a name="(line599)"></a><a name="ANYContent"></a><font color=Blue>-- Note: The Show instance for 'UnConverted' uses 'verbatim'.</font>-<a name="(line600)"></a><a name="ANYContent"></a><font color=Green><u>data</u></font> ANYContent <font color=Red>=</font> <font color=Green><u>forall</u></font> a <font color=Cyan>.</font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> Show a<font color=Cyan>)</font> <font color=Red>=&gt;</font> ANYContent a-<a name="(line601)"></a>                <font color=Red>|</font> UnConverted <font color=Red>[</font>Content Posn<font color=Red>]</font>-<a name="(line602)"></a>-<a name="(line603)"></a><font color=Green><u>instance</u></font> Show ANYContent <font color=Green><u>where</u></font>-<a name="(line604)"></a>    show <font color=Cyan>(</font>UnConverted c<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"UnConverted "</font> <font color=Cyan>++</font> <font color=Cyan>(</font>show <font color=Cyan>$</font> map verbatim c<font color=Cyan>)</font>-<a name="(line605)"></a>    show <font color=Cyan>(</font>ANYContent a<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"ANYContent "</font> <font color=Cyan>++</font> <font color=Cyan>(</font>show a<font color=Cyan>)</font>-<a name="(line606)"></a>-<a name="(line607)"></a><font color=Green><u>instance</u></font> Eq ANYContent <font color=Green><u>where</u></font>-<a name="(line608)"></a>    a <font color=Cyan>==</font> b <font color=Red>=</font> show a <font color=Cyan>==</font> show b-<a name="(line609)"></a>-<a name="(line610)"></a><a name="List1"></a><font color=Blue>-- | The List1 type represents lists with at least one element.</font>-<a name="(line611)"></a><a name="List1"></a><font color=Blue>--   It is required for DTD content models that use + as a modifier.</font>-<a name="(line612)"></a><a name="List1"></a><font color=Green><u>data</u></font> List1 a <font color=Red>=</font> NonEmpty <font color=Red>[</font>a<font color=Red>]</font>  <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font> Show<font color=Cyan>)</font>-<a name="(line613)"></a>-<a name="(line614)"></a>-<a name="(line615)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line616)"></a><font color=Blue>--  Instances for new content-model types</font>-<a name="(line617)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line618)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>)</font> <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>List1 a<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line619)"></a>    toHType m  <font color=Red>=</font> Defined <font color=Magenta>"List1"</font> <font color=Red>[</font>hx<font color=Red>]</font>-<a name="(line620)"></a>                         <font color=Red>[</font>Constr <font color=Magenta>"NonEmpty"</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Red>[</font>List hx<font color=Red>]</font> <font color=Blue>{-Nothing-}</font><font color=Red>]</font>-<a name="(line621)"></a>               <font color=Green><u>where</u></font> <font color=Cyan>(</font>NonEmpty x<font color=Cyan>)</font> <font color=Red>=</font> m-<a name="(line622)"></a>                     hx <font color=Red>=</font> toHType x-<a name="(line623)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>List1 a<font color=Cyan>)</font> <font color=Green><u>where</u></font>-<a name="(line624)"></a>    toContents <font color=Cyan>(</font>NonEmpty xs<font color=Cyan>)</font> <font color=Red>=</font> concatMap toContents xs-<a name="(line625)"></a>    parseContents <font color=Red>=</font> fmap NonEmpty <font color=Cyan>$</font> many1 parseContents-<a name="(line626)"></a>-<a name="(line627)"></a><font color=Green><u>instance</u></font> HTypeable ANYContent <font color=Green><u>where</u></font>-<a name="(line628)"></a>    toHType <font color=Green><u>_</u></font>      <font color=Red>=</font> Prim <font color=Magenta>"ANYContent"</font> <font color=Magenta>"ANY"</font>-<a name="(line629)"></a><font color=Green><u>instance</u></font> XmlContent ANYContent <font color=Green><u>where</u></font>-<a name="(line630)"></a>    toContents <font color=Cyan>(</font>ANYContent a<font color=Cyan>)</font>  <font color=Red>=</font> toContents a-<a name="(line631)"></a>    toContents <font color=Cyan>(</font>UnConverted s<font color=Cyan>)</font> <font color=Red>=</font> map <font color=Cyan>(</font>fmap <font color=Cyan>(</font>const ()<font color=Cyan>)</font><font color=Cyan>)</font> s-<a name="(line632)"></a>    parseContents <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>cs <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>UnConverted cs<font color=Cyan>)</font><font color=Cyan>,</font> []<font color=Cyan>)</font><font color=Cyan>)</font>-<a name="(line633)"></a>-<a name="(line634)"></a><font color=Blue>------------------------------------------------------------------------</font>-<a name="(line635)"></a><font color=Blue>--  </font>-<a name="(line636)"></a><font color=Blue>------------------------------------------------------------------------</font>+<pre><a name="(line1)"></a><font color=Blue>{-# LANGUAGE ExistentialQuantification #-}</font>+<a name="(line2)"></a>+<a name="(line3)"></a><font color=Blue>-- | The class 'XmlContent' is a kind of replacement for Read and Show:</font>+<a name="(line4)"></a><font color=Blue>--   it provides conversions between a generic XML tree representation</font>+<a name="(line5)"></a><font color=Blue>--   and your own more specialised typeful Haskell data trees.</font>+<a name="(line6)"></a><font color=Blue>--</font>+<a name="(line7)"></a><font color=Blue>--   If you are starting with a set of Haskell datatypes, use DrIFT to</font>+<a name="(line8)"></a><font color=Blue>--   derive instances of this class for you:</font>+<a name="(line9)"></a><font color=Blue>--       http:\/\/repetae.net\/john\/computer\/haskell\/DrIFT</font>+<a name="(line10)"></a><font color=Blue>--   If you are starting with an XML DTD, use HaXml's tool DtdToHaskell</font>+<a name="(line11)"></a><font color=Blue>--   to generate both the Haskell types and the corresponding instances.</font>+<a name="(line12)"></a><font color=Blue>--</font>+<a name="(line13)"></a><font color=Blue>--   This unified class interface replaces two previous (somewhat similar)</font>+<a name="(line14)"></a><font color=Blue>--   classes: Haskell2Xml and Xml2Haskell.  There was no real reason to have</font>+<a name="(line15)"></a><font color=Blue>--   separate classes depending on how you originally defined your datatypes.</font>+<a name="(line16)"></a>+<a name="(line17)"></a><font color=Blue>--   The methods 'toContents' and 'parseContents' convert a value to and from</font>+<a name="(line18)"></a><font color=Blue>--   a generic internal representation of an XML document /without/ a DTD.</font>+<a name="(line19)"></a><font color=Blue>--   The functions 'toXml' and 'fromXml' convert a value to and from a generic</font>+<a name="(line20)"></a><font color=Blue>--   internal representation of an XML document /including/ a DTD.</font>+<a name="(line21)"></a><font color=Blue>--   The functions 'readXml' and 'showXml' convert to and from Strings.</font>+<a name="(line22)"></a><font color=Blue>--   The functions 'fReadXml' and 'fWriteXml' do the conversion to and from</font>+<a name="(line23)"></a><font color=Blue>--   the given filenames.</font>+<a name="(line24)"></a><font color=Blue>--   The functions 'hGetXml' and 'hPutXml' do the conversion to and from</font>+<a name="(line25)"></a><font color=Blue>--   the given file handles.</font>+<a name="(line26)"></a><font color=Blue>--   (See the type signatures.)</font>+<a name="(line27)"></a><font color=Blue>--</font>+<a name="(line28)"></a>+<a name="(line29)"></a><font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>XmlContent+<a name="(line30)"></a>  <font color=Cyan>(</font> <font color=Blue>-- * Re-export the relevant set of generic XML document type definitions</font>+<a name="(line31)"></a>    Document<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line32)"></a>  <font color=Cyan>,</font> Element<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line33)"></a>  <font color=Cyan>,</font> ElemTag<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line34)"></a>  <font color=Cyan>,</font> Content<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line35)"></a>  <font color=Cyan>,</font> Attribute()+<a name="(line36)"></a>  <font color=Cyan>,</font> AttValue<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line37)"></a>  <font color=Cyan>,</font> Prolog<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line38)"></a>  <font color=Cyan>,</font> Reference<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line39)"></a>  <font color=Blue>-- * The enabling classes, that define parsing\/unparsing between Haskell</font>+<a name="(line40)"></a>  <font color=Blue>--   datatypes and a generic XML representation.</font>+<a name="(line41)"></a>  <font color=Cyan>,</font> XmlContent<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line42)"></a>  <font color=Cyan>,</font> XmlAttributes<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line43)"></a>  <font color=Cyan>,</font> XmlAttrType<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line44)"></a>  <font color=Blue>-- ** Auxiliaries for writing parsers in the XmlContent class</font>+<a name="(line45)"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly+<a name="(line46)"></a>  <font color=Cyan>,</font> XMLParser+<a name="(line47)"></a>  <font color=Cyan>,</font> content<font color=Cyan>,</font> posnElement<font color=Cyan>,</font> element<font color=Cyan>,</font> interior<font color=Cyan>,</font> inElement<font color=Cyan>,</font> text<font color=Cyan>,</font> attributes+<a name="(line48)"></a>  <font color=Cyan>,</font> posnElementWith<font color=Cyan>,</font> elementWith<font color=Cyan>,</font> inElementWith+<a name="(line49)"></a>  <font color=Cyan>,</font> choice<font color=Cyan>,</font> definite <font color=Blue>-- ???</font>+<a name="(line50)"></a>  <font color=Blue>-- ** Auxiliaries for generating in the XmlContent class</font>+<a name="(line51)"></a>  <font color=Cyan>,</font> mkElem<font color=Cyan>,</font> mkElemC<font color=Cyan>,</font> mkAttr+<a name="(line52)"></a>  <font color=Cyan>,</font> toText<font color=Cyan>,</font> toCData+<a name="(line53)"></a>  <font color=Blue>-- ** Auxiliaries for the attribute-related classes</font>+<a name="(line54)"></a>  <font color=Cyan>,</font> maybeToAttr<font color=Cyan>,</font> defaultToAttr+<a name="(line55)"></a>  <font color=Cyan>,</font> definiteA<font color=Cyan>,</font> defaultA<font color=Cyan>,</font> possibleA<font color=Cyan>,</font> fromAttrToStr<font color=Cyan>,</font> toAttrFrStr+<a name="(line56)"></a>  <font color=Cyan>,</font> Defaultable<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line57)"></a>  <font color=Cyan>,</font> str2attr<font color=Cyan>,</font> attr2str<font color=Cyan>,</font> attval+<a name="(line58)"></a>  <font color=Cyan>,</font> catMaybes   <font color=Blue>-- re-exported from Maybe</font>+<a name="(line59)"></a>  <font color=Blue>-- * Whole-document conversion functions</font>+<a name="(line60)"></a>  <font color=Cyan>,</font> toXml<font color=Cyan>,</font> fromXml+<a name="(line61)"></a>  <font color=Cyan>,</font> readXml<font color=Cyan>,</font> showXml<font color=Cyan>,</font> fpsShowXml+<a name="(line62)"></a>  <font color=Cyan>,</font> fReadXml<font color=Cyan>,</font> fWriteXml<font color=Cyan>,</font> fpsWriteXml+<a name="(line63)"></a>  <font color=Cyan>,</font> hGetXml<font color=Cyan>,</font>  hPutXml<font color=Cyan>,</font> fpsHPutXml+<a name="(line64)"></a>  <font color=Blue>-- * Explicit representation of Haskell datatype information</font>+<a name="(line65)"></a>  <font color=Blue>--   (for conversion to a DTD)</font>+<a name="(line66)"></a>  <font color=Cyan>,</font> <font color=Green><u>module</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping+<a name="(line67)"></a>  <font color=Blue>-- * Types useful for some content models</font>+<a name="(line68)"></a>  <font color=Cyan>,</font> List1<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line69)"></a>  <font color=Cyan>,</font> ANYContent<font color=Cyan>(</font><font color=Red>..</font><font color=Cyan>)</font>+<a name="(line70)"></a>  <font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line71)"></a>+<a name="(line72)"></a><font color=Green><u>import</u></font> IO+<a name="(line73)"></a><font color=Green><u>import</u></font> Maybe <font color=Cyan>(</font>catMaybes<font color=Cyan>)</font>+<a name="(line74)"></a><font color=Green><u>import</u></font> Char  <font color=Cyan>(</font>chr<font color=Cyan>,</font> isSpace<font color=Cyan>)</font>+<a name="(line75)"></a><font color=Green><u>import</u></font> List  <font color=Cyan>(</font>isPrefixOf<font color=Cyan>,</font> isSuffixOf<font color=Cyan>)</font>+<a name="(line76)"></a>+<a name="(line77)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>PrettyPrint<font color=Cyan>.</font>HughesPJ <font color=Cyan>(</font>render<font color=Cyan>)</font>+<a name="(line78)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty <font color=Green><u>as</u></font> PP+<a name="(line79)"></a>+<a name="(line80)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Types+<a name="(line81)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>TypeMapping+<a name="(line82)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Posn     <font color=Cyan>(</font>Posn<font color=Cyan>,</font> posInNewCxt<font color=Cyan>)</font>+<a name="(line83)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Pretty   <font color=Cyan>(</font>document<font color=Cyan>)</font>+<a name="(line84)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Parse    <font color=Cyan>(</font>xmlParse<font color=Cyan>)</font>+<a name="(line85)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>Verbatim <font color=Cyan>(</font>Verbatim<font color=Cyan>(</font>verbatim<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line86)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Text<font color=Cyan>.</font>XML<font color=Cyan>.</font>HaXml<font color=Cyan>.</font>ByteStringPP <font color=Green><u>as</u></font> FPS <font color=Cyan>(</font>document<font color=Cyan>)</font>+<a name="(line87)"></a><font color=Green><u>import</u></font> <font color=Green><u>qualified</u></font> Data<font color=Cyan>.</font>ByteString<font color=Cyan>.</font>Lazy<font color=Cyan>.</font>Char8 <font color=Green><u>as</u></font> FPS+<a name="(line88)"></a>+<a name="(line89)"></a><font color=Green><u>import</u></font> Text<font color=Cyan>.</font>ParserCombinators<font color=Cyan>.</font>Poly+<a name="(line90)"></a>+<a name="(line91)"></a><font color=Blue>--  #define DEBUG</font>+<a name="(line92)"></a>+<a name="(line93)"></a><font color=Magenta><em>#if defined(DEBUG)</em></font>+<a name="(line94)"></a><font color=Green><u>import</u></font> Debug<font color=Cyan>.</font>Trace<font color=Cyan>(</font>trace<font color=Cyan>)</font>+<a name="(line95)"></a><a name="debug"></a>debug <font color=Red>::</font> a <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> a+<a name="(line96)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> s <font color=Red>=</font> trace s v+<a name="(line97)"></a><font color=Magenta><em>#else</em></font>+<a name="(line98)"></a>debug <font color=Red>::</font> t <font color=Red>-&gt;</font> t1 <font color=Red>-&gt;</font> t+<a name="(line99)"></a><a name="debug"></a>v <font color=Cyan>`debug`</font> <font color=Green><u>_</u></font> <font color=Red>=</font> v+<a name="(line100)"></a><font color=Magenta><em>#endif</em></font>+<a name="(line101)"></a>+<a name="(line102)"></a>+<a name="(line103)"></a><a name="attval"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line104)"></a><font color=Blue>-- | Read a single attribute called "value".</font>+<a name="(line105)"></a>attval <font color=Red>::</font> <font color=Cyan>(</font>Read a<font color=Cyan>)</font> <font color=Red>=&gt;</font> Element i <font color=Red>-&gt;</font> a+<a name="(line106)"></a>attval <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"value"</font><font color=Cyan>,</font>v<font color=Red>@</font><font color=Cyan>(</font>AttValue <font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> <font color=Red>=</font> read <font color=Cyan>(</font>show v<font color=Cyan>)</font>+<a name="(line107)"></a>+<a name="(line108)"></a><a name="mkAttr"></a><font color=Blue>-- | Generate a single attribute.</font>+<a name="(line109)"></a>mkAttr <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Attribute+<a name="(line110)"></a>mkAttr n v <font color=Red>=</font> <font color=Cyan>(</font>n<font color=Cyan>,</font> AttValue <font color=Red>[</font>Left v<font color=Red>]</font><font color=Cyan>)</font>+<a name="(line111)"></a>+<a name="(line112)"></a><a name="mkElem"></a><font color=Blue>-- | Generate an element with no attributes, named for its HType.</font>+<a name="(line113)"></a>mkElem <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font> <font color=Red>-&gt;</font> Content ()+<a name="(line114)"></a>mkElem x cs  <font color=Red>=</font> CElem <font color=Cyan>(</font>Elem <font color=Cyan>(</font>showHType <font color=Cyan>(</font>toHType x<font color=Cyan>)</font> <font color=Magenta>""</font><font color=Cyan>)</font> [] cs<font color=Cyan>)</font> ()+<a name="(line115)"></a>+<a name="(line116)"></a><a name="mkElemC"></a><font color=Blue>-- | Generate an element with no attributes, named directly.</font>+<a name="(line117)"></a>mkElemC <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font> <font color=Red>-&gt;</font> Content ()+<a name="(line118)"></a>mkElemC x cs <font color=Red>=</font> CElem <font color=Cyan>(</font>Elem x [] cs<font color=Cyan>)</font> ()+<a name="(line119)"></a>+<a name="(line120)"></a><a name="toText"></a><font color=Blue>-- | Turn a simple string into XML text.</font>+<a name="(line121)"></a>toText <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>+<a name="(line122)"></a>toText s <font color=Red>=</font> <font color=Red>[</font>CString False s ()<font color=Red>]</font>+<a name="(line123)"></a>+<a name="(line124)"></a><a name="toCData"></a><font color=Blue>-- | Turn a string into an XML CDATA section.</font>+<a name="(line125)"></a><font color=Blue>--   (i.e. special characters like '&amp;' are preserved without interpretation.)</font>+<a name="(line126)"></a>toCData <font color=Red>::</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>+<a name="(line127)"></a>toCData s <font color=Red>=</font> <font color=Red>[</font>CString True s ()<font color=Red>]</font>+<a name="(line128)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line129)"></a>+<a name="(line130)"></a>        <font color=Blue>-- probably want to write DTD separately from value, and have</font>+<a name="(line131)"></a>        <font color=Blue>-- easy ways to combine DTD + value into a document, or write</font>+<a name="(line132)"></a>        <font color=Blue>-- them to separate files.</font>+<a name="(line133)"></a>+<a name="(line134)"></a><a name="fReadXml"></a><font color=Blue>-- | Read an XML document from a file and convert it to a fully-typed</font>+<a name="(line135)"></a><font color=Blue>--   Haskell value.</font>+<a name="(line136)"></a>fReadXml  <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> FilePath <font color=Red>-&gt;</font> IO a+<a name="(line137)"></a>fReadXml fp <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line138)"></a>    f <font color=Red>&lt;-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdin+<a name="(line139)"></a>           <font color=Green><u>else</u></font> openFile fp ReadMode <font color=Cyan>)</font>+<a name="(line140)"></a>    x <font color=Red>&lt;-</font> hGetContents f+<a name="(line141)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse fp x+<a name="(line142)"></a>        y' <font color=Red>=</font> CElem y <font color=Cyan>(</font>posInNewCxt fp Nothing<font color=Cyan>)</font>+<a name="(line143)"></a>    either fail return <font color=Cyan>(</font>fst <font color=Cyan>(</font>runParser parseContents <font color=Red>[</font>y'<font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line144)"></a>+<a name="(line145)"></a><a name="fWriteXml"></a><font color=Blue>-- | Write a fully-typed Haskell value to the given file as an XML</font>+<a name="(line146)"></a><font color=Blue>--   document.</font>+<a name="(line147)"></a>fWriteXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> FilePath <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()+<a name="(line148)"></a>fWriteXml fp x <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line149)"></a>    f <font color=Red>&lt;-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout+<a name="(line150)"></a>           <font color=Green><u>else</u></font> openFile fp WriteMode <font color=Cyan>)</font>+<a name="(line151)"></a>    hPutXml f False x+<a name="(line152)"></a>    hClose f+<a name="(line153)"></a>+<a name="(line154)"></a><a name="fpsWriteXml"></a><font color=Blue>-- | Write any Haskell value to the given file as an XML document,</font>+<a name="(line155)"></a><font color=Blue>--   using the FastPackedString interface (output will not be prettified).</font>+<a name="(line156)"></a>fpsWriteXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> FilePath <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()+<a name="(line157)"></a>fpsWriteXml fp x <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line158)"></a>    f <font color=Red>&lt;-</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> fp<font color=Cyan>==</font><font color=Magenta>"-"</font> <font color=Green><u>then</u></font> return stdout+<a name="(line159)"></a>           <font color=Green><u>else</u></font> openFile fp WriteMode <font color=Cyan>)</font>+<a name="(line160)"></a>    fpsHPutXml f False x+<a name="(line161)"></a>    hClose f+<a name="(line162)"></a>+<a name="(line163)"></a><a name="readXml"></a><font color=Blue>-- | Read a fully-typed XML document from a string.</font>+<a name="(line164)"></a>readXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> String <font color=Red>-&gt;</font> Either String a+<a name="(line165)"></a>readXml s <font color=Red>=</font>+<a name="(line166)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse <font color=Magenta>"string input"</font> s <font color=Green><u>in</u></font>+<a name="(line167)"></a>    fst <font color=Cyan>(</font>runParser parseContents+<a name="(line168)"></a>                   <font color=Red>[</font>CElem y <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"string input"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>+<a name="(line169)"></a>+<a name="(line170)"></a><a name="showXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (without DTD).</font>+<a name="(line171)"></a>showXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> String+<a name="(line172)"></a>showXml dtd x <font color=Red>=</font>+<a name="(line173)"></a>    <font color=Green><u>case</u></font> toContents x <font color=Green><u>of</u></font>+<a name="(line174)"></a>      <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>render <font color=Cyan>.</font> document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x+<a name="(line175)"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Magenta>""</font>+<a name="(line176)"></a>+<a name="(line177)"></a><a name="fpsShowXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a ByteString (without DTD).</font>+<a name="(line178)"></a>fpsShowXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> FPS<font color=Cyan>.</font>ByteString+<a name="(line179)"></a>fpsShowXml dtd x <font color=Red>=</font>+<a name="(line180)"></a>    <font color=Green><u>case</u></font> toContents x <font color=Green><u>of</u></font>+<a name="(line181)"></a>      <font color=Red>[</font>CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Red>]</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>FPS<font color=Cyan>.</font>document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x+<a name="(line182)"></a>      <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> FPS<font color=Cyan>.</font>empty+<a name="(line183)"></a>+<a name="(line184)"></a>+<a name="(line185)"></a><a name="toXml"></a><font color=Blue>-- | Convert a fully-typed XML document to a string (with or without DTD).</font>+<a name="(line186)"></a>toXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Document ()+<a name="(line187)"></a>toXml dtd value <font color=Red>=</font>+<a name="(line188)"></a>    <font color=Green><u>let</u></font> ht <font color=Red>=</font> toHType value <font color=Green><u>in</u></font>+<a name="(line189)"></a>    Document <font color=Cyan>(</font>Prolog <font color=Cyan>(</font>Just <font color=Cyan>(</font>XMLDecl <font color=Magenta>"1.0"</font> Nothing Nothing<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line190)"></a>                     [] <font color=Cyan>(</font><font color=Green><u>if</u></font> dtd <font color=Green><u>then</u></font> Just <font color=Cyan>(</font>toDTD ht<font color=Cyan>)</font> <font color=Green><u>else</u></font> Nothing<font color=Cyan>)</font> []<font color=Cyan>)</font>+<a name="(line191)"></a>             emptyST+<a name="(line192)"></a>             <font color=Cyan>(</font> <font color=Green><u>case</u></font> <font color=Cyan>(</font>ht<font color=Cyan>,</font> toContents value<font color=Cyan>)</font> <font color=Green><u>of</u></font>+<a name="(line193)"></a>                 <font color=Cyan>(</font>Tuple <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font>       <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>""</font><font color=Cyan>)</font> [] cs+<a name="(line194)"></a>                 <font color=Cyan>(</font>Defined <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>,</font> cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> Elem <font color=Cyan>(</font>showHType ht <font color=Magenta>"-XML"</font><font color=Cyan>)</font> [] cs+<a name="(line195)"></a>                 <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Red>[</font>CElem e ()<font color=Red>]</font><font color=Cyan>)</font>   <font color=Red>-&gt;</font> e <font color=Cyan>)</font>+<a name="(line196)"></a>             []+<a name="(line197)"></a>+<a name="(line198)"></a><a name="fromXml"></a><font color=Blue>-- | Read a Haskell value from an XML document, ignoring the DTD and</font>+<a name="(line199)"></a><font color=Blue>--   using the Haskell result type to determine how to parse it.</font>+<a name="(line200)"></a>fromXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Document Posn <font color=Red>-&gt;</font> Either String a+<a name="(line201)"></a>fromXml <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> e<font color=Red>@</font><font color=Cyan>(</font>Elem n <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Cyan>)</font>+<a name="(line202)"></a>  <font color=Red>|</font> <font color=Magenta>"tuple"</font> <font color=Cyan>`isPrefixOf`</font> n <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents cs<font color=Cyan>)</font>+<a name="(line203)"></a>  <font color=Red>|</font> <font color=Magenta>"-XML"</font>  <font color=Cyan>`isSuffixOf`</font> n <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents cs<font color=Cyan>)</font>+<a name="(line204)"></a>  <font color=Red>|</font> otherwise <font color=Red>=</font> fst <font color=Cyan>(</font>runParser parseContents+<a name="(line205)"></a>                               <font color=Red>[</font>CElem e <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"document"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font>+<a name="(line206)"></a>+<a name="(line207)"></a>+<a name="(line208)"></a><a name="hGetXml"></a><font color=Blue>-- | Read a fully-typed XML document from a file handle.</font>+<a name="(line209)"></a>hGetXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Handle <font color=Red>-&gt;</font> IO a+<a name="(line210)"></a>hGetXml h <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line211)"></a>    x <font color=Red>&lt;-</font> hGetContents h+<a name="(line212)"></a>    <font color=Green><u>let</u></font> <font color=Cyan>(</font>Document <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> y <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xmlParse <font color=Magenta>"file handle"</font> x+<a name="(line213)"></a>    either fail return+<a name="(line214)"></a>           <font color=Cyan>(</font>fst <font color=Cyan>(</font>runParser parseContents+<a name="(line215)"></a>                           <font color=Red>[</font>CElem y <font color=Cyan>(</font>posInNewCxt <font color=Magenta>"file handle"</font> Nothing<font color=Cyan>)</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line216)"></a>+<a name="(line217)"></a><a name="hPutXml"></a><font color=Blue>-- | Write a fully-typed XML document to a file handle.</font>+<a name="(line218)"></a>hPutXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Handle <font color=Red>-&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()+<a name="(line219)"></a>hPutXml h dtd x <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line220)"></a>    <font color=Cyan>(</font>hPutStrLn h <font color=Cyan>.</font> render <font color=Cyan>.</font> document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x+<a name="(line221)"></a>+<a name="(line222)"></a><a name="fpsHPutXml"></a><font color=Blue>-- | Write a fully-typed XML document to a file handle, using the</font>+<a name="(line223)"></a><font color=Blue>--   FastPackedString interface (output will not be prettified).</font>+<a name="(line224)"></a>fpsHPutXml <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> Handle <font color=Red>-&gt;</font> Bool <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> IO ()+<a name="(line225)"></a>fpsHPutXml h dtd x <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line226)"></a>    <font color=Cyan>(</font>FPS<font color=Cyan>.</font>hPut h <font color=Cyan>.</font> FPS<font color=Cyan>.</font>document <font color=Cyan>.</font> toXml dtd<font color=Cyan>)</font> x+<a name="(line227)"></a>+<a name="(line228)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line229)"></a>+<a name="(line230)"></a><a name="XMLParser"></a><font color=Blue>-- | We need a parsing monad for reading generic XML Content into specific</font>+<a name="(line231)"></a><a name="XMLParser"></a><font color=Blue>--   datatypes.  This is a specialisation of the Text.ParserCombinators.Poly</font>+<a name="(line232)"></a><a name="XMLParser"></a><font color=Blue>--   ones, where the input token type is fixed as XML Content.</font>+<a name="(line233)"></a><a name="XMLParser"></a><font color=Green><u>type</u></font> XMLParser a <font color=Red>=</font> Parser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font> a+<a name="(line234)"></a>+<a name="(line235)"></a>+<a name="(line236)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line237)"></a><font color=Blue>-- Some useful parsing combinators</font>+<a name="(line238)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line239)"></a>+<a name="(line240)"></a><a name="content"></a><font color=Blue>-- | The most primitive combinator for XMLParser - get one content item.</font>+<a name="(line241)"></a>content <font color=Red>::</font> String <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Content Posn<font color=Cyan>)</font>+<a name="(line242)"></a>content word <font color=Red>=</font> next <font color=Cyan>`adjustErr`</font> <font color=Cyan>(</font><font color=Cyan>++</font><font color=Magenta>" when expecting "</font><font color=Cyan>++</font>word<font color=Cyan>)</font>+<a name="(line243)"></a>+<a name="(line244)"></a><a name="posnElementWith"></a><font color=Blue>-- | Get the next content element, checking that it has one of the required</font>+<a name="(line245)"></a><font color=Blue>--   tags, using the given matching function.</font>+<a name="(line246)"></a><font color=Blue>--   (Skips over comments and whitespace, rejects text and refs.</font>+<a name="(line247)"></a><font color=Blue>--    Also returns position of element.)</font>+<a name="(line248)"></a>posnElementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font>+<a name="(line249)"></a>                   <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Posn<font color=Cyan>,</font> Element Posn<font color=Cyan>)</font>+<a name="(line250)"></a>posnElementWith match tags <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line251)"></a>    <font color=Cyan>{</font> c <font color=Red>&lt;-</font> content <font color=Cyan>(</font>formatted tags<font color=Cyan>)</font>+<a name="(line252)"></a>    <font color=Cyan>;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>+<a name="(line253)"></a>          CElem e<font color=Red>@</font><font color=Cyan>(</font>Elem t <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> pos+<a name="(line254)"></a>              <font color=Red>|</font> any <font color=Cyan>(</font>match t<font color=Cyan>)</font> tags <font color=Red>-&gt;</font> return <font color=Cyan>(</font>pos<font color=Cyan>,</font> e<font color=Cyan>)</font>+<a name="(line255)"></a>              <font color=Red>|</font> otherwise          <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Found a &lt;"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>"&gt;, but expected "</font>+<a name="(line256)"></a>                                           <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>+<a name="(line257)"></a>          CString b s pos+<a name="(line258)"></a>              <font color=Red>|</font> not b <font color=Cyan>&amp;&amp;</font> all isSpace s <font color=Red>-&gt;</font> posnElementWith match tags+<a name="(line259)"></a>                                                        <font color=Blue>-- ignore blank space</font>+<a name="(line260)"></a>              <font color=Red>|</font> otherwise <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Found text content, but expected "</font>+<a name="(line261)"></a>                                  <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\ntext is: "</font><font color=Cyan>++</font>s+<a name="(line262)"></a>                                  <font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>+<a name="(line263)"></a>          CRef r pos <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Found reference, but expected "</font>+<a name="(line264)"></a>                             <font color=Cyan>++</font>formatted tags<font color=Cyan>++</font><font color=Magenta>"\nreference is: "</font><font color=Cyan>++</font>verbatim r+<a name="(line265)"></a>                             <font color=Cyan>++</font><font color=Magenta>"\nat "</font><font color=Cyan>++</font>show pos<font color=Cyan>)</font>+<a name="(line266)"></a>          CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> posnElementWith match tags  <font color=Blue>-- skip comments, PIs, etc.</font>+<a name="(line267)"></a>    <font color=Cyan>}</font>+<a name="(line268)"></a>  <font color=Green><u>where</u></font>+<a name="(line269)"></a>    formatted <font color=Red>[</font>t<font color=Red>]</font>  <font color=Red>=</font> <font color=Magenta>"a &lt;"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>"&gt;"</font>+<a name="(line270)"></a>    formatted tgs <font color=Red>=</font> <font color=Magenta>"one of"</font><font color=Cyan>++</font> concatMap <font color=Cyan>(</font><font color=Red>\</font>t<font color=Red>-&gt;</font><font color=Magenta>" &lt;"</font><font color=Cyan>++</font>t<font color=Cyan>++</font><font color=Magenta>"&gt;"</font><font color=Cyan>)</font> tgs+<a name="(line271)"></a>+<a name="(line272)"></a><a name="posnElement"></a><font color=Blue>-- | A specialisation of @posnElementWith (==)@.</font>+<a name="(line273)"></a>posnElement <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Posn<font color=Cyan>,</font> Element Posn<font color=Cyan>)</font>+<a name="(line274)"></a>posnElement <font color=Red>=</font> posnElementWith <font color=Cyan>(</font><font color=Cyan>==</font><font color=Cyan>)</font>+<a name="(line275)"></a>+<a name="(line276)"></a><a name="element"></a><font color=Blue>-- | Get the next content element, checking that it has one of the required</font>+<a name="(line277)"></a><font color=Blue>--   tags.  (Skips over comments and whitespace, rejects text and refs.)</font>+<a name="(line278)"></a>element <font color=Red>::</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>+<a name="(line279)"></a>element tags <font color=Red>=</font> fmap snd <font color=Cyan>(</font>posnElement tags<font color=Cyan>)</font>+<a name="(line280)"></a>                                <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Element: "</font><font color=Cyan>++</font>unwords tags<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font>+<a name="(line281)"></a>+<a name="(line282)"></a><a name="elementWith"></a><font color=Blue>-- | Like element, only permits a more flexible match against the tagname.</font>+<a name="(line283)"></a>elementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>String<font color=Red>]</font> <font color=Red>-&gt;</font> XMLParser <font color=Cyan>(</font>Element Posn<font color=Cyan>)</font>+<a name="(line284)"></a>elementWith match tags <font color=Red>=</font> fmap snd <font color=Cyan>(</font>posnElementWith match tags<font color=Cyan>)</font>+<a name="(line285)"></a>                                <font color=Cyan>`debug`</font> <font color=Cyan>(</font><font color=Magenta>"Element: "</font><font color=Cyan>++</font>unwords tags<font color=Cyan>++</font><font color=Magenta>"\n"</font><font color=Cyan>)</font>+<a name="(line286)"></a>+<a name="(line287)"></a><a name="interior"></a><font color=Blue>-- | Run an XMLParser on the contents of the given element (i.e. not on the</font>+<a name="(line288)"></a><font color=Blue>--   current monadic content sequence), checking that the contents are</font>+<a name="(line289)"></a><font color=Blue>--   exhausted, before returning the calculated value within the current</font>+<a name="(line290)"></a><font color=Blue>--   parser context.</font>+<a name="(line291)"></a>interior <font color=Red>::</font> Element Posn <font color=Red>-&gt;</font> XMLParser a <font color=Red>-&gt;</font> XMLParser a+<a name="(line292)"></a>interior <font color=Cyan>(</font>Elem e <font color=Green><u>_</u></font> cs<font color=Cyan>)</font> p <font color=Red>=</font>+<a name="(line293)"></a>    <font color=Green><u>case</u></font> runParser p cs <font color=Green><u>of</u></font>+<a name="(line294)"></a>        <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> fail msg+<a name="(line295)"></a>        <font color=Cyan>(</font>Right x<font color=Cyan>,</font> []<font color=Cyan>)</font> <font color=Red>-&gt;</font> return x+<a name="(line296)"></a>        <font color=Cyan>(</font>Right x<font color=Cyan>,</font> ds<font color=Red>@</font><font color=Cyan>(</font>d<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line297)"></a>            <font color=Red>|</font> all onlyMisc ds <font color=Red>-&gt;</font> return x+<a name="(line298)"></a>            <font color=Red>|</font> otherwise       <font color=Red>-&gt;</font> fail <font color=Cyan>(</font><font color=Magenta>"Too many elements inside &lt;"</font><font color=Cyan>++</font>e<font color=Cyan>++</font><font color=Magenta>"&gt; at\n"</font>+<a name="(line299)"></a>                                      <font color=Cyan>++</font>show <font color=Cyan>(</font>info d<font color=Cyan>)</font><font color=Cyan>++</font><font color=Magenta>"\n"</font>+<a name="(line300)"></a>                                      <font color=Cyan>++</font><font color=Magenta>"Found excess: "</font><font color=Cyan>++</font>verbatim d<font color=Cyan>)</font>+<a name="(line301)"></a>  <font color=Green><u>where</u></font> onlyMisc <font color=Cyan>(</font>CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> True+<a name="(line302)"></a>        onlyMisc <font color=Cyan>(</font>CString False s <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>|</font> all isSpace s <font color=Red>=</font> True+<a name="(line303)"></a>        onlyMisc <font color=Green><u>_</u></font> <font color=Red>=</font> False+<a name="(line304)"></a>+<a name="(line305)"></a><a name="inElement"></a><font color=Blue>-- | A combination of element + interior.</font>+<a name="(line306)"></a>inElement <font color=Red>::</font> String <font color=Red>-&gt;</font> XMLParser a <font color=Red>-&gt;</font> XMLParser a+<a name="(line307)"></a>inElement tag p <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font>tag<font color=Red>]</font><font color=Cyan>;</font> commit <font color=Cyan>(</font>interior e p<font color=Cyan>)</font> <font color=Cyan>}</font>+<a name="(line308)"></a>+<a name="(line309)"></a><a name="inElementWith"></a><font color=Blue>-- | A combination of elementWith + interior.</font>+<a name="(line310)"></a>inElementWith <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>String<font color=Red>-&gt;</font>Bool<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> XMLParser a <font color=Red>-&gt;</font> XMLParser a+<a name="(line311)"></a>inElementWith match tag p <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> elementWith match <font color=Red>[</font>tag<font color=Red>]</font>+<a name="(line312)"></a>                               <font color=Cyan>;</font> commit <font color=Cyan>(</font>interior e p<font color=Cyan>)</font> <font color=Cyan>}</font>+<a name="(line313)"></a>+<a name="(line314)"></a><a name="attributes"></a><font color=Blue>-- | Do some parsing of the attributes of the given element</font>+<a name="(line315)"></a>attributes <font color=Red>::</font> XmlAttributes a <font color=Red>=&gt;</font> Element Posn <font color=Red>-&gt;</font> XMLParser a+<a name="(line316)"></a>attributes <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Green><u>as</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> return <font color=Cyan>(</font>fromAttrs <font color=Green><u>as</u></font><font color=Cyan>)</font>+<a name="(line317)"></a>+<a name="(line318)"></a><a name="text"></a><font color=Blue>-- | 'text' is a counterpart to 'element', parsing text content if it</font>+<a name="(line319)"></a><font color=Blue>--   exists.  Adjacent text and references are coalesced.</font>+<a name="(line320)"></a>text <font color=Red>::</font> XMLParser String+<a name="(line321)"></a>text <font color=Red>=</font> text' []+<a name="(line322)"></a>  <font color=Green><u>where</u></font> text' acc <font color=Red>=</font>+<a name="(line323)"></a>          <font color=Green><u>do</u></font> <font color=Cyan>{</font> c <font color=Red>&lt;-</font> content <font color=Magenta>"plain text"</font>+<a name="(line324)"></a>             <font color=Cyan>;</font> <font color=Green><u>case</u></font> c <font color=Green><u>of</u></font>+<a name="(line325)"></a>                 CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font>        <font color=Red>-&gt;</font> text' <font color=Cyan>(</font>s<font color=Red><b>:</b></font>acc<font color=Cyan>)</font>+<a name="(line326)"></a>                 CRef <font color=Cyan>(</font>RefChar s<font color=Cyan>)</font> <font color=Green><u>_</u></font>   <font color=Red>-&gt;</font> text' <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>"&amp;#"</font><font color=Cyan>++</font>show s<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font> <font color=Red><b>:</b></font>acc<font color=Cyan>)</font>+<a name="(line327)"></a>                 CRef <font color=Cyan>(</font>RefEntity s<font color=Cyan>)</font> <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> text' <font color=Cyan>(</font><font color=Cyan>(</font><font color=Magenta>'&amp;'</font><font color=Red><b>:</b></font>s<font color=Cyan>++</font><font color=Magenta>";"</font><font color=Cyan>)</font><font color=Red><b>:</b></font>acc<font color=Cyan>)</font>+<a name="(line328)"></a>                 CMisc <font color=Green><u>_</u></font> <font color=Green><u>_</u></font>            <font color=Red>-&gt;</font> text' acc+<a name="(line329)"></a>                 CElem <font color=Green><u>_</u></font> <font color=Green><u>_</u></font>         <font color=Red>-&gt;</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> reparse <font color=Red>[</font>c<font color=Red>]</font> <font color=Blue>-- put it back!</font>+<a name="(line330)"></a>                                         <font color=Cyan>;</font> <font color=Green><u>if</u></font> null acc <font color=Green><u>then</u></font> fail <font color=Magenta>"empty string"</font>+<a name="(line331)"></a>                                           <font color=Green><u>else</u></font> return <font color=Cyan>(</font>concat <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line332)"></a>                                         <font color=Cyan>}</font>+<a name="(line333)"></a>             <font color=Cyan>}</font>+<a name="(line334)"></a>          <font color=Cyan>`onFail`</font> <font color=Cyan>(</font> <font color=Green><u>if</u></font> null acc <font color=Green><u>then</u></font> fail <font color=Magenta>"empty string"</font>+<a name="(line335)"></a>                     <font color=Green><u>else</u></font> return <font color=Cyan>(</font>concat <font color=Cyan>(</font>reverse acc<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>)</font>+<a name="(line336)"></a>+<a name="(line337)"></a>+<a name="(line338)"></a><a name="choice"></a><font color=Blue>-- | 'choice f p' means if parseContents succeeds, apply f to the result,</font>+<a name="(line339)"></a><font color=Blue>--   otherwise use the continuation parser.</font>+<a name="(line340)"></a>choice <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> <font color=Cyan>(</font>a <font color=Red>-&gt;</font> b<font color=Cyan>)</font> <font color=Red>-&gt;</font> XMLParser b <font color=Red>-&gt;</font> XMLParser b+<a name="(line341)"></a>choice cons <font color=Cyan>(</font>P other<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line342)"></a>    P <font color=Cyan>(</font><font color=Red>\</font>cs<font color=Red>-&gt;</font> <font color=Green><u>case</u></font> runParser parseContents cs <font color=Green><u>of</u></font>+<a name="(line343)"></a>                 <font color=Cyan>(</font>Left <font color=Green><u>_</u></font><font color=Cyan>,</font> <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> other cs+<a name="(line344)"></a>                 <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs'<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>cons x<font color=Cyan>)</font><font color=Cyan>,</font> cs'<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line345)"></a>+<a name="(line346)"></a><font color=Blue>--choice cons other = fmap cons parseContents `onFail` other</font>+<a name="(line347)"></a>+<a name="(line348)"></a><a name="definite"></a><font color=Blue>-- | not sure this is needed now.   'definite p' previously ensured that</font>+<a name="(line349)"></a><font color=Blue>--   an element was definitely present.  Now I think the monad might take</font>+<a name="(line350)"></a><font color=Blue>--   care of that for us.</font>+<a name="(line351)"></a>definite <font color=Red>::</font> XmlContent a <font color=Red>=&gt;</font> XMLParser a <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> XMLParser a+<a name="(line352)"></a>definite p inner tag <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>cs<font color=Red>-&gt;</font> <font color=Green><u>case</u></font> runParser p cs <font color=Green><u>of</u></font>+<a name="(line353)"></a>                                   <font color=Cyan>(</font>Left <font color=Green><u>_</u></font><font color=Cyan>,</font> cs'<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>msg'<font color=Cyan>)</font><font color=Cyan>,</font> cs'<font color=Cyan>)</font>+<a name="(line354)"></a>                                   <font color=Cyan>(</font>Right x<font color=Cyan>,</font> cs'<font color=Cyan>)</font>  <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right x<font color=Cyan>,</font>   cs'<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line355)"></a>  <font color=Green><u>where</u></font> msg' <font color=Red>=</font> <font color=Magenta>"content error: expected "</font><font color=Cyan>++</font>inner<font color=Cyan>++</font><font color=Magenta>" inside &lt;"</font><font color=Cyan>++</font>tag+<a name="(line356)"></a>               <font color=Cyan>++</font><font color=Magenta>"&gt; element\n"</font>+<a name="(line357)"></a>+<a name="(line358)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line359)"></a>+<a name="(line360)"></a><a name="XmlContent"></a><font color=Blue>-- | The @XmlContent@ class promises that an XML Content element can be</font>+<a name="(line361)"></a><a name="XmlContent"></a><font color=Blue>--   converted to and from a Haskell value.</font>+<a name="(line362)"></a><a name="XmlContent"></a><font color=Green><u>class</u></font> HTypeable a <font color=Red>=&gt;</font> XmlContent a <font color=Green><u>where</u></font>+<a name="(line363)"></a>    <font color=Blue>-- | Convert from XML to Haskell</font>+<a name="(line364)"></a>    parseContents <font color=Red>::</font> XMLParser a+<a name="(line365)"></a>    <font color=Blue>-- | Convert from Haskell to XML</font>+<a name="(line366)"></a>    toContents    <font color=Red>::</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Content ()<font color=Red>]</font>+<a name="(line367)"></a>+<a name="(line368)"></a>    <font color=Blue>-- | Dummy functions (for most types): used /only/ in the Char instance</font>+<a name="(line369)"></a>    <font color=Blue>--   for coercing lists of Char into String.</font>+<a name="(line370)"></a>    xToChar       <font color=Red>::</font> a <font color=Red>-&gt;</font> Char+<a name="(line371)"></a>    xFromChar     <font color=Red>::</font> Char <font color=Red>-&gt;</font> a+<a name="(line372)"></a>    xToChar        <font color=Red>=</font> error <font color=Magenta>"HaXml.XmlContent.xToChar used in error"</font>+<a name="(line373)"></a>    xFromChar      <font color=Red>=</font> error <font color=Magenta>"HaXml.XmlContent.xFromChar used in error"</font>+<a name="(line374)"></a>+<a name="(line375)"></a><a name="XmlAttributes"></a><font color=Blue>-- | The @XmlAttributes@ class promises that a list of XML tag attributes</font>+<a name="(line376)"></a><a name="XmlAttributes"></a><font color=Blue>--   can be converted to and from a Haskell value.</font>+<a name="(line377)"></a><a name="XmlAttributes"></a><font color=Green><u>class</u></font> XmlAttributes a <font color=Green><u>where</u></font>+<a name="(line378)"></a>    fromAttrs <font color=Red>::</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> a+<a name="(line379)"></a>    toAttrs   <font color=Red>::</font> a <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font>+<a name="(line380)"></a><a name="XmlAttrType"></a><font color=Blue>-- | The @XmlAttrType@ class promises that an attribute taking an XML</font>+<a name="(line381)"></a><a name="XmlAttrType"></a><font color=Blue>--   enumerated type can be converted to and from a Haskell value.</font>+<a name="(line382)"></a><a name="XmlAttrType"></a><font color=Green><u>class</u></font> XmlAttrType a <font color=Green><u>where</u></font>+<a name="(line383)"></a>    fromAttrToTyp <font color=Red>::</font> String <font color=Red>-&gt;</font> Attribute <font color=Red>-&gt;</font> Maybe a+<a name="(line384)"></a>    toAttrFrTyp   <font color=Red>::</font> String <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> Maybe Attribute+<a name="(line385)"></a>+<a name="(line386)"></a>+<a name="(line387)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line388)"></a><font color=Blue>-- Instances for all the standard basic datatypes.</font>+<a name="(line389)"></a><font color=Blue>-- These are for Haskell datatypes being derived to go to XML.</font>+<a name="(line390)"></a><font color=Blue>-- DtdToHaskell does not use these instances.</font>+<a name="(line391)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line392)"></a>+<a name="(line393)"></a><font color=Green><u>instance</u></font> XmlContent Bool <font color=Green><u>where</u></font>+<a name="(line394)"></a>    toContents b   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"bool"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show b<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>+<a name="(line395)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"bool"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>+<a name="(line396)"></a>+<a name="(line397)"></a><font color=Green><u>instance</u></font> XmlContent Int <font color=Green><u>where</u></font>+<a name="(line398)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"int"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>+<a name="(line399)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"int"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>+<a name="(line400)"></a>+<a name="(line401)"></a><font color=Green><u>instance</u></font> XmlContent Integer <font color=Green><u>where</u></font>+<a name="(line402)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"integer"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>+<a name="(line403)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"integer"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>+<a name="(line404)"></a>+<a name="(line405)"></a><font color=Green><u>instance</u></font> XmlContent Float <font color=Green><u>where</u></font>+<a name="(line406)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"float"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>+<a name="(line407)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"float"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>+<a name="(line408)"></a>+<a name="(line409)"></a><font color=Green><u>instance</u></font> XmlContent Double <font color=Green><u>where</u></font>+<a name="(line410)"></a>    toContents i   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"double"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Cyan>(</font>show i<font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>+<a name="(line411)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> e <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"double"</font><font color=Red>]</font> <font color=Cyan>;</font> return <font color=Cyan>(</font>attval e<font color=Cyan>)</font> <font color=Cyan>}</font>+<a name="(line412)"></a>+<a name="(line413)"></a><font color=Green><u>instance</u></font> XmlContent Char <font color=Green><u>where</u></font>+<a name="(line414)"></a>    <font color=Blue>-- NOT in a string</font>+<a name="(line415)"></a>    toContents c   <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"char"</font> <font color=Red>[</font>mkAttr <font color=Magenta>"value"</font> <font color=Red>[</font>c<font color=Red>]</font><font color=Red>]</font> []<font color=Cyan>)</font> ()<font color=Red>]</font>+<a name="(line416)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> <font color=Red>[</font><font color=Cyan>(</font><font color=Magenta>"value"</font><font color=Cyan>,</font><font color=Cyan>(</font>AttValue <font color=Red>[</font>Left <font color=Red>[</font>c<font color=Red>]</font><font color=Red>]</font><font color=Cyan>)</font><font color=Cyan>)</font><font color=Red>]</font> []<font color=Cyan>)</font>+<a name="(line417)"></a>                             <font color=Red>&lt;-</font> element <font color=Red>[</font><font color=Magenta>"char"</font><font color=Red>]</font>+<a name="(line418)"></a>                       <font color=Cyan>;</font> return c+<a name="(line419)"></a>                       <font color=Cyan>}</font>+<a name="(line420)"></a>    <font color=Blue>-- Only defined for Char and no other types:</font>+<a name="(line421)"></a>    xToChar   <font color=Red>=</font> id+<a name="(line422)"></a>    xFromChar <font color=Red>=</font> id+<a name="(line423)"></a>+<a name="(line424)"></a><font color=Green><u>instance</u></font> XmlContent a <font color=Red>=&gt;</font> XmlContent <font color=Red>[</font>a<font color=Red>]</font> <font color=Green><u>where</u></font>+<a name="(line425)"></a>    toContents xs  <font color=Red>=</font> <font color=Green><u>case</u></font> toHType x <font color=Green><u>of</u></font>+<a name="(line426)"></a>                       <font color=Cyan>(</font>Prim <font color=Magenta>"Char"</font> <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font>+<a name="(line427)"></a>                            <font color=Red>[</font>mkElem <font color=Magenta>"string"</font> <font color=Red>[</font>CString True <font color=Cyan>(</font>map xToChar xs<font color=Cyan>)</font> ()<font color=Red>]</font><font color=Red>]</font>+<a name="(line428)"></a>                       <font color=Green><u>_</u></font> <font color=Red>-&gt;</font> <font color=Red>[</font>mkElem xs <font color=Cyan>(</font>concatMap toContents xs<font color=Cyan>)</font><font color=Red>]</font>+<a name="(line429)"></a>                   <font color=Green><u>where</u></font>   <font color=Cyan>(</font>x<font color=Red><b>:</b></font><font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>=</font> xs+<a name="(line430)"></a>    parseContents <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>x <font color=Red>-&gt;</font>+<a name="(line431)"></a>        <font color=Green><u>case</u></font> x <font color=Green><u>of</u></font>+<a name="(line432)"></a>            <font color=Cyan>(</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>+<a name="(line433)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>map xFromChar s<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>+<a name="(line434)"></a>            <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"string"</font> [] <font color=Red>[</font>CString <font color=Green><u>_</u></font> s <font color=Green><u>_</u></font><font color=Red>]</font><font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font>+<a name="(line435)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>map xFromChar s<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>+<a name="(line436)"></a>            <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem e [] xs<font color=Cyan>)</font> <font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>|</font> <font color=Magenta>"list"</font> <font color=Cyan>`isPrefixOf`</font> e+<a name="(line437)"></a>                   <font color=Red>-&gt;</font> scanElements xs+<a name="(line438)"></a>                   <font color=Green><u>where</u></font>+<a name="(line439)"></a>                  <font color=Blue>-- scanElements :: [Content] -&gt; (Either String [a],[Content])</font>+<a name="(line440)"></a>                     scanElements [] <font color=Red>=</font> <font color=Cyan>(</font>Right []<font color=Cyan>,</font> cs<font color=Cyan>)</font>+<a name="(line441)"></a>                     scanElements es <font color=Red>=</font>+<a name="(line442)"></a>                        <font color=Green><u>case</u></font> runParser parseContents es <font color=Green><u>of</u></font>+<a name="(line443)"></a>                            <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> es'<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False<font color=Cyan>,</font>msg<font color=Cyan>)</font><font color=Cyan>,</font> es'<font color=Cyan>)</font>+<a name="(line444)"></a>                            <font color=Cyan>(</font>Right y<font color=Cyan>,</font> es'<font color=Cyan>)</font> <font color=Red>-&gt;</font>+<a name="(line445)"></a>                                <font color=Green><u>case</u></font> scanElements es' <font color=Green><u>of</u></font>+<a name="(line446)"></a>                                    <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> ds<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left msg<font color=Cyan>,</font> ds<font color=Cyan>)</font>+<a name="(line447)"></a>                                    <font color=Cyan>(</font>Right ys<font color=Cyan>,</font> ds<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>y<font color=Red><b>:</b></font>ys<font color=Cyan>)</font><font color=Cyan>,</font> ds<font color=Cyan>)</font>+<a name="(line448)"></a>            <font color=Cyan>(</font>CElem <font color=Cyan>(</font>Elem e <font color=Green><u>_</u></font> <font color=Green><u>_</u></font><font color=Cyan>)</font> pos<font color=Red><b>:</b></font> cs<font color=Cyan>)</font>+<a name="(line449)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False+<a name="(line450)"></a>                            <font color=Cyan>,</font><font color=Magenta>"Expected a &lt;list-...&gt;, but found a &lt;"</font><font color=Cyan>++</font>e<font color=Cyan>++</font><font color=Magenta>"&gt; at\n"</font>+<a name="(line451)"></a>                            <font color=Cyan>++</font> show pos<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>+<a name="(line452)"></a>            <font color=Cyan>(</font>CRef r pos<font color=Red><b>:</b></font> cs<font color=Cyan>)</font>+<a name="(line453)"></a>                   <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False+<a name="(line454)"></a>                            <font color=Cyan>,</font><font color=Magenta>"Expected a &lt;list-...&gt;, but found a ref "</font>+<a name="(line455)"></a>                            <font color=Cyan>++</font>verbatim r<font color=Cyan>++</font><font color=Magenta>" at\n"</font><font color=Cyan>++</font> show pos<font color=Cyan>)</font><font color=Cyan>,</font> cs<font color=Cyan>)</font>+<a name="(line456)"></a>            <font color=Cyan>(</font><font color=Green><u>_</u></font><font color=Red><b>:</b></font>cs<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Cyan>(</font><font color=Cyan>(</font><font color=Red>\</font> <font color=Cyan>(</font>P p<font color=Cyan>)</font><font color=Red>-&gt;</font> p<font color=Cyan>)</font> parseContents<font color=Cyan>)</font> cs  <font color=Blue>-- skip comments etc.</font>+<a name="(line457)"></a>            []     <font color=Red>-&gt;</font> <font color=Cyan>(</font>Left <font color=Cyan>(</font>False+<a name="(line458)"></a>                            <font color=Cyan>,</font><font color=Magenta>"Ran out of input XML whilst secondary parsing"</font><font color=Cyan>)</font>+<a name="(line459)"></a>                      <font color=Cyan>,</font> []<font color=Cyan>)</font>+<a name="(line460)"></a>        <font color=Cyan>)</font>+<a name="(line461)"></a>+<a name="(line462)"></a><font color=Green><u>instance</u></font> XmlContent () <font color=Green><u>where</u></font>+<a name="(line463)"></a>    toContents ()  <font color=Red>=</font> <font color=Red>[</font>CElem <font color=Cyan>(</font>Elem <font color=Magenta>"unit"</font> [] []<font color=Cyan>)</font> ()<font color=Red>]</font>+<a name="(line464)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font> <font color=Cyan>{</font> element <font color=Red>[</font><font color=Magenta>"unit"</font><font color=Red>]</font><font color=Cyan>;</font> return () <font color=Cyan>}</font>+<a name="(line465)"></a>+<a name="(line466)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line467)"></a>    toContents <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font> <font color=Red>=</font> toContents a <font color=Cyan>++</font> toContents b+<a name="(line468)"></a>    parseContents    <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line469)"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents+<a name="(line470)"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents+<a name="(line471)"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>)</font>+<a name="(line472)"></a>        <font color=Cyan>}</font>+<a name="(line473)"></a>+<a name="(line474)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line475)"></a>    toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z+<a name="(line476)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line477)"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents+<a name="(line478)"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents+<a name="(line479)"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents+<a name="(line480)"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>)</font>+<a name="(line481)"></a>        <font color=Cyan>}</font>+<a name="(line482)"></a>+<a name="(line483)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>,</font> XmlContent d<font color=Cyan>)</font> <font color=Red>=&gt;</font>+<a name="(line484)"></a>         XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line485)"></a>    toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>,</font>t<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z+<a name="(line486)"></a>                           <font color=Cyan>++</font> toContents t+<a name="(line487)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line488)"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents+<a name="(line489)"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents+<a name="(line490)"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents+<a name="(line491)"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents+<a name="(line492)"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>)</font>+<a name="(line493)"></a>        <font color=Cyan>}</font>+<a name="(line494)"></a>+<a name="(line495)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font> XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>,</font> XmlContent d+<a name="(line496)"></a>         <font color=Cyan>,</font> XmlContent e <font color=Cyan>)</font> <font color=Red>=&gt;</font>+<a name="(line497)"></a>         XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line498)"></a>    toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>,</font>t<font color=Cyan>,</font>u<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z+<a name="(line499)"></a>                             <font color=Cyan>++</font> toContents t <font color=Cyan>++</font> toContents u+<a name="(line500)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line501)"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents+<a name="(line502)"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents+<a name="(line503)"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents+<a name="(line504)"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents+<a name="(line505)"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents+<a name="(line506)"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>)</font>+<a name="(line507)"></a>        <font color=Cyan>}</font>+<a name="(line508)"></a>+<a name="(line509)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font> XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>,</font> XmlContent c<font color=Cyan>,</font> XmlContent d+<a name="(line510)"></a>         <font color=Cyan>,</font> XmlContent e<font color=Cyan>,</font> XmlContent f <font color=Cyan>)</font> <font color=Red>=&gt;</font>+<a name="(line511)"></a>         XmlContent <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>,</font>f<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line512)"></a>    toContents <font color=Cyan>(</font>x<font color=Cyan>,</font>y<font color=Cyan>,</font>z<font color=Cyan>,</font>t<font color=Cyan>,</font>u<font color=Cyan>,</font>v<font color=Cyan>)</font> <font color=Red>=</font> toContents x <font color=Cyan>++</font> toContents y <font color=Cyan>++</font> toContents z+<a name="(line513)"></a>                               <font color=Cyan>++</font> toContents t <font color=Cyan>++</font> toContents u <font color=Cyan>++</font> toContents v+<a name="(line514)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line515)"></a>        <font color=Cyan>{</font> a <font color=Red>&lt;-</font> parseContents+<a name="(line516)"></a>        <font color=Cyan>;</font> b <font color=Red>&lt;-</font> parseContents+<a name="(line517)"></a>        <font color=Cyan>;</font> c <font color=Red>&lt;-</font> parseContents+<a name="(line518)"></a>        <font color=Cyan>;</font> d <font color=Red>&lt;-</font> parseContents+<a name="(line519)"></a>        <font color=Cyan>;</font> e <font color=Red>&lt;-</font> parseContents+<a name="(line520)"></a>        <font color=Cyan>;</font> f <font color=Red>&lt;-</font> parseContents+<a name="(line521)"></a>        <font color=Cyan>;</font> return <font color=Cyan>(</font>a<font color=Cyan>,</font>b<font color=Cyan>,</font>c<font color=Cyan>,</font>d<font color=Cyan>,</font>e<font color=Cyan>,</font>f<font color=Cyan>)</font>+<a name="(line522)"></a>        <font color=Cyan>}</font>+<a name="(line523)"></a>+<a name="(line524)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>Maybe a<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line525)"></a>    toContents m   <font color=Red>=</font> <font color=Red>[</font>mkElem m <font color=Cyan>(</font>maybe [] toContents m<font color=Cyan>)</font><font color=Red>]</font>+<a name="(line526)"></a>    parseContents <font color=Red>=</font> <font color=Green><u>do</u></font>+<a name="(line527)"></a>        <font color=Cyan>{</font> e <font color=Red>&lt;-</font> elementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Red>[</font><font color=Magenta>"maybe"</font><font color=Red>]</font>+<a name="(line528)"></a>        <font color=Cyan>;</font> <font color=Green><u>case</u></font> e <font color=Green><u>of</u></font> <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> [] []<font color=Cyan>)</font> <font color=Red>-&gt;</font> return Nothing+<a name="(line529)"></a>                    <font color=Cyan>(</font>Elem <font color=Green><u>_</u></font> [] <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>-&gt;</font> fmap Just <font color=Cyan>(</font>interior e parseContents<font color=Cyan>)</font>+<a name="(line530)"></a>        <font color=Cyan>}</font>+<a name="(line531)"></a>+<a name="(line532)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> XmlContent b<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>Either a b<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line533)"></a>    toContents v<font color=Red>@</font><font color=Cyan>(</font>Left aa<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line534)"></a>        <font color=Red>[</font>mkElemC <font color=Cyan>(</font>showConstr <font color=Magenta>0</font> <font color=Cyan>(</font>toHType v<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>toContents aa<font color=Cyan>)</font><font color=Red>]</font>+<a name="(line535)"></a>    toContents v<font color=Red>@</font><font color=Cyan>(</font>Right ab<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line536)"></a>        <font color=Red>[</font>mkElemC <font color=Cyan>(</font>showConstr <font color=Magenta>1</font> <font color=Cyan>(</font>toHType v<font color=Cyan>)</font><font color=Cyan>)</font> <font color=Cyan>(</font>toContents ab<font color=Cyan>)</font><font color=Red>]</font>+<a name="(line537)"></a>    parseContents <font color=Red>=</font>+<a name="(line538)"></a>        <font color=Cyan>(</font>inElementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Magenta>"Left"</font>  <font color=Cyan>$</font> fmap Left  parseContents<font color=Cyan>)</font>+<a name="(line539)"></a>          <font color=Cyan>`onFail`</font>+<a name="(line540)"></a>        <font color=Cyan>(</font>inElementWith <font color=Cyan>(</font>flip isPrefixOf<font color=Cyan>)</font> <font color=Magenta>"Right"</font> <font color=Cyan>$</font> fmap Right parseContents<font color=Cyan>)</font>+<a name="(line541)"></a>+<a name="(line542)"></a><font color=Blue>--    do{ e@(Elem t [] _) &lt;- element ["Left","Right"]</font>+<a name="(line543)"></a><font color=Blue>--      ; case t of</font>+<a name="(line544)"></a><font color=Blue>--          _ | "Left"  `isPrefixOf` t -&gt; fmap Left  (interior e parseContents)</font>+<a name="(line545)"></a><font color=Blue>--            | "Right" `isPrefixOf` t -&gt; fmap Right (interior e parseContents)</font>+<a name="(line546)"></a><font color=Blue>--      }</font>+<a name="(line547)"></a>+<a name="(line548)"></a>+<a name="(line549)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line550)"></a><font color=Blue>-- Useful auxiliaries for "fromAttributes"</font>+<a name="(line551)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line552)"></a>+<a name="(line553)"></a><a name="Defaultable"></a><font color=Blue>-- | If an attribute is defaultable, then it either takes the default</font>+<a name="(line554)"></a><a name="Defaultable"></a><font color=Blue>--   value (which is omitted from the output), or a non-default value</font>+<a name="(line555)"></a><a name="Defaultable"></a><font color=Blue>--   (which obviously must be printed).</font>+<a name="(line556)"></a><a name="Defaultable"></a><font color=Green><u>data</u></font> Defaultable a  <font color=Red>=</font> Default a    <font color=Red>|</font> NonDefault a    <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font>Show<font color=Cyan>)</font>+<a name="(line557)"></a>+<a name="(line558)"></a><a name="searchMaybe"></a>searchMaybe <font color=Red>::</font> <font color=Cyan>(</font>a <font color=Red>-&gt;</font> Maybe b<font color=Cyan>)</font> <font color=Red>-&gt;</font> <font color=Red>[</font>a<font color=Red>]</font> <font color=Red>-&gt;</font> Maybe b+<a name="(line559)"></a>searchMaybe <font color=Green><u>_</u></font> [] <font color=Red>=</font> Nothing+<a name="(line560)"></a>searchMaybe f <font color=Cyan>(</font>x<font color=Red><b>:</b></font>xs<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line561)"></a>    <font color=Green><u>let</u></font> fx <font color=Red>=</font> f x <font color=Green><u>in</u></font>+<a name="(line562)"></a>    <font color=Green><u>case</u></font> fx <font color=Green><u>of</u></font>+<a name="(line563)"></a>      Nothing  <font color=Red>-&gt;</font> searchMaybe f xs+<a name="(line564)"></a>      <font color=Cyan>(</font>Just <font color=Green><u>_</u></font><font color=Cyan>)</font> <font color=Red>-&gt;</font> fx+<a name="(line565)"></a>+<a name="(line566)"></a><a name="maybeToAttr"></a>maybeToAttr <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>a<font color=Red>-&gt;</font>Maybe Attribute<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Maybe a+<a name="(line567)"></a>               <font color=Red>-&gt;</font> Maybe Attribute+<a name="(line568)"></a>maybeToAttr <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> Nothing  <font color=Red>=</font> Nothing+<a name="(line569)"></a>maybeToAttr to n <font color=Cyan>(</font>Just v<font color=Cyan>)</font> <font color=Red>=</font> to n v+<a name="(line570)"></a>+<a name="(line571)"></a><a name="defaultToAttr"></a>defaultToAttr <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>a<font color=Red>-&gt;</font>Maybe Attribute<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Defaultable a+<a name="(line572)"></a>                 <font color=Red>-&gt;</font> Maybe Attribute+<a name="(line573)"></a>defaultToAttr <font color=Green><u>_</u></font> <font color=Green><u>_</u></font> <font color=Cyan>(</font>Default <font color=Green><u>_</u></font><font color=Cyan>)</font>  <font color=Red>=</font> Nothing+<a name="(line574)"></a>defaultToAttr to n <font color=Cyan>(</font>NonDefault v<font color=Cyan>)</font> <font color=Red>=</font> to n v+<a name="(line575)"></a>+<a name="(line576)"></a><a name="definiteA"></a>definiteA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Attribute<font color=Red>-&gt;</font>Maybe a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> String+<a name="(line577)"></a>             <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> a+<a name="(line578)"></a>definiteA from tag at <font color=Green><u>as</u></font> <font color=Red>=</font>+<a name="(line579)"></a>    <font color=Green><u>case</u></font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font> <font color=Green><u>of</u></font>+<a name="(line580)"></a>      Nothing  <font color=Red>-&gt;</font> error <font color=Cyan>(</font><font color=Magenta>"missing attribute "</font><font color=Cyan>++</font>at<font color=Cyan>++</font><font color=Magenta>" in tag &lt;"</font><font color=Cyan>++</font>tag<font color=Cyan>++</font><font color=Magenta>"&gt;"</font><font color=Cyan>)</font>+<a name="(line581)"></a>      <font color=Cyan>(</font>Just a<font color=Cyan>)</font> <font color=Red>-&gt;</font> a+<a name="(line582)"></a>+<a name="(line583)"></a><a name="defaultA"></a>defaultA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Attribute<font color=Red>-&gt;</font>Maybe a<font color=Cyan>)</font> <font color=Red>-&gt;</font> a <font color=Red>-&gt;</font> String+<a name="(line584)"></a>            <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> Defaultable a+<a name="(line585)"></a>defaultA from def at <font color=Green><u>as</u></font> <font color=Red>=</font>+<a name="(line586)"></a>    <font color=Green><u>case</u></font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font> <font color=Green><u>of</u></font>+<a name="(line587)"></a>      Nothing  <font color=Red>-&gt;</font> Default def+<a name="(line588)"></a>      <font color=Cyan>(</font>Just a<font color=Cyan>)</font> <font color=Red>-&gt;</font> NonDefault a+<a name="(line589)"></a>+<a name="(line590)"></a><a name="possibleA"></a>possibleA <font color=Red>::</font> <font color=Cyan>(</font>String<font color=Red>-&gt;</font>Attribute<font color=Red>-&gt;</font>Maybe a<font color=Cyan>)</font> <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> <font color=Red>[</font>Attribute<font color=Red>]</font> <font color=Red>-&gt;</font> Maybe a+<a name="(line591)"></a>possibleA from at <font color=Green><u>as</u></font> <font color=Red>=</font> searchMaybe <font color=Cyan>(</font>from at<font color=Cyan>)</font> <font color=Green><u>as</u></font>+<a name="(line592)"></a>+<a name="(line593)"></a><a name="fromAttrToStr"></a>fromAttrToStr <font color=Red>::</font> String <font color=Red>-&gt;</font> Attribute <font color=Red>-&gt;</font> Maybe String+<a name="(line594)"></a>fromAttrToStr n <font color=Cyan>(</font>n0<font color=Cyan>,</font>v<font color=Cyan>)</font>+<a name="(line595)"></a>        <font color=Red>|</font> n <font color=Cyan>==</font> n0   <font color=Red>=</font> Just <font color=Cyan>(</font>attr2str v<font color=Cyan>)</font>+<a name="(line596)"></a>        <font color=Red>|</font> otherwise <font color=Red>=</font> Nothing+<a name="(line597)"></a>+<a name="(line598)"></a><a name="toAttrFrStr"></a>toAttrFrStr   <font color=Red>::</font> String <font color=Red>-&gt;</font> String <font color=Red>-&gt;</font> Maybe Attribute+<a name="(line599)"></a>toAttrFrStr n v <font color=Red>=</font> Just <font color=Cyan>(</font>n<font color=Cyan>,</font> str2attr v<font color=Cyan>)</font>+<a name="(line600)"></a>+<a name="(line601)"></a><a name="str2attr"></a>str2attr <font color=Red>::</font> String <font color=Red>-&gt;</font> AttValue+<a name="(line602)"></a>str2attr s <font color=Red>=</font>+<a name="(line603)"></a>    <font color=Green><u>let</u></font> f t <font color=Red>=</font>+<a name="(line604)"></a>          <font color=Green><u>let</u></font> <font color=Cyan>(</font>l<font color=Cyan>,</font>r<font color=Cyan>)</font> <font color=Red>=</font> span <font color=Cyan>(</font><font color=Red>\</font>c<font color=Red>-&gt;</font> not <font color=Cyan>(</font>elem c <font color=Magenta>"\"&amp;&lt;&gt;'"</font><font color=Cyan>)</font><font color=Cyan>)</font> t+<a name="(line605)"></a>          <font color=Green><u>in</u></font> <font color=Green><u>if</u></font> null r <font color=Green><u>then</u></font> <font color=Red>[</font>Left l<font color=Red>]</font>+<a name="(line606)"></a>             <font color=Green><u>else</u></font> Left l<font color=Red><b>:</b></font> Right <font color=Cyan>(</font>g <font color=Cyan>(</font>head r<font color=Cyan>)</font><font color=Cyan>)</font><font color=Red><b>:</b></font> f <font color=Cyan>(</font>tail r<font color=Cyan>)</font>+<a name="(line607)"></a>        g <font color=Magenta>'"'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"quot"</font>+<a name="(line608)"></a>        g <font color=Magenta>'&amp;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"amp"</font>+<a name="(line609)"></a>        g <font color=Magenta>'&lt;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"lt"</font>+<a name="(line610)"></a>        g <font color=Magenta>'&gt;'</font>  <font color=Red>=</font> RefEntity <font color=Magenta>"gt"</font>+<a name="(line611)"></a>        g <font color=Magenta>'\''</font> <font color=Red>=</font> RefEntity <font color=Magenta>"apos"</font>+<a name="(line612)"></a>    <font color=Green><u>in</u></font> AttValue <font color=Cyan>(</font>f s<font color=Cyan>)</font>+<a name="(line613)"></a>+<a name="(line614)"></a><a name="attr2str"></a>attr2str <font color=Red>::</font> AttValue <font color=Red>-&gt;</font> String          <font color=Blue>-- really needs symbol table</font>+<a name="(line615)"></a>attr2str <font color=Cyan>(</font>AttValue xs<font color=Cyan>)</font> <font color=Red>=</font>+<a name="(line616)"></a>    <font color=Green><u>let</u></font> f <font color=Cyan>(</font>Left s<font color=Cyan>)</font> <font color=Red>=</font> s+<a name="(line617)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefChar i<font color=Cyan>)</font><font color=Cyan>)</font>        <font color=Red>=</font> <font color=Red>[</font>chr i<font color=Red>]</font>+<a name="(line618)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"quot"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"\""</font>+<a name="(line619)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"amp"</font><font color=Cyan>)</font><font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"&amp;"</font>+<a name="(line620)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"lt"</font><font color=Cyan>)</font><font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&lt;"</font>+<a name="(line621)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"gt"</font><font color=Cyan>)</font><font color=Cyan>)</font>   <font color=Red>=</font> <font color=Magenta>"&gt;"</font>+<a name="(line622)"></a>        f <font color=Cyan>(</font>Right <font color=Cyan>(</font>RefEntity <font color=Magenta>"apos"</font><font color=Cyan>)</font><font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"'"</font>+<a name="(line623)"></a>        f <font color=Cyan>(</font>Right <font color=Green><u>_</u></font><font color=Cyan>)</font>                  <font color=Red>=</font> <font color=Magenta>"*"</font>  <font color=Blue>-- Ooops, ST needed here.</font>+<a name="(line624)"></a>    <font color=Green><u>in</u></font> concatMap f xs+<a name="(line625)"></a>+<a name="(line626)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line627)"></a><font color=Blue>--  New content-model types</font>+<a name="(line628)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line629)"></a>+<a name="(line630)"></a><font color=Blue>{-+<a name="(line631)"></a>data OneOf2 a b+<a name="(line632)"></a>data OneOf3 a b c+<a name="(line633)"></a>data OneOf4 a b c d+<a name="(line634)"></a>    ... etc are now defined (with instances) in module OneOfN.+<a name="(line635)"></a>-}</font>+<a name="(line636)"></a>+<a name="(line637)"></a><a name="ANYContent"></a><font color=Blue>-- | A type corresponding to XML's ANY contentspec.</font>+<a name="(line638)"></a><a name="ANYContent"></a><font color=Blue>--   It is either a list of unconverted xml 'Content'</font>+<a name="(line639)"></a><a name="ANYContent"></a><font color=Blue>--   or some 'XmlContent'-able value.</font>+<a name="(line640)"></a><a name="ANYContent"></a><font color=Blue>--</font>+<a name="(line641)"></a><a name="ANYContent"></a><font color=Blue>-- Parsing functions (e.g. 'parseContents') will always produce 'UnConverted'.</font>+<a name="(line642)"></a><a name="ANYContent"></a><font color=Blue>-- Note: The Show instance for 'UnConverted' uses 'verbatim'.</font>+<a name="(line643)"></a><a name="ANYContent"></a><font color=Green><u>data</u></font> ANYContent <font color=Red>=</font> <font color=Green><u>forall</u></font> a <font color=Cyan>.</font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>,</font> Show a<font color=Cyan>)</font> <font color=Red>=&gt;</font> ANYContent a+<a name="(line644)"></a>                <font color=Red>|</font> UnConverted <font color=Red>[</font>Content Posn<font color=Red>]</font>+<a name="(line645)"></a>+<a name="(line646)"></a><font color=Green><u>instance</u></font> Show ANYContent <font color=Green><u>where</u></font>+<a name="(line647)"></a>    show <font color=Cyan>(</font>UnConverted c<font color=Cyan>)</font> <font color=Red>=</font> <font color=Magenta>"UnConverted "</font> <font color=Cyan>++</font> <font color=Cyan>(</font>show <font color=Cyan>$</font> map verbatim c<font color=Cyan>)</font>+<a name="(line648)"></a>    show <font color=Cyan>(</font>ANYContent a<font color=Cyan>)</font>  <font color=Red>=</font> <font color=Magenta>"ANYContent "</font> <font color=Cyan>++</font> <font color=Cyan>(</font>show a<font color=Cyan>)</font>+<a name="(line649)"></a>+<a name="(line650)"></a><font color=Green><u>instance</u></font> Eq ANYContent <font color=Green><u>where</u></font>+<a name="(line651)"></a>    a <font color=Cyan>==</font> b <font color=Red>=</font> show a <font color=Cyan>==</font> show b+<a name="(line652)"></a>+<a name="(line653)"></a><a name="List1"></a><font color=Blue>-- | The List1 type represents lists with at least one element.</font>+<a name="(line654)"></a><a name="List1"></a><font color=Blue>--   It is required for DTD content models that use + as a modifier.</font>+<a name="(line655)"></a><a name="List1"></a><font color=Green><u>data</u></font> List1 a <font color=Red>=</font> NonEmpty <font color=Red>[</font>a<font color=Red>]</font>  <font color=Green><u>deriving</u></font> <font color=Cyan>(</font>Eq<font color=Cyan>,</font> Show<font color=Cyan>)</font>+<a name="(line656)"></a>+<a name="(line657)"></a>+<a name="(line658)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line659)"></a><font color=Blue>--  Instances for new content-model types</font>+<a name="(line660)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line661)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>HTypeable a<font color=Cyan>)</font> <font color=Red>=&gt;</font> HTypeable <font color=Cyan>(</font>List1 a<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line662)"></a>    toHType m  <font color=Red>=</font> Defined <font color=Magenta>"List1"</font> <font color=Red>[</font>hx<font color=Red>]</font>+<a name="(line663)"></a>                         <font color=Red>[</font>Constr <font color=Magenta>"NonEmpty"</font> <font color=Red>[</font>hx<font color=Red>]</font> <font color=Red>[</font>List hx<font color=Red>]</font> <font color=Blue>{-Nothing-}</font><font color=Red>]</font>+<a name="(line664)"></a>               <font color=Green><u>where</u></font> <font color=Cyan>(</font>NonEmpty x<font color=Cyan>)</font> <font color=Red>=</font> m+<a name="(line665)"></a>                     hx <font color=Red>=</font> toHType x+<a name="(line666)"></a><font color=Green><u>instance</u></font> <font color=Cyan>(</font>XmlContent a<font color=Cyan>)</font> <font color=Red>=&gt;</font> XmlContent <font color=Cyan>(</font>List1 a<font color=Cyan>)</font> <font color=Green><u>where</u></font>+<a name="(line667)"></a>    toContents <font color=Cyan>(</font>NonEmpty xs<font color=Cyan>)</font> <font color=Red>=</font> concatMap toContents xs+<a name="(line668)"></a>    parseContents <font color=Red>=</font> fmap NonEmpty <font color=Cyan>$</font> many1 parseContents+<a name="(line669)"></a>+<a name="(line670)"></a><font color=Green><u>instance</u></font> HTypeable ANYContent <font color=Green><u>where</u></font>+<a name="(line671)"></a>    toHType <font color=Green><u>_</u></font>      <font color=Red>=</font> Prim <font color=Magenta>"ANYContent"</font> <font color=Magenta>"ANY"</font>+<a name="(line672)"></a><font color=Green><u>instance</u></font> XmlContent ANYContent <font color=Green><u>where</u></font>+<a name="(line673)"></a>    toContents <font color=Cyan>(</font>ANYContent a<font color=Cyan>)</font>  <font color=Red>=</font> toContents a+<a name="(line674)"></a>    toContents <font color=Cyan>(</font>UnConverted s<font color=Cyan>)</font> <font color=Red>=</font> map <font color=Cyan>(</font>fmap <font color=Cyan>(</font>const ()<font color=Cyan>)</font><font color=Cyan>)</font> s+<a name="(line675)"></a>    parseContents <font color=Red>=</font> P <font color=Cyan>(</font><font color=Red>\</font>cs <font color=Red>-&gt;</font> <font color=Cyan>(</font>Right <font color=Cyan>(</font>UnConverted cs<font color=Cyan>)</font><font color=Cyan>,</font> []<font color=Cyan>)</font><font color=Cyan>)</font>+<a name="(line676)"></a>+<a name="(line677)"></a><font color=Blue>------------------------------------------------------------------------</font>+<a name="(line678)"></a><font color=Blue>--</font>+<a name="(line679)"></a><font color=Blue>------------------------------------------------------------------------</font> </pre> </html>
docs/changelog.html view
@@ -20,7 +20,9 @@      in the XtractLazy tool. <li> Version 1.19.2 updates the Cabal file to enable HaXml to build with both      ghc-6.6.x and ghc-6.8.x.-+<li> Version 1.19.3 fixes an incompatibility with some versions of the+     Bytestring package.  Also has a bugfix in the DTD validator, and+     adds some new utility functions in Text.XML.HaXml.Util. </ul>  <h3>Changes in 1.18</h3>
docs/index.html view
@@ -132,10 +132,11 @@ <center><h3><a name="download">Downloads</a></h3></center> <p> <b>Development versions:</b><br>-HaXml-1.19.2, release date 2008.01.14<br>+HaXml-1.19.3, release date 2008.06.17<br>+From <a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/HaXml">Hackage</a><br> By HTTP:-<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.2.tar.gz">.tar.gz</a>,-<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.2.zip">.zip</a>.+<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.3.tar.gz">.tar.gz</a>,+<a href="http://www.cs.york.ac.uk/fp/HaXml-devel/HaXml-1.19.3.zip">.zip</a>. <br> By FTP:  <a href="ftp://ftp.cs.york.ac.uk/pub/haskell/HaXml/">@@ -202,6 +203,8 @@ <center><h3><a name="news">Recent news</a></h3></center>  <p>+Version 1.19.3 has some minor bugfixes to increase compatibility with the+ByteString package.<br> Version 1.19.2 updates the Cabal file to enable HaXml to build with both ghc-6.6.x and ghc-6.8.x.<br> Version 1.19.1 fixes a build error in 1.19.<br>
src/Makefile view
@@ -1,5 +1,5 @@ SOFTWARE = HaXml-VERSION = 1.19.2+VERSION = 1.19.3  LIBSRCS = \ 	Text/XML/HaXml.hs Text/XML/HaXml/Combinators.hs Text/XML/HaXml/Lex.hs \
src/Text/XML/HaXml/ByteStringPP.hs view
@@ -22,51 +22,55 @@  import Prelude hiding (maybe,either,elem,concat) import Maybe hiding (maybe)-import Data.List (intersperse) +import Data.List (intersperse) --import Data.ByteString.Lazy hiding (pack,map,head,any,singleton,intersperse,join)-import Data.ByteString.Lazy.Char8 (ByteString(), concat, pack, singleton, join+import Data.ByteString.Lazy.Char8 (ByteString(), concat, pack, singleton, intercalate                                   , append, elem, empty) import Text.XML.HaXml.Types -either f g (Left x)  = f x-either f g (Right x) = g x+either :: (t -> t1) -> (t2 -> t1) -> Either t t2 -> t1+either f _ (Left x)  = f x+either _ g (Right x) = g x -maybe f Nothing  = empty+maybe :: (t -> ByteString) -> Maybe t -> ByteString+maybe _ Nothing  = empty maybe f (Just x) = f x   -- A simple implementation of the pretty-printing combinator interface, -- but for plain ByteStrings:-infixl 6 <> +infixl 6 <> infixl 6 <+>-infixl 5 $$, $+$+infixl 5 $$ (<>)   :: ByteString   -> ByteString -> ByteString -- Beside-hcat   :: [ByteString] -> ByteString		   -- List version of <>+hcat   :: [ByteString] -> ByteString                 -- List version of <> (<+>)  :: ByteString   -> ByteString -> ByteString -- Beside, separated by space-hsep   :: [ByteString] -> ByteString		   -- List version of <+>+hsep   :: [ByteString] -> ByteString                 -- List version of <+> ($$)   :: ByteString   -> ByteString -> ByteString -- Above; if there is no                                                    -- overlap, it "dovetails" vcat   :: [ByteString] -> ByteString       -- List version of $$-cat    :: [ByteString] -> ByteString       -- Either hcat or vcat+-- cat    :: [ByteString] -> ByteString       -- Either hcat or vcat sep    :: [ByteString] -> ByteString       -- Either hsep or vcat-fcat   :: [ByteString] -> ByteString       -- ``Paragraph fill'' version of cat+-- fcat   :: [ByteString] -> ByteString       -- ``Paragraph fill'' version of cat fsep   :: [ByteString] -> ByteString       -- ``Paragraph fill'' version of sep nest   :: Int -> ByteString -> ByteString  -- Nested  (<>)  b1 b2  = b1 `append` b2 (<+>) b1 b2  = b1 <> pack " " <> b2 ($$)  b1 b2  = b1 <> pack "\n" <> b2-($+$)        = ($$)+-- ($+$)        = ($$) -hcat = Data.ByteString.Lazy.Char8.concat -hsep = Data.ByteString.Lazy.Char8.join (singleton ' ')-vcat = Data.ByteString.Lazy.Char8.join (singleton '\n')-cat  = hcat+hcat = Data.ByteString.Lazy.Char8.concat+hsep = Data.ByteString.Lazy.Char8.intercalate (singleton ' ')+vcat = Data.ByteString.Lazy.Char8.intercalate (singleton '\n')+_  = hcat sep  = hsep+text :: [Char] -> ByteString text = pack-fcat = cat+-- _ = cat fsep = sep nest _ b = pack " " <> b+parens :: ByteString -> ByteString parens p = pack "(" <> p <> pack ")"  @@ -82,8 +86,8 @@  doctypedecl   :: DocTypeDecl   -> ByteString markupdecl    :: MarkupDecl    -> ByteString-extsubset     :: ExtSubset     -> ByteString-extsubsetdecl :: ExtSubsetDecl -> ByteString+-- extsubset     :: ExtSubset     -> ByteString+-- extsubsetdecl :: ExtSubsetDecl -> ByteString cp            :: CP            -> ByteString  element   :: Element i -> ByteString@@ -105,7 +109,7 @@ misc (PI (n,s))            = text "<?" <> text n <+> text s <+> text "?>" sddecl sd   | sd           = text "standalone='yes'"             | otherwise    = text "standalone='no'"-doctypedecl (DTD n eid ds) = if Prelude.null ds then +doctypedecl (DTD n eid ds) = if Prelude.null ds then                                   hd <> text ">"                              else hd <+> text " [" $$                                   vcat (Prelude.map markupdecl ds) $$ text "]>"@@ -117,10 +121,10 @@ markupdecl (Notation n)    = notationdecl n markupdecl (MarkupMisc m)  = misc m --markupdecl (MarkupPE p m)  = peref p-extsubset (ExtSubset t ds) = maybe textdecl t $$-                             vcat (Prelude.map extsubsetdecl ds)-extsubsetdecl (ExtMarkupDecl m)      = markupdecl m-extsubsetdecl (ExtConditionalSect c) = conditionalsect c+-- _ (ExtSubset t ds) = maybe textdecl t $$+--                             vcat (Prelude.map extsubsetdecl ds)+-- _ (ExtMarkupDecl m)      = markupdecl m+-- extsubsetdecl (ExtConditionalSect c) = conditionalsect c --extsubsetdecl (ExtPEReference p e)   = peref p  element (Elem n as []) = text "<" <> text n <+>@@ -135,15 +139,17 @@     | otherwise        = let (d,c) = carryelem e empty                          in d <> c +isText :: Content t -> Bool isText (CString _ _ _) = True isText (CRef _ _)      = True isText _               = False +carryelem :: Element t -> ByteString -> (ByteString, ByteString) carryelem (Elem n as []) c                        = ( c <>                            text "<" <> text n <+> fsep (Prelude.map attribute as)                          , text "/>")-carryelem e@(Elem n as cs) c+carryelem (Elem n as cs) c --  | any isText cs    =  ( c <> element e, empty)     | otherwise        =  let (cs0,d0) = carryscan carrycontent cs (text ">")                           in@@ -152,6 +158,7 @@                             nest 2 (vcat cs0) <> --- $$                             d0 <> text "</" <> text n                           , text ">")+carrycontent :: Content t -> ByteString -> (ByteString, ByteString) carrycontent (CElem e _) c   = carryelem e c carrycontent (CString False s _) c = (c <> chardata s, empty) carrycontent (CString True  s _) c = (c <> cdsect s, empty)@@ -159,7 +166,7 @@ carrycontent (CMisc m _) c   = (c <> misc m, empty)  carryscan :: (a->c->(b,c)) -> [a] -> c -> ([b],c)-carryscan f []     c = ([],c)+carryscan _ []     c = ([],c) carryscan f (a:as) c = let (b, c0) = f a c                            (bs,c1) = carryscan f as c0                        in (b:bs, c1)@@ -189,8 +196,10 @@ content (CRef r _)          = reference r content (CMisc m _)         = misc m +elementdecl :: ElementDecl -> ByteString elementdecl (ElementDecl n cs) = text "<!ELEMENT" <+> text n <+>                                  contentspec cs <> text ">"+contentspec :: ContentSpec -> ByteString contentspec EMPTY              = text "EMPTY" contentspec ANY                = text "ANY" contentspec (Mixed m)          = mixed m@@ -202,21 +211,27 @@ cp (Seq cs m)          = parens (hcat (intersperse (text ",") (Prelude.map cp cs))) <>                            modifier m --cp (CPPE p c)          = peref p+modifier :: Modifier -> ByteString modifier None          = empty modifier Query         = text "?" modifier Star          = text "*" modifier Plus          = text "+"+mixed :: Mixed -> ByteString mixed  PCDATA          = text "(#PCDATA)" mixed (PCDATAplus ns)  = text "(#PCDATA |" <+>                          hcat (intersperse (text "|") (Prelude.map text ns)) <>                          text ")*" +attlistdecl :: AttListDecl -> ByteString attlistdecl (AttListDecl n ds) = text "<!ATTLIST" <+> text n <+>                                  fsep (Prelude.map attdef ds) <> text ">"+attdef :: AttDef -> ByteString attdef (AttDef n t d)          = text n <+> atttype t <+> defaultdecl d+atttype :: AttType -> ByteString atttype  StringType            = text "CDATA" atttype (TokenizedType t)      = tokenizedtype t atttype (EnumeratedType t)     = enumeratedtype t+tokenizedtype :: TokenizedType -> ByteString tokenizedtype ID               = text "ID" tokenizedtype IDREF            = text "IDREF" tokenizedtype IDREFS           = text "IDREFS"@@ -224,75 +239,102 @@ tokenizedtype ENTITIES         = text "ENTITIES" tokenizedtype NMTOKEN          = text "NMTOKEN" tokenizedtype NMTOKENS         = text "NMTOKENS"+enumeratedtype :: EnumeratedType -> ByteString enumeratedtype (NotationType n)= notationtype n enumeratedtype (Enumeration e) = enumeration e+notationtype :: [[Char]] -> ByteString notationtype ns                = text "NOTATION" <+>                                  parens (hcat (intersperse (text "|") (Prelude.map text ns)))+enumeration :: [[Char]] -> ByteString enumeration ns                 = parens (hcat (intersperse (text "|") (Prelude.map nmtoken ns)))+defaultdecl :: DefaultDecl -> ByteString defaultdecl  REQUIRED          = text "#REQUIRED" defaultdecl  IMPLIED           = text "#IMPLIED" defaultdecl (DefaultTo a f)    = maybe (const (text "#FIXED")) f <+> attvalue a-conditionalsect (IncludeSect i)= text "<![INCLUDE [" <+>-                                 vcat (Prelude.map extsubsetdecl i) <+> text "]]>"-conditionalsect (IgnoreSect i) = text "<![IGNORE [" <+>-                                 fsep (Prelude.map ignoresectcontents i) <+> text "]]>"-ignore (Ignore)                = empty-ignoresectcontents (IgnoreSectContents i is)-                               = ignore i <+> vcat (Prelude.map internal is)-                          where internal (ics,i) = text "<![[" <+>-                                                   ignoresectcontents ics <+>-                                                   text "]]>" <+> ignore i+--_ (IncludeSect i)= text "<![INCLUDE [" <+>+--                                 vcat (Prelude.map extsubsetdecl i) <+> text "]]>"+-- conditionalsect (IgnoreSect i) = text "<![IGNORE [" <+>+--                                  fsep (Prelude.map ignoresectcontents i) <+> text "]]>"+-- -- _ (Ignore)                = empty+-- ignoresectcontents :: IgnoreSectContents -> ByteString+-- _ (IgnoreSectContents i is)+--                                = ignore i <+> vcat (Prelude.map internal is)+--                           where internal (ics,i) = text "<![[" <+>+--                                                    ignoresectcontents ics <+>+--                                                    text "]]>" <+> ignore i+reference :: Reference -> ByteString reference (RefEntity er)       = entityref er reference (RefChar cr)         = charref cr+entityref :: [Char] -> ByteString entityref n                    = text "&" <> text n <> text ";"+charref :: (Show a) => a -> ByteString charref c                      = text "&#" <> text (show c) <> text ";"+entitydecl :: EntityDecl -> ByteString entitydecl (EntityGEDecl d)    = gedecl d entitydecl (EntityPEDecl d)    = pedecl d+gedecl :: GEDecl -> ByteString gedecl (GEDecl n ed)           = text "<!ENTITY" <+> text n <+> entitydef ed <>                                  text ">"+pedecl :: PEDecl -> ByteString pedecl (PEDecl n pd)           = text "<!ENTITY %" <> text n <+> pedef pd <>                                  text ">"-entitydef (DefEntityValue ev)  = entityvalue ev+entitydef :: EntityDef -> ByteString+entitydef (DefEntityValue ew)  = entityvalue ew entitydef (DefExternalID i nd) = externalid i <+> maybe ndatadecl nd-pedef (PEDefEntityValue ev)    = entityvalue ev+pedef :: PEDef -> ByteString+pedef (PEDefEntityValue ew)    = entityvalue ew pedef (PEDefExternalID eid)    = externalid eid+externalid :: ExternalID -> ByteString externalid (SYSTEM sl)         = text "SYSTEM" <+> systemliteral sl externalid (PUBLIC i sl)       = text "PUBLIC" <+> pubidliteral i <+>                                  systemliteral sl+ndatadecl :: NDataDecl -> ByteString ndatadecl (NDATA n)            = text "NDATA" <+> text n-textdecl (TextDecl vi ed)      = text "<?xml" <+> maybe text vi <+>-                                 encodingdecl ed <> text "?>"-extparsedent (ExtParsedEnt t c)= maybe textdecl t <+> content c-extpe (ExtPE t esd)            = maybe textdecl t <+>-                                 vcat (Prelude.map extsubsetdecl esd)+-- _ (TextDecl vi ed)      = text "<?xml" <+> maybe text vi <+>+--                                  encodingdecl ed <> text "?>"+-- extparsedent :: ExtParsedEnt t -> ByteString+-- _ (ExtParsedEnt t c)= maybe textdecl t <+> content c+-- _ (ExtPE t esd)            = maybe textdecl t <+>+--                                  vcat (Prelude.map extsubsetdecl esd)+notationdecl :: NotationDecl -> ByteString notationdecl (NOTATION n e)    = text "<!NOTATION" <+> text n <+>                                  either externalid publicid e <>                                  text ">"+publicid :: PublicID -> ByteString publicid (PUBLICID p)          = text "PUBLICID" <+> pubidliteral p+encodingdecl :: EncodingDecl -> ByteString encodingdecl (EncodingDecl s)  = text "encoding='" <> text s <> text "'"+nmtoken :: [Char] -> ByteString nmtoken s                      = text s+attvalue :: AttValue -> ByteString attvalue (AttValue esr)        = text "\"" <>                                  hcat (Prelude.map (either text reference) esr) <>                                  text "\""+entityvalue :: EntityValue -> ByteString entityvalue (EntityValue evs)   | containsDoubleQuote evs    = text "'"  <> hcat (Prelude.map ev evs) <> text "'"   | otherwise                  = text "\"" <> hcat (Prelude.map ev evs) <> text "\""+ev :: EV -> ByteString ev (EVString s)                = text s --ev (EVPERef p e)               = peref p ev (EVRef r)                   = reference r+pubidliteral :: PubidLiteral -> ByteString pubidliteral (PubidLiteral s)     | toWord8 '"' `elem` (pack s) = text "'" <> text s <> text "'"     | otherwise                = text "\"" <> text s <> text "\""+systemliteral :: SystemLiteral -> ByteString systemliteral (SystemLiteral s)     | toWord8 '"' `elem` (pack s) = text "'" <> text s <> text "'"     | otherwise                = text "\"" <> text s <> text "\""+chardata, cdsect :: [Char] -> ByteString chardata s                     = {-if all isSpace s then empty else-} text s cdsect c                       = text "<![CDATA[" <> chardata c <> text "]]>" ---toWord8 :: Char -> Word8+-- toWord8 :: Char -> Word8+toWord8 :: (Enum a, Enum a1) => a1 -> a toWord8 = toEnum . fromEnum -----+containsDoubleQuote :: [EV] -> Bool containsDoubleQuote evs = any csq evs     where csq (EVString s) = toWord8 '"' `elem` (pack s)           csq _            = False
src/Text/XML/HaXml/DtdToHaskell/Convert.hs view
@@ -13,7 +13,7 @@  ---- Internal representation for database of DTD decls ---- data Record = R [AttDef] ContentSpec-type Db = [(String,Record)]+-- type Db = [(String,Record)]   ---- Build a database of DTD decls then convert them to typedefs ----@@ -21,7 +21,7 @@ ---- Apparently multiple ATTLIST decls for the same element are permitted, ---- although only one ELEMENT decl for it is allowed. dtd2TypeDef :: [MarkupDecl] -> [TypeDef]-dtd2TypeDef mds = +dtd2TypeDef mds =   (concatMap convert . reverse . database []) mds   where   database db [] = db@@ -38,7 +38,7 @@     --  (MarkupPE _ m') -> database db (m':ms)         _ -> database db ms -  replace n v [] = error "dtd2TypeDef.replace: no element to replace"+  replace _ _ [] = error "dtd2TypeDef.replace: no element to replace"   replace n v (x@(n0,_):db)       | n==n0     = (n,v): db       | otherwise = x: replace n v db@@ -86,8 +86,8 @@ mkData [ts] fs aux n  = [DataDef aux n fs [(n, ts)]] mkData tss  fs aux n  = [DataDef aux n fs (map (mkConstr n) tss)]   where-    mkConstr n ts = (mkConsName n ts, ts)-    mkConsName (Name x n) sts = Name x (n++concat (intersperse "_" (map flatten sts)))+    mkConstr m ts = (mkConsName m ts, ts)+    mkConsName (Name x m) sts = Name x (m++concat (intersperse "_" (map flatten sts)))     flatten (Maybe st)   = {-"Maybe_" ++ -} flatten st     flatten (List st)    = {-"List_" ++ -} flatten st     flatten (List1 st)   = {-"List1_" ++ -} flatten st@@ -97,15 +97,16 @@     flatten (OneOf sts)  = {-"OneOf" ++ show (length sts) ++ "_" ++ -}                             concat (intersperse "_" (map flatten sts))     flatten Any          = "Any"-    flatten (Defined (Name _ n))  = n+    flatten (Defined (Name _ m))  = m -mkAttrDef e (AttDef n StringType def) =+mkAttrDef :: String -> AttDef -> [TypeDef]+mkAttrDef _ (AttDef _ StringType _) =     []-mkAttrDef e (AttDef n (TokenizedType t) def) =+mkAttrDef _ (AttDef _ (TokenizedType _) _) =     [] -- mkData [[String]] [] False (name n)-mkAttrDef e (AttDef n (EnumeratedType (NotationType nt)) def) =+mkAttrDef e (AttDef n (EnumeratedType (NotationType nt)) _) =     [EnumDef (name_a e n) (map (name_ac e n) nt)]-mkAttrDef e (AttDef n (EnumeratedType (Enumeration es)) def) =+mkAttrDef e (AttDef n (EnumeratedType (Enumeration es)) _) =     [EnumDef (name_a e n) (map (name_ac e n) es)]         -- Default attribute values not handled here @@ -114,13 +115,13 @@   where     mkType StringType REQUIRED = String     mkType StringType IMPLIED  = Maybe String-    mkType StringType (DefaultTo v@(AttValue _) f) = Defaultable String (show v)+    mkType StringType (DefaultTo v@(AttValue _) _) = Defaultable String (show v)     mkType (TokenizedType _) REQUIRED  = String     mkType (TokenizedType _) IMPLIED   = Maybe String-    mkType (TokenizedType _) (DefaultTo v@(AttValue _) f) =-							Defaultable String (show v)+    mkType (TokenizedType _) (DefaultTo v@(AttValue _) _) =+                                                        Defaultable String (show v)     mkType (EnumeratedType _) REQUIRED = Defined (name_a e n)     mkType (EnumeratedType _) IMPLIED  = Maybe (Defined (name_a e n))-    mkType (EnumeratedType _) (DefaultTo v@(AttValue _) f) =-		Defaultable (Defined (name_a e n)) (hName (name_ac e n (show v)))+    mkType (EnumeratedType _) (DefaultTo v@(AttValue _) _) =+                Defaultable (Defined (name_a e n)) (hName (name_ac e n (show v))) 
src/Text/XML/HaXml/DtdToHaskell/Instance.hs view
@@ -12,8 +12,8 @@ mkInstance :: TypeDef -> Doc  -- no constructors - represents an element with empty content but attributes.-mkInstance (DataDef aux n fs []) =-    let (frpat, frattr, topat, toattr) = attrpats fs+mkInstance (DataDef _ n fs []) =+    let (_, frattr, topat, toattr) = attrpats fs         frretval = if null fs then ppHName n else frattr         topatval = if null fs then ppHName n else topat     in@@ -81,9 +81,9 @@  -- multiple constructors (real) mkInstance (DataDef False n fs cs) =-    let vs = nameSupply cs+    let _ = nameSupply cs         (frpat, frattr, topat, toattr) = attrpats fs-        mixattrs = if null fs then False else True+        _ = if null fs then False else True     in     text "instance HTypeable" <+> ppHName n <+> text "where" $$     nest 4 ( text "toHType x = Defined \"" <> ppXName n <> text "\" [] []" )@@ -108,8 +108,8 @@  -- multiple constructors (auxiliary) mkInstance (DataDef True n fs cs) =-    let vs = nameSupply cs-        (frpat, frattr, topat, toattr) = attrpats fs+    let _ = nameSupply cs+        (_, frattr, _, _) = attrpats fs         mixattrs = if null fs then False else True     in     text "instance HTypeable" <+> ppHName n <+> text "where" $$@@ -143,7 +143,7 @@ data SameName = Same | Extended  mkInstanceAttrs        :: SameName -> Name -> AttrFields -> Doc-mkInstanceAttrs s n []  = empty+mkInstanceAttrs _ _ []  = empty mkInstanceAttrs s n fs  =     let ppName = case s of { Same-> ppHName;  Extended-> ppAName; }     in@@ -170,46 +170,46 @@   -mkFrElem :: Name -> [StructType] -> [Doc] -> Doc -> Doc-mkFrElem n sts vs inner =-    foldr (frElem n) inner (zip3 sts vs cvs)-  where-    cvs = let ns = nameSupply2 vs-          in zip ns (text "c0": init ns)-    frElem n (st,v,(cvi,cvo)) inner =-        parens (text "\\" <> parens (v<>comma<>cvi) <> text "->" $$-                nest 2 inner) $$-        parens (-          case st of-            (Maybe String)  -> text "fromText" <+> cvo-            (Maybe s)       -> text "fromElem" <+> cvo-            (List String)   -> text "many fromText" <+> cvo-            (List s)        -> text "many fromElem" <+> cvo-            (List1 s)       -> text "definite fromElem"-                               <+> text "\"" <> text (show s)<> text "+\""-                               <+> text "\"" <> ppXName n <> text "\""-                               <+> cvo-            (Tuple ss)  -> text "definite fromElem"-                           <+> text "\"(" <> hcat (intersperse (text ",")-                                                           (map (text.show) ss))-                                          <> text ")\""-                           <+> text "\"" <> ppXName n <> text "\""-                           <+> cvo-            (OneOf ss)  -> text "definite fromElem"-                           <+> text "\"OneOf\""-                           <+> text "\"" <> ppXName n <> text "\""-                           <+> cvo-            (String)    -> text "definite fromText" <+> text "\"text\" \"" <>-                                                 ppXName n <> text "\"" <+> cvo-            (Any)       -> text "definite fromElem" <+> text "\"ANY\" \"" <>-                                                 ppXName n <> text "\"" <+> cvo-            (Defined m) -> text "definite fromElem" <+>-				 text "\"<" <> ppXName m <> text ">\" \"" <>-                                                 ppXName n <> text "\"" <+> cvo-            (Defaultable _ _)  -> text "nyi_fromElem_Defaultable" <+> cvo-          )+-- mkFrElem :: Name -> [StructType] -> [Doc] -> Doc -> Doc+-- mkFrElem n sts vs inner =+--     foldr (frElem n) inner (zip3 sts vs cvs)+--   where+--     cvs = let ns = nameSupply2 vs+--           in zip ns (text "c0": init ns)+--     frElem _ (st,v,(cvi,cvo)) inner =+--         parens (text "\\" <> parens (v<>comma<>cvi) <> text "->" $$+--                 nest 2 inner) $$+--         parens (+--           case st of+--             (Maybe String)  -> text "fromText" <+> cvo+--             (Maybe _)       -> text "fromElem" <+> cvo+--             (List String)   -> text "many fromText" <+> cvo+--             (List _)        -> text "many fromElem" <+> cvo+--             (List1 s)       -> text "definite fromElem"+--                                <+> text "\"" <> text (show s)<> text "+\""+--                                <+> text "\"" <> ppXName n <> text "\""+--                                <+> cvo+--             (Tuple ss)  -> text "definite fromElem"+--                            <+> text "\"(" <> hcat (intersperse (text ",")+--                                                            (map (text.show) ss))+--                                           <> text ")\""+--                            <+> text "\"" <> ppXName n <> text "\""+--                            <+> cvo+--             (OneOf _)  -> text "definite fromElem"+--                            <+> text "\"OneOf\""+--                            <+> text "\"" <> ppXName n <> text "\""+--                            <+> cvo+--             (String)    -> text "definite fromText" <+> text "\"text\" \"" <>+--                                                  ppXName n <> text "\"" <+> cvo+--             (Any)       -> text "definite fromElem" <+> text "\"ANY\" \"" <>+--                                                  ppXName n <> text "\"" <+> cvo+--             (Defined m) -> text "definite fromElem" <+>+--                                  text "\"<" <> ppXName m <> text ">\" \"" <>+--                                                  ppXName m <> text "\"" <+> cvo+--             (Defaultable _ _)  -> text "nyi_fromElem_Defaultable" <+> cvo+--           ) --- +-- {- mkParseContents :: Name -> [StructType] -> [Doc] -> Doc -> Doc mkParseContents n sts vs inner =@@ -223,24 +223,25 @@         parens (           ) -}-+mkParseConstr :: Doc -> (Name, [StructType]) -> Doc mkParseConstr frattr (c,sts) =         fsep (text "return" <+> parens (ppHName c <+> frattr)              : map mkParseContents sts) +mkParseContents :: StructType -> Doc mkParseContents st =   let ap = text "`apply`" in           case st of             (Maybe String)  -> ap <+> text "optional text"-            (Maybe s)       -> ap <+> text "optional parseContents"+            (Maybe _)       -> ap <+> text "optional parseContents"             (List String)   -> ap <+> text "many text"-            (List s)        -> ap <+> text "many parseContents"-            (List1 s)       -> ap <+> text "parseContents"-            (Tuple ss)      -> ap <+> text "parseContents"-            (OneOf ss)      -> ap <+> text "parseContents"+            (List _)        -> ap <+> text "many parseContents"+            (List1 _)       -> ap <+> text "parseContents"+            (Tuple _)      -> ap <+> text "parseContents"+            (OneOf _)      -> ap <+> text "parseContents"             (String)        -> ap <+> text "(text `onFail` return \"\")"             (Any)           -> ap <+> text "parseContents"-            (Defined m)     -> ap <+> text "parseContents"+            (Defined _)     -> ap <+> text "parseContents"             (Defaultable _ _)  -> ap <+> text "nyi_fromElem_Defaultable"  --@@ -252,27 +253,27 @@     toElem st v =       case st of         (Maybe String)  -> text "maybe [] toText" <+> v-        (Maybe s)       -> text "maybe [] toContents" <+> v+        (Maybe _)       -> text "maybe [] toContents" <+> v         (List String)   -> text "concatMap toText" <+> v-        (List s)        -> text "concatMap toContents" <+> v-        (List1 s)       -> text "toContents" <+> v-        (Tuple ss)      -> text "toContents" <+> v-        (OneOf ss)      -> text "toContents" <+> v+        (List _)        -> text "concatMap toContents" <+> v+        (List1 _)       -> text "toContents" <+> v+        (Tuple _)      -> text "toContents" <+> v+        (OneOf _)      -> text "toContents" <+> v         (String)        -> text "toText" <+> v         (Any)           -> text "toContents" <+> v-        (Defined m)     -> text "toContents" <+> v+        (Defined _)     -> text "toContents" <+> v         (Defaultable _ _)  -> text "nyi_toElem_Defaultable" <+> v -mkRpat :: [Doc] -> Doc-mkRpat [v] = v-mkRpat vs  = (parens . hcat . intersperse comma) vs+-- mkRpat :: [Doc] -> Doc+-- mkRpat [v] = v+-- mkRpat vs  = (parens . hcat . intersperse comma) vs  mkCpat :: Name -> Doc -> [Doc] -> Doc mkCpat n i vs = ppHName n <+> i <+> fsep vs -nameSupply,nameSupply2 :: [b] -> [Doc]+nameSupply :: [b] -> [Doc] nameSupply  ss = take (length ss) (map char ['a'..])-nameSupply2 ss = take (length ss) [ text ('c':v:[]) | v <- ['a'..]]+-- nameSupply2 ss = take (length ss) [ text ('c':v:[]) | v <- ['a'..]]  mkTranslate :: [Name] -> Doc mkTranslate es =@@ -282,6 +283,7 @@     trans n = text "translate \"" <> ppXName n <> text "\" =" <+>               text "Just" <+> ppHName n +mkToAttr :: Name -> Doc mkToAttr n = text "toAttrFrTyp n" <+> ppHName n <+> text "=" <+>              text "Just (n, str2attr" <+> doubleQuotes (ppXName n) <> text ")" @@ -290,14 +292,14 @@     ppHName n <+> text "=" <+>     ( case st of         (Defaultable String s) -> text "defaultA fromAttrToStr" <+>-						 doubleQuotes (text s)+                                                 doubleQuotes (text s)         (Defaultable _ s)      -> text "defaultA fromAttrToTyp" <+> text s         (Maybe String)         -> text "possibleA fromAttrToStr"         (Maybe _)              -> text "possibleA fromAttrToTyp"         String                 -> text "definiteA fromAttrToStr" <+>-						 doubleQuotes (ppXName tag)+                                                 doubleQuotes (ppXName tag)         _                      -> text "definiteA fromAttrToTyp" <+>-						 doubleQuotes (ppXName tag)+                                                 doubleQuotes (ppXName tag)     ) <+> doubleQuotes (ppXName n) <+> text "as"  mkToFld :: (Name,StructType) -> Doc@@ -311,67 +313,67 @@         _                      -> text "toAttrFrTyp"     ) <+> doubleQuotes (ppXName n) <+> parens (ppHName n <+> text "v") -mkFrAux :: Bool -> Doc -> [(Name,[StructType])] -> Doc-mkFrAux keeprest attrs cs = foldr frAux inner cs-  where-    inner = text "(Nothing, c0)"-    rest  = if keeprest then text "rest" else text "_"-    frAux (n,sts) inner =-        let vs  = nameSupply sts in-        nest 4 (text "case" <+> blah sts vs <+> text "of" $$-                succpat sts vs <+> text "-> (Just" <+>-                                   parens (mkCpat n attrs vs) <> text ", rest)"-                $$-                failpat sts <+> text "->" $$ nest 4 inner-               )-    blah [st] [v] =-        blahblahblah st (text "c0")-    blah sts vs =-        let ns = nameSupply2 vs-            cvs = zip ns (text "c0": init ns)-            blahblah (st,v,(cvi,cvo)) inner =-                parens (text "\\" <> parens (v<>comma<>cvi) <> text "->" $$-                        nest 2 inner) $$-                blahblahblah st cvo-        in-        foldr blahblah (mkRpat (vs++[last ns])) (zip3 sts vs cvs)-    blahblahblah st cvo = parens (-        case st of-          (Maybe String) -> text "fromText" <+> cvo-          (Maybe s)      -> text "fromElem" <+> cvo-          (List String)  -> text "many fromText" <+> cvo-          (List s)       -> text "many fromElem" <+> cvo-          (List1 s)      -> text "fromElem" <+> cvo-          (Tuple ss)     -> text "fromElem" <+> cvo	-- ??-          (OneOf ss)     -> text "fromElem" <+> cvo-          (String)       -> text "fromText" <+> cvo-          (Any)          -> text "fromElem" <+> cvo-          (Defined m)    -> text "fromElem" <+> cvo-        )-    failpat sts =-        let fp st =-                case st of-                  (Maybe s)   -> text "Nothing"-                  (List s)    -> text "[]"-                  (List1 s)   -> text "_"-                  (Tuple ss)  -> text "_"-                  (OneOf ss)  -> text "_"-                  (String)    -> text "_"-                  (Any)       -> text "_"-                  (Defined m) -> text "_"-        in parens (hcat (intersperse comma (map fp sts++[text "_"])))-    succpat sts vs =-        let sp st v =-                case st of-                  (Maybe s)   -> v-                  (List s)    -> v-                  (List1 s)   -> text "Just" <+> v-                  (Tuple ss)  -> text "Just" <+> v-                  (OneOf ss)  -> text "Just" <+> v-                  (String)    -> text "Just" <+> v-                  (Any)       -> text "Just" <+> v-                  (Defined m) -> text "Just" <+> v-        in parens (hcat (intersperse comma (zipWith sp sts vs++[rest])))+-- mkFrAux :: Bool -> Doc -> [(Name,[StructType])] -> Doc+-- mkFrAux keeprest attrs cs = foldr frAux inner cs+--   where+--     inner = text "(Nothing, c0)"+--     rest  = if keeprest then text "rest" else text "_"+--     frAux (n,sts) innr =+--         let vs  = nameSupply sts in+--         nest 4 (text "case" <+> blah sts vs <+> text "of" $$+--                 succpat sts vs <+> text "-> (Just" <+>+--                                    parens (mkCpat n attrs vs) <> text ", rest)"+--                 $$+--                 failpat sts <+> text "->" $$ nest 4 innr+--                )+--     blah [st] [_] =+--         blahblahblah st (text "c0")+--     blah sts vs =+--         let ns = nameSupply2 vs+--             cvs = zip ns (text "c0": init ns)+--             blahblah (st,v,(cvi,cvo)) innr =+--                 parens (text "\\" <> parens (v<>comma<>cvi) <> text "->" $$+--                         nest 2 innr) $$+--                 blahblahblah st cvo+--         in+--         foldr blahblah (mkRpat (vs++[last ns])) (zip3 sts vs cvs)+--     blahblahblah st cvo = parens (+--         case st of+--           (Maybe String) -> text "fromText" <+> cvo+--           (Maybe _)      -> text "fromElem" <+> cvo+--           (List String)  -> text "many fromText" <+> cvo+--           (List _)       -> text "many fromElem" <+> cvo+--           (List1 _)      -> text "fromElem" <+> cvo+--           (Tuple _)     -> text "fromElem" <+> cvo      -- ??+--           (OneOf _)     -> text "fromElem" <+> cvo+--           (String)       -> text "fromText" <+> cvo+--           (Any)          -> text "fromElem" <+> cvo+--           (Defined _)    -> text "fromElem" <+> cvo+--         )+--     failpat sts =+--         let fp st =+--                 case st of+--                   (Maybe _)   -> text "Nothing"+--                   (List _)    -> text "[]"+--                   (List1 _)   -> text "_"+--                   (Tuple _)  -> text "_"+--                   (OneOf _)  -> text "_"+--                   (String)    -> text "_"+--                   (Any)       -> text "_"+--                   (Defined _) -> text "_"+--         in parens (hcat (intersperse comma (map fp sts++[text "_"])))+--     succpat sts vs =+--         let sp st v =+--                 case st of+--                   (Maybe _)   -> v+--                   (List _)    -> v+--                   (List1 _)   -> text "Just" <+> v+--                   (Tuple _)  -> text "Just" <+> v+--                   (OneOf _)  -> text "Just" <+> v+--                   (String)    -> text "Just" <+> v+--                   (Any)       -> text "Just" <+> v+--                   (Defined _) -> text "Just" <+> v+--         in parens (hcat (intersperse comma (zipWith sp sts vs++[rest])))  mkToAux :: Bool -> (Name,[StructType]) -> Doc mkToAux mixattrs (n,sts) =
src/Text/XML/HaXml/DtdToHaskell/TypeDef.hs view
@@ -26,25 +26,25 @@ ---- Internal representation for typedefs ----  -- | Need to keep both the XML and Haskell versions of a name.-data Name = Name { xName :: String	-- ^ original XML name-		 , hName :: String	-- ^ mangled Haskell name+data Name = Name { xName :: String       -- ^ original XML name+                 , hName :: String       -- ^ mangled Haskell name                  }           deriving Eq  data TypeDef =-      DataDef Bool Name AttrFields Constructors	-- ^ Bool for main\/aux.+      DataDef Bool Name AttrFields Constructors -- ^ Bool for main\/aux.     | EnumDef Name [Name]     deriving Eq type Constructors = [(Name,[StructType])] type AttrFields   = [(Name, StructType)] data StructType =       Maybe StructType-    | Defaultable StructType String	-- ^ String holds default value.+    | Defaultable StructType String     -- ^ String holds default value.     | List StructType-    | List1 StructType			-- ^ Non-empty lists.+    | List1 StructType                  -- ^ Non-empty lists.     | Tuple [StructType]     | OneOf [StructType]-    | Any				-- ^ XML's contentspec allows ANY+    | Any                               -- ^ XML's contentspec allows ANY     | String     | Defined Name     deriving Eq@@ -52,50 +52,50 @@ -- used for converting StructType (roughly) back to an XML content model instance Show StructType where     showsPrec p (Maybe s)         = showsPrec (p+1) s . showChar '?'-    showsPrec p (Defaultable s _) = shows s+    showsPrec _ (Defaultable s _) = shows s     showsPrec p (List s)          = showsPrec (p+1) s . showChar '*'     showsPrec p (List1 s)         = showsPrec (p+1) s . showChar '+'-    showsPrec p (Tuple ss)        = showChar '('+    showsPrec _ (Tuple ss)        = showChar '('                                     . foldr1 (.) (intersperse (showChar ',')                                                               (map shows ss))                                     . showChar ')'-    showsPrec p (OneOf ss)        = showChar '('+    showsPrec _ (OneOf ss)        = showChar '('                                     . foldr1 (.) (intersperse (showChar '|')                                                               (map shows ss))                                     . showChar ')'-    showsPrec p (Any)             = showString "ANY"-    showsPrec p (String)          = showString "#PCDATA"-    showsPrec p (Defined (Name n _)) = showString n+    showsPrec _ (Any)             = showString "ANY"+    showsPrec _ (String)          = showString "#PCDATA"+    showsPrec _ (Defined (Name n _)) = showString n   ---- Pretty-printing typedefs ---- ppTypeDef :: TypeDef -> Doc ---	no attrs, no constructors+--      no attrs, no constructors ppTypeDef (DataDef _ n [] []) =-    let name = ppHName n in-    text "data" <+> name <+> text "=" <+> name <+> text "\t\t" <> derives+    let nme = ppHName n in+    text "data" <+> nme <+> text "=" <+> nme <+> text "\t\t" <> derives ---	no attrs, single constructor+--      no attrs, single constructor ppTypeDef (DataDef _ n [] [c@(_,[_])]) =     text "newtype" <+> ppHName n <+> text "=" <+> ppC c <+> text "\t\t" <> derives ---	no attrs, multiple constrs+--      no attrs, multiple constrs ppTypeDef (DataDef _ n [] cs) =     text "data" <+> ppHName n <+>            ( text "=" <+> ppC (head cs) $$              vcat (map (\c-> text "|" <+> ppC c) (tail cs)) $$              derives ) ---	nonzero attrs, no constructors+--      nonzero attrs, no constructors ppTypeDef (DataDef _ n fs []) =-    let name = ppHName n in-    text "data" <+> name <+> text "=" <+> name $$+    let nme = ppHName n in+    text "data" <+> nme <+> text "=" <+> nme $$     nest 4 ( text "{" <+> ppF (head fs) $$              vcat (map (\f-> text "," <+> ppF f) (tail fs)) $$              text "}" <+> derives ) ---	nonzero attrs, one or more constrs+--      nonzero attrs, one or more constrs ppTypeDef (DataDef _ n fs cs) =     let attr = ppAName n in     text "data" <+> ppHName n <+>@@ -107,7 +107,7 @@              vcat (map (\f-> text "," <+> ppF f) (tail fs)) $$              text "}" <+> derives ) ---	enumerations (of attribute values)+--      enumerations (of attribute values) ppTypeDef (EnumDef n es) =     text "data" <+> ppHName n <+>     ( text "=" <+>@@ -148,7 +148,8 @@ -- | Pretty print Haskell attributes name. ppAName :: Name -> Doc ppAName (Name _ s) = text s <> text "_Attrs"-                      ++derives :: Doc derives = text "deriving" <+> parens (commaList (map text ["Eq","Show"]))  @@ -195,39 +196,38 @@  -- | Ensure a generated name does not conflict with a standard haskell one. notPrelude :: String -> String-notPrelude "String"  = "AString"-notPrelude "Maybe"   = "AMaybe"-notPrelude "Either"  = "AEither"+notPrelude "Bool"    = "ABool"+notPrelude "Bounded" = "ABounded" notPrelude "Char"    = "AChar"-notPrelude "String"  = "AString"-notPrelude "Int"     = "AInt"-notPrelude "Integer" = "AInteger"-notPrelude "Float"   = "AFloat" notPrelude "Double"  = "ADouble"-notPrelude "List1"   = "AList1"	-- part of HaXml-notPrelude "IO"      = "AIO"-notPrelude "IOError" = "AIOError"-notPrelude "FilePath"= "AFilePath"-notPrelude "Bool"    = "ABool"-notPrelude "Ordering"= "AOrdering"-notPrelude "Eq"      = "AEq"-notPrelude "Ord"     = "AOrd"+notPrelude "Either"  = "AEither" notPrelude "Enum"    = "AEnum"-notPrelude "Bounded" = "ABounded"+notPrelude "Eq"      = "AEq"+notPrelude "FilePath"= "AFilePath"+notPrelude "Float"   = "AFloat"+notPrelude "Floating"= "AFloating"+notPrelude "Fractional"= "AFractional" notPrelude "Functor" = "AFunctor"-notPrelude "Monad"   = "AMonad"-notPrelude "Rational"= "ARational"+notPrelude "IO"      = "AIO"+notPrelude "IOError" = "AIOError"+notPrelude "Int"     = "AInt"+notPrelude "Integer" = "AInteger" notPrelude "Integral"= "AIntegral"+notPrelude "List1"   = "AList1" -- part of HaXml+notPrelude "Maybe"   = "AMaybe"+notPrelude "Monad"   = "AMonad" notPrelude "Num"     = "ANum"+notPrelude "Ord"     = "AOrd"+notPrelude "Ordering"= "AOrdering"+notPrelude "Rational"= "ARational"+notPrelude "Read"    = "ARead"+notPrelude "ReadS"   = "AReadS" notPrelude "Real"    = "AReal"-notPrelude "RealFrac"= "ARealFrac"-notPrelude "Floating"= "AFloating" notPrelude "RealFloat" = "ARealFloat"-notPrelude "Fractional"= "AFractional"-notPrelude "Read"    = "ARead"+notPrelude "RealFrac"= "ARealFrac" notPrelude "Show"    = "AShow"-notPrelude "ReadS"   = "AReadS" notPrelude "ShowS"   = "AShowS"+notPrelude "String"  = "AString" notPrelude n         = n  -- | Convert an XML name to a Haskell varid.@@ -244,4 +244,5 @@ decolonify '.' = '_' decolonify  c  = c +commaList :: [Doc] -> Doc commaList = hcat . intersperse comma
src/Text/XML/HaXml/Escape.hs view
@@ -1,5 +1,5 @@ {- This module contains code for escaping/unescaping text in attributes-   and elements in the HaXml Element type, replacing characters by character +   and elements in the HaXml Element type, replacing characters by character    references or vice-versa.  Two uses are envisaged for this:     (1) stopping HaXml generating incorrect XML when a character is included@@ -21,7 +21,7 @@       -- Something describing a particular set of escapes.     stdXmlEscaper,-      -- Standard boilerplate escaper, escaping everything that is +      -- Standard boilerplate escaper, escaping everything that is       -- nonprintable, non-ASCII, or might conceivably cause problems by       -- parsing XML, for example quotes, < signs, and ampersands. @@ -56,7 +56,7 @@    ) where  import Char-import Numeric+-- import Numeric import Text.XML.HaXml.Types  #if __GLASGOW_HASKELL__ >= 604 || __NHC__ >= 118 || defined(__HUGS__)@@ -98,16 +98,16 @@   xmlEscape :: XmlEscaper -> Element i -> Element i-xmlEscape xmlEscaper element = +xmlEscape xmlEscaper element =    compressElement (escapeElement xmlEscaper element)  xmlEscapeContent :: XmlEscaper -> [Content i] -> [Content i]-xmlEscapeContent xmlEscaper cs = +xmlEscapeContent xmlEscaper cs =    compressContent (escapeContent xmlEscaper cs)  escapeElement :: XmlEscaper -> Element i -> Element i escapeElement xmlEscaper (Elem name attributes content) =-   Elem name (escapeAttributes xmlEscaper attributes) +   Elem name (escapeAttributes xmlEscaper attributes)       (escapeContent xmlEscaper content)  escapeAttributes :: XmlEscaper -> [Attribute] -> [Attribute]@@ -115,23 +115,23 @@    map       (\ (name,av) -> (name,escapeAttValue xmlEscaper av))       atts-   + escapeAttValue :: XmlEscaper -> AttValue -> AttValue escapeAttValue xmlEscaper (AttValue attValList) =    AttValue (-      concat ( +      concat (          map             (\ av -> case av of-               Right ref -> [av]+               Right _ -> [av]                Left s ->                   map-                     (\ c -> if isEscape xmlEscaper c +                     (\ c -> if isEscape xmlEscaper c                         then                            Right (mkEscape xmlEscaper c)                         else                            Left [c]                         )-                     s +                     s                )             attValList          )@@ -151,20 +151,20 @@                          CString b [c] i                       )                    str-             (CElem elem i) -> [CElem (escapeElement xmlEscaper elem) i]+             (CElem element i) -> [CElem (escapeElement xmlEscaper element) i]              _ -> [content]              )           contents           )  mkEscape :: XmlEscaper -> Char -> Reference-mkEscape (XmlEscaper {toEscape = toEscape}) ch =-   case lookupFM toEscape ch of+mkEscape (XmlEscaper {toEscape = toescape}) ch =+   case lookupFM toescape ch of       Nothing  -> RefChar (ord ch)       Just str -> RefEntity str-   where-      showHex = showIntAtBase 16 intToDigit -      -- It should be, but in GHC it isn't.+--    where+--       _ = showIntAtBase 16 intToDigit+--       -- It should be, but in GHC it isn't.  -- ------------------------------------------------------------------------ -- Unescaping@@ -175,7 +175,7 @@    compressElement (unEscapeElement xmlEscaper element)  xmlUnEscapeContent :: XmlEscaper -> [Content i] -> [Content i]-xmlUnEscapeContent xmlEscaper cs = +xmlUnEscapeContent xmlEscaper cs =    compressContent (unEscapeContent xmlEscaper cs)  unEscapeElement :: XmlEscaper -> Element i -> Element i@@ -194,7 +194,7 @@    AttValue (       map          (\ av -> case av of-            Left s -> av+            Left _ -> av             Right ref -> case unEscapeChar xmlEscaper ref of                Just c -> Left [c]                Nothing -> av@@ -205,12 +205,12 @@ unEscapeContent :: XmlEscaper -> [Content i] -> [Content i] unEscapeContent xmlEscaper content =    map-      (\ content -> case content of+      (\ cntnt -> case cntnt of          CRef ref i -> case unEscapeChar xmlEscaper ref of             Just c -> CString False [c] i-            Nothing -> content-         CElem elem i -> CElem (unEscapeElement xmlEscaper elem) i-         _ -> content+            Nothing -> cntnt+         CElem element i -> CElem (unEscapeElement xmlEscaper element) i+         _ -> cntnt          )       content @@ -250,11 +250,11 @@ compressContent [] = [] compressContent ((csb @ (CString b1 s1 i1)) : cs) =    case compressContent cs of-      (CString b2 s2 i2) : cs2+      (CString b2 s2 _) : cs2           | b1 == b2           -> CString b1 (s1 ++ s2) i1: cs2       cs2 -> csb : cs2-compressContent (CElem element i : cs) = +compressContent (CElem element i : cs) =    CElem (compressElement element) i : compressContent cs compressContent (c : cs) = c : compressContent cs @@ -266,7 +266,7 @@ stdXmlEscaper :: XmlEscaper stdXmlEscaper = mkXmlEscaper    [('\60',"lt"),('\62',"gt"),('\38',"amp"),('\39',"apos"),('\34',"quot")]-   (\ ch -> +   (\ ch ->       let          i = ord ch       in@@ -279,13 +279,13 @@                '>' -> True                _ -> False       )-             -            ++ mkXmlEscaper :: [(Char,String)] -> (Char -> Bool) -> XmlEscaper-mkXmlEscaper escapes isEscape =+mkXmlEscaper escapes isescape =    XmlEscaper {       toEscape = listToFM escapes,       fromEscape = listToFM (map (\ (c,str) -> (str,c)) escapes),-      isEscape = isEscape+      isEscape = isescape       } 
src/Text/XML/HaXml/Html/Generate.hs view
@@ -29,7 +29,6 @@   ) where  import Char (isSpace)-import List (partition)  import Text.XML.HaXml.Types import Text.XML.HaXml.Combinators@@ -94,41 +93,41 @@ -- htmlprint :: [Content] -> String -- htmlprint = concatMap cprint --   where---   cprint (CElem e _) = elem e +--   cprint (CElem e _) = elem e --   cprint (CString _ s) = s --   cprint (CMisc m) = ""---  +-- --   elem (Elem n as []) = "\n<"++n++attrs as++" />" --   elem (Elem n as cs) = "\n<"++n++attrs as++">"++htmlprint cs++"\n</"++n++">"--- +-- --   attrs = concatMap attr --   attr (n,v) = " "++n++"='"++v++"'"   htmlprint :: [Content i] -> Pretty.Doc-htmlprint = Pretty.cat . map cprint . foldrefs +htmlprint = Pretty.cat . map cprint . foldrefs   where   foldrefs [] = []   foldrefs (CString ws s1 i:CRef r _:CString _ s2 _:cs) =               CString ws (s1++"&"++ref r++";"++s2) i: foldrefs cs   foldrefs (c:cs) = c : foldrefs cs ---ref (RefEntity (EntityRef n)) = n	-- Actually, should look-up symtable.+--ref (RefEntity (EntityRef n)) = n     -- Actually, should look-up symtable. --ref (RefChar (CharRef s)) = s-  ref (RefEntity n) = n	-- Actually, should look-up symtable.+  ref (RefEntity n) = n -- Actually, should look-up symtable.   ref (RefChar s) = show s -  cprint (CElem e _)      = elem e+  cprint (CElem e _)      = element e   cprint (CString ws s _) = Pretty.cat (map Pretty.text (fmt 60                                              ((if ws then id else deSpace) s)))   cprint (CRef r _)       = Pretty.text ("&"++ref r++";")-  cprint (CMisc m _)      = Pretty.empty- -  elem (Elem n as []) = Pretty.text "<"   Pretty.<>+  cprint (CMisc _ _)      = Pretty.empty++  element (Elem n as []) = Pretty.text "<"   Pretty.<>                         Pretty.text n     Pretty.<>                         attrs as          Pretty.<>                         Pretty.text " />"-  elem (Elem n as cs) =+  element (Elem n as cs) =                     --  ( Pretty.text "<"   Pretty.<>                     --    Pretty.text n     Pretty.<>                     --    attrs as          Pretty.<>@@ -147,15 +146,15 @@                                         Pretty.text ">" )                                     ] -  attrs = Pretty.cat . map attr-  attr (n,v@(AttValue _)) =+  attrs = Pretty.cat . map attribute+  attribute (n,v@(AttValue _)) =                Pretty.text " "  Pretty.<>                Pretty.text n    Pretty.<>                Pretty.text "='" Pretty.<>                Pretty.text (show v) Pretty.<>                Pretty.text "'" -  fmt n [] = []+  fmt _ [] = []   fmt n s  = let (top,bot) = splitAt n s                  (word,left) = keepUntil isSpace (reverse top)              in if length top < n then [s]@@ -170,6 +169,7 @@                  | otherwise = c : deSpace cs    keepUntil p xs = select p ([],xs)-      where select p (ls,[])     = (ls,[])-            select p (ls,(x:xs)) | p x       = (ls,x:xs)-                                 | otherwise = select p (x:ls,xs)+      where select _ (ls,[])     = (ls,[])+            select q (ls,(y:ys)) | q y       = (ls,y:ys)+                                 | otherwise = select q (y:ls,ys)+
src/Text/XML/HaXml/OneOfN.hs view
@@ -8,7 +8,7 @@  instance (HTypeable a,HTypeable b)     => HTypeable (OneOf2 a b)-  where      toHType m = Defined "OneOf2" [] []+  where      toHType _ = Defined "OneOf2" [] []   --         toHType m = Defined "OneOf2" [a,b] []   --            where a = toHType $ (\ (OneOf2 a)->a) $ m   --                  b = toHType $ (\ (TwoOf2 b)->b) $ m@@ -30,7 +30,7 @@  instance (HTypeable a,HTypeable b,HTypeable c)     => HTypeable (OneOf3 a b c)-  where      toHType m = Defined "OneOf3" [] []+  where      toHType _ = Defined "OneOf3" [] []  instance (XmlContent a,XmlContent b,XmlContent c)     => XmlContent (OneOf3 a b c)@@ -49,7 +49,7 @@  instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d)     => HTypeable (OneOf4 a b c d)-  where      toHType m = Defined "OneOf4" [] []+  where      toHType _ = Defined "OneOf4" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d)     => XmlContent (OneOf4 a b c d)@@ -69,7 +69,7 @@  instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e)     => HTypeable (OneOf5 a b c d e)-  where      toHType m = Defined "OneOf5" [] []+  where      toHType _ = Defined "OneOf5" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e)     => XmlContent (OneOf5 a b c d e)@@ -92,7 +92,7 @@ instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e           ,HTypeable f)     => HTypeable (OneOf6 a b c d e f)-  where      toHType m = Defined "OneOf6" [] []+  where      toHType _ = Defined "OneOf6" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f)@@ -118,7 +118,7 @@ instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e           ,HTypeable f,HTypeable g)     => HTypeable (OneOf7 a b c d e f g)-  where      toHType m = Defined "OneOf7" [] []+  where      toHType _ = Defined "OneOf7" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f,XmlContent g)@@ -145,7 +145,7 @@ instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e           ,HTypeable f,HTypeable g,HTypeable h)     => HTypeable (OneOf8 a b c d e f g h)-  where      toHType m = Defined "OneOf8" [] []+  where      toHType _ = Defined "OneOf8" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f,XmlContent g,XmlContent h)@@ -173,7 +173,7 @@ instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e           ,HTypeable f,HTypeable g,HTypeable h,HTypeable i)     => HTypeable (OneOf9 a b c d e f g h i)-  where      toHType m = Defined "OneOf9" [] []+  where      toHType _ = Defined "OneOf9" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i)@@ -203,7 +203,7 @@ instance (HTypeable a,HTypeable b,HTypeable c,HTypeable d,HTypeable e           ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j)     => HTypeable (OneOf10 a b c d e f g h i j)-  where      toHType m = Defined "OneOf10" [] []+  where      toHType _ = Defined "OneOf10" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j)@@ -236,7 +236,7 @@           ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j           ,HTypeable k)     => HTypeable (OneOf11 a b c d e f g h i j k)-  where      toHType m = Defined "OneOf11" [] []+  where      toHType _ = Defined "OneOf11" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -272,7 +272,7 @@           ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j           ,HTypeable k,HTypeable l)     => HTypeable (OneOf12 a b c d e f g h i j k l)-  where      toHType m = Defined "OneOf12" [] []+  where      toHType _ = Defined "OneOf12" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -309,7 +309,7 @@           ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j           ,HTypeable k,HTypeable l,HTypeable m)     => HTypeable (OneOf13 a b c d e f g h i j k l m)-  where      toHType m = Defined "OneOf13" [] []+  where      toHType _ = Defined "OneOf13" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -347,7 +347,7 @@           ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j           ,HTypeable k,HTypeable l,HTypeable m,HTypeable n)     => HTypeable (OneOf14 a b c d e f g h i j k l m n)-  where      toHType m = Defined "OneOf14" [] []+  where      toHType _ = Defined "OneOf14" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -388,7 +388,7 @@           ,HTypeable f,HTypeable g,HTypeable h,HTypeable i,HTypeable j           ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o)     => HTypeable (OneOf15 a b c d e f g h i j k l m n o)-  where      toHType m = Defined "OneOf15" [] []+  where      toHType _ = Defined "OneOf15" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -431,7 +431,7 @@           ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o           ,HTypeable p)     => HTypeable (OneOf16 a b c d e f g h i j k l m n o p)-  where      toHType m = Defined "OneOf16" [] []+  where      toHType _ = Defined "OneOf16" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -476,7 +476,7 @@           ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o           ,HTypeable p,HTypeable q)     => HTypeable (OneOf17 a b c d e f g h i j k l m n o p q)-  where      toHType m = Defined "OneOf17" [] []+  where      toHType _ = Defined "OneOf17" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -523,7 +523,7 @@           ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o           ,HTypeable p,HTypeable q,HTypeable r)     => HTypeable (OneOf18 a b c d e f g h i j k l m n o p q r)-  where      toHType m = Defined "OneOf18" [] []+  where      toHType _ = Defined "OneOf18" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -572,7 +572,7 @@           ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o           ,HTypeable p,HTypeable q,HTypeable r,HTypeable s)     => HTypeable (OneOf19 a b c d e f g h i j k l m n o p q r s)-  where      toHType m = Defined "OneOf19" [] []+  where      toHType _ = Defined "OneOf19" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j@@ -622,7 +622,7 @@           ,HTypeable k,HTypeable l,HTypeable m,HTypeable n,HTypeable o           ,HTypeable p,HTypeable q,HTypeable r,HTypeable s,HTypeable t)     => HTypeable (OneOf20 a b c d e f g h i j k l m n o p q r s t)-  where      toHType m = Defined "OneOf20" [] []+  where      toHType _ = Defined "OneOf20" [] []  instance (XmlContent a,XmlContent b,XmlContent c,XmlContent d,XmlContent e           ,XmlContent f,XmlContent g,XmlContent h,XmlContent i,XmlContent j
src/Text/XML/HaXml/Posn.hs view
@@ -42,7 +42,7 @@ posInNewCxt name pos = Pn name 1 1 pos  instance Show Posn where-      showsPrec p (Pn f l c i) = showString f .+      showsPrec _ (Pn f l c i) = showString f .                                  showString "  at line " . shows l .                                  showString " col " . shows c .                                  ( case i of@@ -53,7 +53,7 @@ -- | Just used to strictify the internal values of a position, to avoid --   space leaks. forcep :: Posn -> Int-forcep (Pn f n m i) = m `seq` n+forcep (Pn _ n m _) = m `seq` n  -- | Add n character positions to the given position. addcol :: Int -> Posn -> Posn@@ -61,7 +61,7 @@  -- | Add a newline or tab to the given position. newline, tab :: Posn -> Posn-newline (Pn f r c i) = Pn f (r+1) 1 i+newline (Pn f r _ i) = Pn f (r+1) 1 i tab     (Pn f r c i) = Pn f r (((c`div`8)+1)*8) i  -- | Add the given whitespace char to the given position.
src/Text/XML/HaXml/Pretty.hs view
@@ -28,10 +28,12 @@ import Text.PrettyPrint.HughesPJ import Text.XML.HaXml.Types -either f g (Left x)  = f x-either f g (Right x) = g x+either :: (t -> t1) -> (t2 -> t1) -> Either t t2 -> t1+either f _ (Left x)  = f x+either _ g (Right x) = g x -maybe f Nothing  = empty+maybe :: (t -> Doc) -> Maybe t -> Doc+maybe _ Nothing  = empty maybe f (Just x) = f x  --peref p   = text "%" <> text p <> text ";"@@ -69,7 +71,7 @@ misc (PI (n,s))            = text "<?" <> text n <+> text s <> text "?>" sddecl sd   | sd           = text "standalone='yes'"             | otherwise    = text "standalone='no'"-doctypedecl (DTD n eid ds) = if null ds then +doctypedecl (DTD n eid ds) = if null ds then                                   hd <> text ">"                              else hd <+> text " [" $$                                   vcat (map markupdecl ds) $$ text "]>"@@ -80,12 +82,12 @@ markupdecl (Entity e)      = entitydecl e markupdecl (Notation n)    = notationdecl n markupdecl (MarkupMisc m)  = misc m---markupdecl (MarkupPE p m)  = peref p+-- markupdecl (MarkupPE p m)  = peref p extsubset (ExtSubset t ds) = maybe textdecl t $$                              vcat (map extsubsetdecl ds)-extsubsetdecl (ExtMarkupDecl m)      = markupdecl m+extmarkupdecl (ExtMarkupDecl m)      = markupdecl m extsubsetdecl (ExtConditionalSect c) = conditionalsect c---extsubsetdecl (ExtPEReference p e)   = peref p+-- extsubsetdecl (ExtPEReference p e)   = peref p  element (Elem n as []) = text "<" <> text n <+>                          fsep (map attribute as) <> text "/>"@@ -99,15 +101,18 @@     | otherwise        = let (d,c) = carryelem e empty                          in d <> c +isText :: Content t -> Bool isText (CString _ _ _) = True isText (CRef _ _)      = True isText _               = False +carryelem :: Element t -> Doc -> (Doc, Doc)+carrycontent ::  Content t -> Doc -> (Doc, Doc) carryelem (Elem n as []) c                        = ( c <>                            text "<" <> text n <+> fsep (map attribute as)                          , text "/>")-carryelem e@(Elem n as cs) c+carryelem (Elem n as cs) c --  | any isText cs    =  ( c <> element e, empty)     | otherwise        =  let (cs0,d0) = carryscan carrycontent cs (text ">")                           in@@ -123,7 +128,7 @@ carrycontent (CMisc m _) c   = (c <> misc m, empty)  carryscan :: (a->c->(b,c)) -> [a] -> c -> ([b],c)-carryscan f []     c = ([],c)+carryscan _ []     c = ([],c) carryscan f (a:as) c = let (b, c0) = f a c                            (bs,c1) = carryscan f as c0                        in (b:bs, c1)@@ -153,8 +158,10 @@ content (CRef r _)          = reference r content (CMisc m _)         = misc m +elementdecl :: ElementDecl -> Doc elementdecl (ElementDecl n cs) = text "<!ELEMENT" <+> text n <+>                                  contentspec cs <> text ">"+contentspec :: ContentSpec -> Doc contentspec EMPTY              = text "EMPTY" contentspec ANY                = text "ANY" contentspec (Mixed m)          = mixed m@@ -166,21 +173,27 @@ cp (Seq cs m)          = parens (hcat (intersperse (text ",") (map cp cs))) <>                            modifier m --cp (CPPE p c)          = peref p+modifier :: Modifier -> Doc modifier None          = empty modifier Query         = text "?" modifier Star          = text "*" modifier Plus          = text "+"+mixed :: Mixed -> Doc mixed  PCDATA          = text "(#PCDATA)" mixed (PCDATAplus ns)  = text "(#PCDATA |" <+>                          hcat (intersperse (text "|") (map text ns)) <>                          text ")*" +attlistdecl :: AttListDecl -> Doc attlistdecl (AttListDecl n ds) = text "<!ATTLIST" <+> text n <+>                                  fsep (map attdef ds) <> text ">"+attdef :: AttDef -> Doc attdef (AttDef n t d)          = text n <+> atttype t <+> defaultdecl d+atttype :: AttType -> Doc atttype  StringType            = text "CDATA" atttype (TokenizedType t)      = tokenizedtype t atttype (EnumeratedType t)     = enumeratedtype t+tokenizedtype :: TokenizedType -> Doc tokenizedtype ID               = text "ID" tokenizedtype IDREF            = text "IDREF" tokenizedtype IDREFS           = text "IDREFS"@@ -188,11 +201,15 @@ tokenizedtype ENTITIES         = text "ENTITIES" tokenizedtype NMTOKEN          = text "NMTOKEN" tokenizedtype NMTOKENS         = text "NMTOKENS"+enumeratedtype :: EnumeratedType -> Doc enumeratedtype (NotationType n)= notationtype n enumeratedtype (Enumeration e) = enumeration e+notationtype :: [String] -> Doc notationtype ns                = text "NOTATION" <+>                                  parens (hcat (intersperse (text "|") (map text ns)))+enumeration :: [String] -> Doc enumeration ns                 = parens (hcat (intersperse (text "|") (map nmtoken ns)))+defaultdecl :: DefaultDecl -> Doc defaultdecl  REQUIRED          = text "#REQUIRED" defaultdecl  IMPLIED           = text "#IMPLIED" defaultdecl (DefaultTo a f)    = maybe (const (text "#FIXED")) f <+> attvalue a@@ -206,54 +223,76 @@                           where internal (ics,i) = text "<![[" <+>                                                    ignoresectcontents ics <+>                                                    text "]]>" <+> ignore i+reference :: Reference -> Doc reference (RefEntity er)       = entityref er reference (RefChar cr)         = charref cr+entityref :: String -> Doc entityref n                    = text "&" <> text n <> text ";"+charref :: (Show a) => a -> Doc charref c                      = text "&#" <> text (show c) <> text ";"+entitydecl :: EntityDecl -> Doc entitydecl (EntityGEDecl d)    = gedecl d entitydecl (EntityPEDecl d)    = pedecl d+gedecl :: GEDecl -> Doc gedecl (GEDecl n ed)           = text "<!ENTITY" <+> text n <+> entitydef ed <>                                  text ">"+pedecl :: PEDecl -> Doc pedecl (PEDecl n pd)           = text "<!ENTITY %" <+> text n <+> pedef pd <>                                  text ">"-entitydef (DefEntityValue ev)  = entityvalue ev+entitydef :: EntityDef -> Doc+entitydef (DefEntityValue ew)  = entityvalue ew entitydef (DefExternalID i nd) = externalid i <+> maybe ndatadecl nd-pedef (PEDefEntityValue ev)    = entityvalue ev+pedef :: PEDef -> Doc+pedef (PEDefEntityValue ew)    = entityvalue ew pedef (PEDefExternalID eid)    = externalid eid+externalid :: ExternalID -> Doc externalid (SYSTEM sl)         = text "SYSTEM" <+> systemliteral sl externalid (PUBLIC i sl)       = text "PUBLIC" <+> pubidliteral i <+>                                  systemliteral sl+ndatadecl :: NDataDecl -> Doc ndatadecl (NDATA n)            = text "NDATA" <+> text n textdecl (TextDecl vi ed)      = text "<?xml" <+> maybe text vi <+>                                  encodingdecl ed <+> text "?>" extparsedent (ExtParsedEnt t c)= maybe textdecl t <+> content c extpe (ExtPE t esd)            = maybe textdecl t <+>                                  vcat (map extsubsetdecl esd)+notationdecl :: NotationDecl -> Doc notationdecl (NOTATION n e)    = text "<!NOTATION" <+> text n <+>                                  either externalid publicid e <>                                  text ">"+publicid :: PublicID -> Doc publicid (PUBLICID p)          = text "PUBLIC" <+> pubidliteral p+encodingdecl :: EncodingDecl -> Doc encodingdecl (EncodingDecl s)  = text "encoding='" <> text s <> text "'"+nmtoken :: String -> Doc nmtoken s                      = text s+attvalue :: AttValue -> Doc attvalue (AttValue esr)        = text "\"" <>                                  hcat (map (either text reference) esr) <>                                  text "\""+entityvalue :: EntityValue -> Doc entityvalue (EntityValue evs)   | containsDoubleQuote evs    = text "'"  <> hcat (map ev evs) <> text "'"   | otherwise                  = text "\"" <> hcat (map ev evs) <> text "\""+ev :: EV -> Doc ev (EVString s)                = text s --ev (EVPERef p e)               = peref p ev (EVRef r)                   = reference r+pubidliteral :: PubidLiteral -> Doc pubidliteral (PubidLiteral s)     | '"' `elem` s             = text "'" <> text s <> text "'"     | otherwise                = text "\"" <> text s <> text "\""+systemliteral :: SystemLiteral -> Doc systemliteral (SystemLiteral s)     | '"' `elem` s             = text "'" <> text s <> text "'"     | otherwise                = text "\"" <> text s <> text "\""+chardata :: String -> Doc chardata s                     = {-if all isSpace s then empty else-} text s+cdsect :: String -> Doc cdsect c                       = text "<![CDATA[" <> chardata c <> text "]]>"  ----+containsDoubleQuote :: [EV] -> Bool containsDoubleQuote evs = any csq evs     where csq (EVString s) = '"' `elem` s           csq _            = False
src/Text/XML/HaXml/SAX.hs view
@@ -35,8 +35,8 @@ 	 -> ([SaxElement],Maybe String) 		-- ^ A tuple of the parsed elements and @Nothing@, if no 		--   error occured, or @Just@ @String@ if an error occured.-saxParse file content = parseStream sax emptySTs-                                    (xmlLex file content)+saxParse file cntnt = parseStream sax emptySTs+                                    (xmlLex file cntnt)  parseStream :: Parser s t a -> s -> [t] -> ([a], Maybe String) parseStream _ _ [] = ([],Nothing)@@ -78,13 +78,13 @@ saxcomment = comment >>= return . SaxComment  saxchardata :: XParser SaxElement-saxchardata = +saxchardata =   (cdsect >>= return . SaxCharData)   `onFail`   (chardata >>= return . SaxCharData)  saxreference :: XParser SaxElement-saxreference = reference >>= return . SaxReference	+saxreference = reference >>= return . SaxReference  saxdoctypedecl :: XParser SaxElement saxdoctypedecl = doctypedecl >>= return . SaxDocTypeDecl
src/Text/XML/HaXml/ShowXmlLazy.hs view
@@ -1,15 +1,14 @@- module Text.XML.HaXml.ShowXmlLazy (showXmlLazy) where  import Text.XML.HaXml.Types-import Text.XML.HaXml.TypeMapping+import Text.XML.HaXml.TypeMapping -- (toHType, toDTD, Tuple(), Defined, showHType)  import qualified Text.XML.HaXml.XmlContent as X import Prelude hiding (maybe,either) import Maybe hiding (maybe) import Data.List --- | Convert a fully-typed XML document to a string (without DTD).                                         +-- | Convert a fully-typed XML document to a string (without DTD). showXmlLazy :: X.XmlContent a => Bool -> a -> String showXmlLazy dtd x =     case X.toContents x of@@ -17,7 +16,7 @@       _ -> ""  --- | Convert a fully-typed XML document to a string (with or without DTD).                                 +-- | Convert a fully-typed XML document to a string (with or without DTD). toXmlLazy :: X.XmlContent a => Bool -> a -> Document () toXmlLazy dtd value =     let ht = toHType value in@@ -34,23 +33,35 @@   type Doc = String+empty :: [Char] empty = ""+($$) :: [Char] -> [Char] -> [Char] ($$) a b = a ++ "\n" ++ b+vcat :: [[Char]] -> [Char] vcat a = foldr ($$) [] a+hcat :: [[a]] -> [a] hcat = concat+(<>) :: [a] -> [a] -> [a] (<>) = (++)+(<+>) :: [Char] -> [Char] -> [Char] (<+>) a b = a ++ " " ++ b+fsep :: [[Char]] -> [Char] fsep = vcat+text :: t -> t text string = string+parens :: [Char] -> [Char] parens string = "("++string++")"+nest :: t -> t1 -> t1 nest _ string = string   -either f g (Left x)  = f x-either f g (Right x) = g x+either :: (t -> t1) -> (t2 -> t1) -> Either t t2 -> t1+either f _ (Left x)  = f x+either _ g (Right x) = g x -maybe f Nothing  = empty+maybe :: (t -> [Char]) -> Maybe t -> [Char]+maybe _ Nothing  = empty maybe f (Just x) = f x  --peref p   = text "%" <> text p <> text ";"@@ -65,8 +76,8 @@  doctypedecl :: DocTypeDecl -> Doc markupdecl  :: MarkupDecl -> Doc-extsubset   :: ExtSubset -> Doc-extsubsetdecl :: ExtSubsetDecl -> Doc+-- extsubset   :: ExtSubset -> Doc+-- extsubsetdecl :: ExtSubsetDecl -> Doc cp          :: CP -> Doc  element   :: Element i -> Doc@@ -88,7 +99,7 @@ misc (PI (n,s))            = text "<?" <> text n <+> text s <+> text "?>" sddecl sd   | sd           = text "standalone='yes'"             | otherwise    = text "standalone='no'"-doctypedecl (DTD n eid ds) = if null ds then +doctypedecl (DTD n eid ds) = if null ds then                                   hd <> text ">"                              else hd <+> text " [" $$                                   vcat (map markupdecl ds) $$ text "]>"@@ -100,10 +111,10 @@ markupdecl (Notation n)    = notationdecl n markupdecl (MarkupMisc m)  = misc m --markupdecl (MarkupPE p m)  = peref p-extsubset (ExtSubset t ds) = maybe textdecl t $$-                             vcat (map extsubsetdecl ds)-extsubsetdecl (ExtMarkupDecl m)      = markupdecl m-extsubsetdecl (ExtConditionalSect c) = conditionalsect c+-- _ (ExtSubset t ds) = maybe textdecl t $$+--                              vcat (map extsubsetdecl ds)+-- _ (ExtMarkupDecl m)      = markupdecl m+-- extsubsetdecl (ExtConditionalSect c) = conditionalsect c --extsubsetdecl (ExtPEReference p e)   = peref p  element (Elem n as []) = text "<" <> text n <+>@@ -118,6 +129,7 @@     | otherwise        = let (d,c) = carryelem e empty                          in d <> c +isText :: Content t -> Bool isText (CString _ _ _) = True isText (CRef _ _)      = True isText _               = False@@ -126,15 +138,17 @@                        = ( c <>                            text "<" <> text n <+> fsep (map attribute as)                          , text "/>")-carryelem e@(Elem n as cs) c+carryelem (Elem n as cs) c --  | any isText cs    =  ( c <> element e, empty)     | otherwise        =  let (cs0,d0) = carryscan carrycontent cs (text ">")                           in                           ( c <>                             text "<" <> text n <+> fsep (map attribute as) $$-                            nest 2 (vcat cs0) <> --- $$+                            nest (2 :: Int) (vcat cs0) <> --- $$                             d0 <> text "</" <> text n                           , text ">")+carrycontent :: Content t -> [Char] -> ([Char], [Char])+carryelem :: Element t -> [Char] -> ([Char], [Char]) carrycontent (CElem e _) c   = carryelem e c carrycontent (CString False s _) c = (c <> chardata s, empty) carrycontent (CString True  s _) c = (c <> cdsect s, empty)@@ -142,7 +156,7 @@ carrycontent (CMisc m _) c   = (c <> misc m, empty)  carryscan :: (a->c->(b,c)) -> [a] -> c -> ([b],c)-carryscan f []     c = ([],c)+carryscan _ []     c = ([],c) carryscan f (a:as) c = let (b, c0) = f a c                            (bs,c1) = carryscan f as c0                        in (b:bs, c1)@@ -172,8 +186,10 @@ content (CRef r _)          = reference r content (CMisc m _)         = misc m +elementdecl :: ElementDecl -> [Char] elementdecl (ElementDecl n cs) = text "<!ELEMENT" <+> text n <+>                                  contentspec cs <> text ">"+contentspec :: ContentSpec -> [Char] contentspec EMPTY              = text "EMPTY" contentspec ANY                = text "ANY" contentspec (Mixed m)          = mixed m@@ -185,21 +201,27 @@ cp (Seq cs m)          = parens (hcat (intersperse (text ",") (map cp cs))) <>                            modifier m --cp (CPPE p c)          = peref p+modifier :: Modifier -> [Char] modifier None          = empty modifier Query         = text "?" modifier Star          = text "*" modifier Plus          = text "+"+mixed :: Mixed -> [Char] mixed  PCDATA          = text "(#PCDATA)" mixed (PCDATAplus ns)  = text "(#PCDATA |" <+>                          hcat (intersperse (text "|") (map text ns)) <>                          text ")*" +attlistdecl :: AttListDecl -> [Char] attlistdecl (AttListDecl n ds) = text "<!ATTLIST" <+> text n <+>                                  fsep (map attdef ds) <> text ">"+attdef :: AttDef -> [Char] attdef (AttDef n t d)          = text n <+> atttype t <+> defaultdecl d+atttype :: AttType -> [Char] atttype  StringType            = text "CDATA" atttype (TokenizedType t)      = tokenizedtype t atttype (EnumeratedType t)     = enumeratedtype t+tokenizedtype :: TokenizedType -> [Char] tokenizedtype ID               = text "ID" tokenizedtype IDREF            = text "IDREF" tokenizedtype IDREFS           = text "IDREFS"@@ -207,72 +229,98 @@ tokenizedtype ENTITIES         = text "ENTITIES" tokenizedtype NMTOKEN          = text "NMTOKEN" tokenizedtype NMTOKENS         = text "NMTOKENS"+enumeratedtype :: EnumeratedType -> [Char] enumeratedtype (NotationType n)= notationtype n enumeratedtype (Enumeration e) = enumeration e+notationtype :: [[Char]] -> [Char] notationtype ns                = text "NOTATION" <+>                                  parens (hcat (intersperse (text "|") (map text ns)))+enumeration :: [[Char]] -> [Char] enumeration ns                 = parens (hcat (intersperse (text "|") (map nmtoken ns)))+defaultdecl :: DefaultDecl -> [Char] defaultdecl  REQUIRED          = text "#REQUIRED" defaultdecl  IMPLIED           = text "#IMPLIED" defaultdecl (DefaultTo a f)    = maybe (const (text "#FIXED")) f <+> attvalue a-conditionalsect (IncludeSect i)= text "<![INCLUDE [" <+>-                                 vcat (map extsubsetdecl i) <+> text "]]>"-conditionalsect (IgnoreSect i) = text "<![IGNORE [" <+>-                                 fsep (map ignoresectcontents i) <+> text "]]>"-ignore (Ignore)                = empty-ignoresectcontents (IgnoreSectContents i is)-                               = ignore i <+> vcat (map internal is)-                          where internal (ics,i) = text "<![[" <+>-                                                   ignoresectcontents ics <+>-                                                   text "]]>" <+> ignore i+-- _ (IncludeSect i)= text "<![INCLUDE [" <+>+--                                  vcat (map extsubsetdecl i) <+> text "]]>"+-- conditionalsect (IgnoreSect i) = text "<![IGNORE [" <+>+--                                  fsep (map ignoresectcontents i) <+> text "]]>"+-- _ (Ignore)                = empty+-- _ (IgnoreSectContents i is)+--                                = ignore i <+> vcat (map internal is)+--                           where internal (ics,i) = text "<![[" <+>+--                                                    ignoresectcontents ics <+>+--                                                    text "]]>" <+> ignore i+reference :: Reference -> [Char] reference (RefEntity er)       = entityref er reference (RefChar cr)         = charref cr+entityref :: [Char] -> [Char] entityref n                    = text "&" <> text n <> text ";"+charref :: (Show a) => a -> [Char] charref c                      = text "&#" <> text (show c) <> text ";"+entitydecl :: EntityDecl -> [Char] entitydecl (EntityGEDecl d)    = gedecl d entitydecl (EntityPEDecl d)    = pedecl d+gedecl :: GEDecl -> [Char] gedecl (GEDecl n ed)           = text "<!ENTITY" <+> text n <+> entitydef ed <>                                  text ">"+pedecl :: PEDecl -> [Char] pedecl (PEDecl n pd)           = text "<!ENTITY %" <> text n <+> pedef pd <>                                  text ">"-entitydef (DefEntityValue ev)  = entityvalue ev+entitydef :: EntityDef -> [Char]+entitydef (DefEntityValue ew)  = entityvalue ew entitydef (DefExternalID i nd) = externalid i <+> maybe ndatadecl nd-pedef (PEDefEntityValue ev)    = entityvalue ev+pedef :: PEDef -> [Char]+pedef (PEDefEntityValue ew)    = entityvalue ew pedef (PEDefExternalID eid)    = externalid eid+externalid :: ExternalID -> [Char] externalid (SYSTEM sl)         = text "SYSTEM" <+> systemliteral sl externalid (PUBLIC i sl)       = text "PUBLIC" <+> pubidliteral i <+>                                  systemliteral sl+ndatadecl :: NDataDecl -> [Char] ndatadecl (NDATA n)            = text "NDATA" <+> text n-textdecl (TextDecl vi ed)      = text "<?xml" <+> maybe text vi <+>-                                 encodingdecl ed <> text "?>"-extparsedent (ExtParsedEnt t c)= maybe textdecl t <+> content c-extpe (ExtPE t esd)            = maybe textdecl t <+>-                                 vcat (map extsubsetdecl esd)+-- _ (TextDecl vi ed)      = text "<?xml" <+> maybe text vi <+>+--                                  encodingdecl ed <> text "?>"+-- _ (ExtParsedEnt t c)= maybe textdecl t <+> content c+-- _ (ExtPE t esd)            = maybe textdecl t <+>+--                                  vcat (map extsubsetdecl esd)+notationdecl :: NotationDecl -> [Char] notationdecl (NOTATION n e)    = text "<!NOTATION" <+> text n <+>                                  either externalid publicid e <>                                  text ">"+publicid :: PublicID -> [Char] publicid (PUBLICID p)          = text "PUBLICID" <+> pubidliteral p+encodingdecl :: EncodingDecl -> [Char] encodingdecl (EncodingDecl s)  = text "encoding='" <> text s <> text "'"+nmtoken :: t -> t nmtoken s                      = text s+attvalue :: AttValue -> [Char] attvalue (AttValue esr)        = text "\"" <>                                  hcat (map (either text reference) esr) <>                                  text "\""+entityvalue :: EntityValue -> [Char] entityvalue (EntityValue evs)   | containsDoubleQuote evs    = text "'"  <> hcat (map ev evs) <> text "'"   | otherwise                  = text "\"" <> hcat (map ev evs) <> text "\""+ev :: EV -> String ev (EVString s)                = text s --ev (EVPERef p e)               = peref p ev (EVRef r)                   = reference r+pubidliteral :: PubidLiteral -> [Char] pubidliteral (PubidLiteral s)     | '"' `elem` s             = text "'" <> text s <> text "'"     | otherwise                = text "\"" <> text s <> text "\""+systemliteral :: SystemLiteral -> [Char] systemliteral (SystemLiteral s)     | '"' `elem` s             = text "'" <> text s <> text "'"     | otherwise                = text "\"" <> text s <> text "\""+chardata :: t -> t chardata s                     = {-if all isSpace s then empty else-} text s+cdsect :: [Char] -> [Char] cdsect c                       = text "<![CDATA[" <> chardata c <> text "]]>"  ----+containsDoubleQuote :: [EV] -> Bool containsDoubleQuote evs = any csq evs     where csq (EVString s) = '"' `elem` s           csq _            = False
src/Text/XML/HaXml/TypeMapping.hs view
@@ -90,6 +90,21 @@ instance (HTypeable a, HTypeable b, HTypeable c) => HTypeable (a,b,c) where     toHType p      = Tuple [toHType a, toHType b, toHType c]                    where  (a,b,c) = p+instance (HTypeable a, HTypeable b, HTypeable c, HTypeable d) =>+         HTypeable (a,b,c,d) where+    toHType p      = Tuple [toHType a, toHType b, toHType c, toHType d]+                   where  (a,b,c,d) = p+instance (HTypeable a, HTypeable b, HTypeable c, HTypeable d, HTypeable e) =>+         HTypeable (a,b,c,d,e) where+    toHType p      = Tuple [ toHType a, toHType b, toHType c, toHType d+                           , toHType e ]+                   where  (a,b,c,d,e) = p+instance ( HTypeable a, HTypeable b, HTypeable c, HTypeable d, HTypeable e+         , HTypeable f) =>+         HTypeable (a,b,c,d,e,f) where+    toHType p      = Tuple [ toHType a, toHType b, toHType c, toHType d+                           , toHType e, toHType f ]+                   where  (a,b,c,d,e,f) = p instance (HTypeable a) => HTypeable (Maybe a) where     toHType m      = Maybe (toHType x)   where   (Just x) = m instance (HTypeable a, HTypeable b) => HTypeable (Either a b) where
src/Text/XML/HaXml/Types.hs view
@@ -135,15 +135,15 @@ data XMLDecl    = XMLDecl VersionInfo (Maybe EncodingDecl) (Maybe SDDecl)                   deriving Eq data Misc       = Comment Comment-                | PI ProcessingInstruction +                | PI ProcessingInstruction                 deriving Eq-              + type ProcessingInstruction = (PITarget,String) -type SDDecl      = Bool -type VersionInfo = String -type Comment     = String -type PITarget    = String +type SDDecl      = Bool+type VersionInfo = String+type Comment     = String+type PITarget    = String  data DocTypeDecl = DTD Name (Maybe ExternalID) [MarkupDecl]  deriving Eq data MarkupDecl  = Element  ElementDecl@@ -159,15 +159,17 @@                    deriving Eq  data Element i = Elem Name [Attribute] [Content i] deriving Eq-                                       	--  intermediate for parsing+                                        --  intermediate for parsing data ElemTag   = ElemTag Name [Attribute] type Attribute = (Name, AttValue) data Content i = CElem (Element i) i                | CString Bool CharData i-			-- ^ bool is whether whitespace is significant+                        -- ^ bool is whether whitespace is significant                | CRef Reference i                | CMisc Misc i                deriving Eq++info :: Content t -> t info (CElem _ i) = i info (CString _ _ i) = i info (CRef _ i) = i@@ -192,21 +194,21 @@ -- FIXME: What is TagName here? Seems to be in disagreement with XML spec. data CP = TagName Name Modifier         | Choice [CP] Modifier-        | Seq [CP] Modifier +        | Seq [CP] Modifier         deriving Eq data Modifier = None  -- ^ Just One               | Query -- ^ Zero Or One               | Star  -- ^ Zero Or More-              | Plus  -- ^ One Or More +              | Plus  -- ^ One Or More               deriving Eq data Mixed = PCDATA-           | PCDATAplus [Name] +           | PCDATAplus [Name]            deriving Eq data AttListDecl = AttListDecl Name [AttDef] deriving Eq data AttDef      = AttDef Name AttType DefaultDecl deriving Eq data AttType     = StringType                  | TokenizedType TokenizedType-                 | EnumeratedType EnumeratedType +                 | EnumeratedType EnumeratedType                  deriving Eq data TokenizedType = ID                    | IDREF@@ -214,21 +216,21 @@                    | ENTITY                    | ENTITIES                    | NMTOKEN-                   | NMTOKENS +                   | NMTOKENS                    deriving Eq data EnumeratedType = NotationType NotationType-                    | Enumeration Enumeration +                    | Enumeration Enumeration                     deriving Eq-type NotationType   = [Name]	-- nonempty list-type Enumeration    = [NmToken]	-- nonempty list+type NotationType   = [Name]    -- nonempty list+type Enumeration    = [NmToken] -- nonempty list data DefaultDecl    = REQUIRED                     | IMPLIED-                    | DefaultTo AttValue (Maybe FIXED) +                    | DefaultTo AttValue (Maybe FIXED)                     deriving Eq data FIXED          = FIXED deriving Eq  data ConditionalSect = IncludeSect IncludeSect-                     | IgnoreSect IgnoreSect +                     | IgnoreSect IgnoreSect                      deriving Eq type IncludeSect = [ExtSubsetDecl] type IgnoreSect  = [IgnoreSectContents]@@ -236,19 +238,19 @@ data IgnoreSectContents = IgnoreSectContents Ignore [(IgnoreSectContents,Ignore)]  deriving Eq  data Reference    = RefEntity EntityRef-                  | RefChar CharRef +                  | RefChar CharRef                   deriving (Eq,Show)-type EntityRef    = Name +type EntityRef    = Name type CharRef      = Int-type PEReference  = Name +type PEReference  = Name  data EntityDecl   = EntityGEDecl GEDecl-                  | EntityPEDecl PEDecl +                  | EntityPEDecl PEDecl                   deriving Eq data GEDecl       = GEDecl Name EntityDef deriving Eq data PEDecl       = PEDecl Name PEDef deriving Eq-data EntityDef    = DefEntityValue EntityValue -                  | DefExternalID ExternalID (Maybe NDataDecl) +data EntityDef    = DefEntityValue EntityValue+                  | DefExternalID ExternalID (Maybe NDataDecl)                   deriving Eq data PEDef        = PEDefEntityValue EntityValue                   | PEDefExternalID ExternalID deriving (Eq,Show)@@ -264,16 +266,16 @@ newtype PublicID     = PUBLICID PubidLiteral deriving Eq newtype EncodingDecl = EncodingDecl String deriving Eq -type Name     = String		 -- non-empty string-type Names    = [Name]		 -- non-empty list-type NmToken  = String		 -- non-empty string-type NmTokens = [NmToken]	 -- non-empty list+type Name     = String           -- non-empty string+type Names    = [Name]           -- non-empty list+type NmToken  = String           -- non-empty string+type NmTokens = [NmToken]        -- non-empty list  data AttValue    = AttValue [Either String Reference] deriving Eq instance Show AttValue where   show (AttValue v) = concatMap decode v     where-      decode (Left  v)               = v+      decode (Left  w)               = w       decode (Right (RefEntity ent)) = "&"++ent++";"       decode (Right (RefChar cref))  = "&"++show cref++";" @@ -283,7 +285,7 @@         | EVRef Reference  deriving (Eq,Show) newtype PubidLiteral  = PubidLiteral String deriving (Eq,Show) newtype SystemLiteral = SystemLiteral String deriving (Eq,Show)-type CharData         = String +type CharData         = String type CDSect           = CharData  instance Eq ElemTag where
src/Text/XML/HaXml/Validate.hs view
@@ -220,6 +220,7 @@      choice elem ns cps =  -- return only those parses that don't give any errors         [ rem | ([],rem) <- map (\cp-> checkCP elem (definite cp) ns) cps ]+        ++ [ ns | all possEmpty cps ]         where definite (TagName n Query)  = TagName n None               definite (Choice cps Query) = Choice cps None               definite (Seq cps Query)    = Seq cps None@@ -227,6 +228,11 @@               definite (Choice cps Star)  = Choice cps Plus               definite (Seq cps Star)     = Seq cps Plus               definite x                  = x+              possEmpty (TagName _ mod)   = mod `Prelude.elem` [Query,Star]+              possEmpty (Choice cps None) = all possEmpty cps+              possEmpty (Choice _ mod)    = mod `Prelude.elem` [Query,Star]+              possEmpty (Seq cps None)    = all possEmpty cps+              possEmpty (Seq _ mod)       = mod `Prelude.elem` [Query,Star]     sequence elem ns cps =  -- accumulate errors down the sequence         foldl (\(es,ns) cp-> let (es',ns') = checkCP elem cp ns                              in (es++es', ns'))
src/Text/XML/HaXml/XmlContent.hs view
@@ -1,4 +1,5 @@-{-# OPTIONS -fglasgow-exts #-}+{-# LANGUAGE ExistentialQuantification #-}+ -- | The class 'XmlContent' is a kind of replacement for Read and Show: --   it provides conversions between a generic XML tree representation --   and your own more specialised typeful Haskell data trees.@@ -23,7 +24,7 @@ --   The functions 'hGetXml' and 'hPutXml' do the conversion to and from --   the given file handles. --   (See the type signatures.)---  +--  module Text.XML.HaXml.XmlContent   ( -- * Re-export the relevant set of generic XML document type definitions@@ -31,7 +32,7 @@   , Element(..)   , ElemTag(..)   , Content(..)-  , Attribute(..)+  , Attribute()   , AttValue(..)   , Prolog(..)   , Reference(..)@@ -54,7 +55,7 @@   , definiteA, defaultA, possibleA, fromAttrToStr, toAttrFrStr   , Defaultable(..)   , str2attr, attr2str, attval-  , catMaybes	-- re-exported from Maybe+  , catMaybes   -- re-exported from Maybe   -- * Whole-document conversion functions   , toXml, fromXml   , readXml, showXml, fpsShowXml@@ -70,8 +71,8 @@  import IO import Maybe (catMaybes)-import Char  (chr, ord, isSpace)-import List  (intersperse, isPrefixOf, isSuffixOf, partition)+import Char  (chr, isSpace)+import List  (isPrefixOf, isSuffixOf)  import Text.PrettyPrint.HughesPJ (render) import qualified Text.XML.HaXml.Pretty as PP@@ -80,7 +81,7 @@ import Text.XML.HaXml.TypeMapping import Text.XML.HaXml.Posn     (Posn, posInNewCxt) import Text.XML.HaXml.Pretty   (document)-import Text.XML.HaXml.Parse    (xmlParse, fst3)+import Text.XML.HaXml.Parse    (xmlParse) import Text.XML.HaXml.Verbatim (Verbatim(verbatim)) import qualified Text.XML.HaXml.ByteStringPP as FPS (document) import qualified Data.ByteString.Lazy.Char8 as FPS@@ -94,7 +95,8 @@ debug :: a -> String -> a v `debug` s = trace s v #else-v `debug` s = v+debug :: t -> t1 -> t+v `debug` _ = v #endif  @@ -115,7 +117,7 @@ mkElemC :: String -> [Content ()] -> Content () mkElemC x cs = CElem (Elem x [] cs) () --- | Turn a simple string into XML text. +-- | Turn a simple string into XML text. toText :: String -> [Content ()] toText s = [CString False s ()] @@ -125,9 +127,9 @@ toCData s = [CString True s ()] ------------------------------------------------------------------------ -	-- probably want to write DTD separately from value, and have-	-- easy ways to combine DTD + value into a document, or write-	-- them to separate files.+        -- probably want to write DTD separately from value, and have+        -- easy ways to combine DTD + value into a document, or write+        -- them to separate files.  -- | Read an XML document from a file and convert it to a fully-typed --   Haskell value.@@ -135,7 +137,7 @@ fReadXml fp = do     f <- ( if fp=="-" then return stdin            else openFile fp ReadMode )-    x <- hGetContents f +    x <- hGetContents f     let (Document _ _ y _) = xmlParse fp x         y' = CElem y (posInNewCxt fp Nothing)     either fail return (fst (runParser parseContents [y']))@@ -206,7 +208,7 @@ -- | Read a fully-typed XML document from a file handle. hGetXml :: XmlContent a => Handle -> IO a hGetXml h = do-    x <- hGetContents h +    x <- hGetContents h     let (Document _ _ y _) = xmlParse "file handle" x     either fail return            (fst (runParser parseContents@@ -240,7 +242,7 @@ content word = next `adjustErr` (++" when expecting "++word)  -- | Get the next content element, checking that it has one of the required---   tags, using the given matching function. +--   tags, using the given matching function. --   (Skips over comments and whitespace, rejects text and refs. --    Also returns position of element.) posnElementWith :: (String->String->Bool) -> [String]@@ -254,7 +256,7 @@                                            ++formatted tags++"\nat "++show pos)           CString b s pos               | not b && all isSpace s -> posnElementWith match tags-							-- ignore blank space+                                                        -- ignore blank space               | otherwise -> fail ("Found text content, but expected "                                   ++formatted tags++"\ntext is: "++s                                   ++"\nat "++show pos)@@ -265,7 +267,7 @@     }   where     formatted [t]  = "a <"++t++">"-    formatted tags = "one of"++ concatMap (\t->" <"++t++">") tags+    formatted tgs = "one of"++ concatMap (\t->" <"++t++">") tgs  -- | A specialisation of @posnElementWith (==)@. posnElement :: [String] -> XMLParser (Posn, Element Posn)@@ -275,12 +277,12 @@ --   tags.  (Skips over comments and whitespace, rejects text and refs.) element :: [String] -> XMLParser (Element Posn) element tags = fmap snd (posnElement tags)-				`debug` ("Element: "++unwords tags++"\n")+                                `debug` ("Element: "++unwords tags++"\n")  -- | Like element, only permits a more flexible match against the tagname. elementWith :: (String->String->Bool) -> [String] -> XMLParser (Element Posn) elementWith match tags = fmap snd (posnElementWith match tags)-				`debug` ("Element: "++unwords tags++"\n")+                                `debug` ("Element: "++unwords tags++"\n")  -- | Run an XMLParser on the contents of the given element (i.e. not on the --   current monadic content sequence), checking that the contents are@@ -291,11 +293,11 @@     case runParser p cs of         (Left msg, _) -> fail msg         (Right x, []) -> return x-        (Right x, cs@(c:_))-            | all onlyMisc cs -> return x+        (Right x, ds@(d:_))+            | all onlyMisc ds -> return x             | otherwise       -> fail ("Too many elements inside <"++e++"> at\n"-                                      ++show (info c)++"\n"-                                      ++"Found excess: "++verbatim c)+                                      ++show (info d)++"\n"+                                      ++"Found excess: "++verbatim d)   where onlyMisc (CMisc _ _) = True         onlyMisc (CString False s _) | all isSpace s = True         onlyMisc _ = False@@ -338,7 +340,7 @@ choice :: XmlContent a => (a -> b) -> XMLParser b -> XMLParser b choice cons (P other) =     P (\cs-> case runParser parseContents cs of-                 (Left msg, _)  -> other cs+                 (Left _, _)  -> other cs                  (Right x, cs') -> (Right (cons x), cs'))  --choice cons other = fmap cons parseContents `onFail` other@@ -348,7 +350,7 @@ --   care of that for us. definite :: XmlContent a => XMLParser a -> String -> String -> XMLParser a definite p inner tag = P (\cs-> case runParser p cs of-                                   (Left msg, cs') -> (Left (False,msg'), cs')+                                   (Left _, cs') -> (Left (False,msg'), cs')                                    (Right x, cs')  -> (Right x,   cs'))   where msg' = "content error: expected "++inner++" inside <"++tag                ++"> element\n"@@ -391,7 +393,7 @@ instance XmlContent Bool where     toContents b   = [CElem (Elem "bool" [mkAttr "value" (show b)] []) ()]     parseContents = do { e <- element ["bool"] ; return (attval e) }-    + instance XmlContent Int where     toContents i   = [CElem (Elem "int" [mkAttr "value" (show i)] []) ()]     parseContents = do { e <- element ["int"] ; return (attval e) }@@ -399,7 +401,7 @@ instance XmlContent Integer where     toContents i   = [CElem (Elem "integer" [mkAttr "value" (show i)] []) ()]     parseContents = do { e <- element ["integer"] ; return (attval e) }-    + instance XmlContent Float where     toContents i   = [CElem (Elem "float" [mkAttr "value" (show i)] []) ()]     parseContents = do { e <- element ["float"] ; return (attval e) }@@ -439,10 +441,10 @@                      scanElements es =                         case runParser parseContents es of                             (Left msg, es') -> (Left (False,msg), es')-                            (Right x, es') ->+                            (Right y, es') ->                                 case scanElements es' of-                                    (Left msg, cs) -> (Left msg, cs)-                                    (Right xs, cs) -> (Right (x:xs), cs)+                                    (Left msg, ds) -> (Left msg, ds)+                                    (Right ys, ds) -> (Right (y:ys), ds)             (CElem (Elem e _ _) pos: cs)                    -> (Left (False                             ,"Expected a <list-...>, but found a <"++e++"> at\n"@@ -478,6 +480,47 @@         ; return (a,b,c)         } +instance (XmlContent a, XmlContent b, XmlContent c, XmlContent d) =>+         XmlContent (a,b,c,d) where+    toContents (x,y,z,t) = toContents x ++ toContents y ++ toContents z+                           ++ toContents t+    parseContents = do+        { a <- parseContents+        ; b <- parseContents+        ; c <- parseContents+        ; d <- parseContents+        ; return (a,b,c,d)+        }++instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d+         , XmlContent e ) =>+         XmlContent (a,b,c,d,e) where+    toContents (x,y,z,t,u) = toContents x ++ toContents y ++ toContents z+                             ++ toContents t ++ toContents u+    parseContents = do+        { a <- parseContents+        ; b <- parseContents+        ; c <- parseContents+        ; d <- parseContents+        ; e <- parseContents+        ; return (a,b,c,d,e)+        }++instance ( XmlContent a, XmlContent b, XmlContent c, XmlContent d+         , XmlContent e, XmlContent f ) =>+         XmlContent (a,b,c,d,e,f) where+    toContents (x,y,z,t,u,v) = toContents x ++ toContents y ++ toContents z+                               ++ toContents t ++ toContents u ++ toContents v+    parseContents = do+        { a <- parseContents+        ; b <- parseContents+        ; c <- parseContents+        ; d <- parseContents+        ; e <- parseContents+        ; f <- parseContents+        ; return (a,b,c,d,e,f)+        }+ instance (XmlContent a) => XmlContent (Maybe a) where     toContents m   = [mkElem m (maybe [] toContents m)]     parseContents = do@@ -504,7 +547,7 @@   --------------------------------------------------------------------------- Useful auxiliaries for "fromAttributes" +-- Useful auxiliaries for "fromAttributes" ------------------------------------------------------------------------  -- | If an attribute is defaultable, then it either takes the default@@ -513,7 +556,7 @@ data Defaultable a  = Default a    | NonDefault a    deriving (Eq,Show)  searchMaybe :: (a -> Maybe b) -> [a] -> Maybe b-searchMaybe f [] = Nothing+searchMaybe _ [] = Nothing searchMaybe f (x:xs) =     let fx = f x in     case fx of@@ -522,12 +565,12 @@  maybeToAttr :: (String->a->Maybe Attribute) -> String -> Maybe a                -> Maybe Attribute-maybeToAttr to n Nothing  = Nothing+maybeToAttr _ _ Nothing  = Nothing maybeToAttr to n (Just v) = to n v  defaultToAttr :: (String->a->Maybe Attribute) -> String -> Defaultable a                  -> Maybe Attribute-defaultToAttr to n (Default v)  = Nothing+defaultToAttr _ _ (Default _)  = Nothing defaultToAttr to n (NonDefault v) = to n v  definiteA :: (String->Attribute->Maybe a) -> String -> String@@ -557,8 +600,8 @@  str2attr :: String -> AttValue str2attr s =-    let f s =-          let (l,r) = span (\c-> not (elem c "\"&<>'")) s+    let f t =+          let (l,r) = span (\c-> not (elem c "\"&<>'")) t           in if null r then [Left l]              else Left l: Right (g (head r)): f (tail r)         g '"'  = RefEntity "quot"@@ -591,8 +634,8 @@     ... etc are now defined (with instances) in module OneOfN. -} --- | A type corresponding to XML's ANY contentspec. ---   It is either a list of unconverted xml 'Content' +-- | A type corresponding to XML's ANY contentspec.+--   It is either a list of unconverted xml 'Content' --   or some 'XmlContent'-able value. -- -- Parsing functions (e.g. 'parseContents') will always produce 'UnConverted'.@@ -632,5 +675,5 @@     parseContents = P (\cs -> (Right (UnConverted cs), []))  ---------------------------------------------------------------------------  +-- ------------------------------------------------------------------------
src/tools/Xtract.hs view
@@ -16,6 +16,7 @@ import Text.XML.HaXml.Pretty        (content) import Text.XML.HaXml.Html.Generate (htmlprint) import Text.XML.HaXml.Escape        (xmlEscapeContent,stdXmlEscaper)+import Text.XML.HaXml.Util          (docContent)  escape = xmlEscapeContent stdXmlEscaper @@ -38,19 +39,18 @@     in --  findcontents >>= \cs-> --  ( hPutStrLn stdout . render . vcat---  . map (vcat . map content . selection . getElem)) cs+--  . map (vcat . map content . selection . docContent)) cs     mapM_ (\x-> do c <- (if x=="-" then getContents else readFile x)                    ( if isHTML x then                           hPutStrLn stdout . render . htmlprint                           . xtract (map toLower) pattern-                          . getElem x . htmlParse x+                          . docContent (posInNewCxt x Nothing) . htmlParse x                      else hPutStrLn stdout . render . vcat . map (format . esc)                           . xtract id pattern-                          . getElem x . xmlParse x) c+                          . docContent (posInNewCxt x Nothing) . xmlParse x) c                    hFlush stdout)           files -getElem x (Document _ _ e _) = CElem e (posInNewCxt x Nothing) isHTML x = ".html" `isSuffixOf` x  ||  ".htm"  `isSuffixOf` x  format [] = empty