diff --git a/Data-Parser.html b/Data-Parser.html
new file mode 100644
--- /dev/null
+++ b/Data-Parser.html
@@ -0,0 +1,504 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Data.Parser</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+><SCRIPT TYPE="text/javascript"
+>window.onload = function () {setSynopsis("mini_Data-Parser.html")};</SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Data.Parser</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>A Parsec parser for the refSerialize monad. See package Parsec. all the functions have the same meaning
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+>  <A NAME="t:ST"
+><A NAME="t%3AST"
+></A
+></A
+><B
+>ST</B
+> a </TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="section4"
+>Constructors</TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+><A NAME="v:ST"
+><A NAME="v%3AST"
+></A
+></A
+><B
+>ST</B
+> (<A HREF="Data-Serialize.html#t%3AStat"
+>Stat</A
+> -&gt; Either <A HREF="Data-Serialize.html#t%3AError"
+>Error</A
+> (<A HREF="Data-Serialize.html#t%3AStat"
+>Stat</A
+>, a))</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section4"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:ST')" ALT="show/hide"
+> Instances</TD
+></TR
+><TR
+><TD CLASS="body"
+><DIV ID="i:ST" STYLE="display:block;"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+>Monad <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>MonadPlus <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+></TD
+></TR
+></TABLE
+></DIV
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>&lt;?&gt;</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>&lt;|&gt;</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:char"
+><A NAME="v%3Achar"
+></A
+></A
+><B
+>char</B
+> :: Char -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> Char</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>anyChar</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>string</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>upper</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>space</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>digit</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:sepBy"
+><A NAME="v%3AsepBy"
+></A
+></A
+><B
+>sepBy</B
+> ::  <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> sep -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> [a]</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>between</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>choice</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>option</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>notFollowedBy</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:many"
+><A NAME="v%3Amany"
+></A
+></A
+><B
+>many</B
+> ::  <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> [a]</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>bool</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>charLiteral</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>stringLiteral</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>natural</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>integer</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>float</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>naturalOrFloat</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>decimal</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>hexadecimal</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>octal</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>symbol</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>lexeme</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>whiteSpace</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>parens</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>braces</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>angles</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>brackets</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>semi</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>comma</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>colon</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>dot</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>semiSep</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>semiSep1</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>commaSep</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>commaSep1</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 2.4.2</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/Data-RefSerialize.html b/Data-RefSerialize.html
new file mode 100644
--- /dev/null
+++ b/Data-RefSerialize.html
@@ -0,0 +1,770 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Data.RefSerialize</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+><SCRIPT TYPE="text/javascript"
+>window.onload = function () {setSynopsis("mini_Data-RefSerialize.html")};</SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Data.RefSerialize</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Read, Show and Data.Binary do not check for repeated references to the same address.
+     As a result, the data is duplicated when seri&lt;alized. This is a waste of space in the filesystem
+     and  also a waste of serialization time. but the worst consequence is that, when the serialized data is read,
+     it allocates multiple copies for the same object when referenced multiple times. Because multiple referenced
+     data is very typical in a pure language such is Haskell, this means that the resulting data loose the beatiful
+     economy of space and processing time that referential transparency permits.
+</P
+><P
+>Here comes a brief tutorial:
+</P
+><PRE
+>runW applies showp, the serialization parser of the instance Int for the RefSerialize class
+
+Data.RefSerialize&gt;let x= 5 :: Int
+    Data.RefSerialize&gt;runW $ showp x
+    <A HREF="5.html"
+>5</A
+>
+
+every instance of Read and Show is an instance of RefSerialize. for how to construct showp and readp parsers, see the demo.hs
+
+rshowp is derived from showp, it labels the serialized data with a variable name
+
+Data.RefSerialize&gt;runW $ rshowp x
+    <A HREF=" v8 where {v8= 5; }.html"
+> v8 where {v8= 5; }</A
+>
+
+Data.RefSerialize&gt;runW $ rshowp [2::Int,3::Int]
+    <A HREF=" v6 where {v6= [ v9,  v10]; v9= 2; v10= 3; }.html"
+> v6 where {v6= [ v9,  v10]; v9= 2; v10= 3; }</A
+>
+
+while showp does a normal show serialization
+
+Data.RefSerialize&gt;runW $ showp [x,x]
+    <A HREF="[5, 5].html"
+>[5, 5]</A
+>
+
+rshowp variables are serialized memory references: no piece of data that point to the same addrees is serialized but one time
+
+Data.RefSerialize&gt;runW $ rshowp [x,x]
+    <A HREF=" v9 where {v6= 5; v9= [ v6, v6]; }.html"
+> v9 where {v6= 5; v9= [ v6, v6]; }</A
+>
+
+<A HREF="this happens recursively.html"
+>this happens recursively</A
+>
+
+Data.RefSerialize&gt;let xs= [x,x] in str = runW $ rshowp [xs,xs]
+    Data.RefSerialize&gt;str
+    <A HREF=" v8 where {v8= [ v10, v10]; v9= 5; v10= [ v9, v9]; }.html"
+> v8 where {v8= [ v10, v10]; v9= 5; v10= [ v9, v9]; }</A
+>
+
+the rshowp serialized data is read with rreadp. The showp serialized data is read by readp
+
+Data.RefSerialize&gt;let xss= runR rreadp str :: [[Int]]
+    Data.RefSerialize&gt;print xss
+    [[5,5],[5,5]]
+
+this is the deserialized data
+
+the deserialized data keep the references!! pointers are restored! That is the whole point!
+
+Data.RefSerialize&gt;varName xss !! 0 == varName xss !! 1
+    True
+
+rShow= runW rshowp
+    rRead= runR rreadp
+
+Data.RefSerialize&gt;rShow x
+    <A HREF=" v11 where {v11= 5; }.html"
+> v11 where {v11= 5; }</A
+>
+
+In the definition of a referencing parser non referencing parsers can be used and viceversa. Use a referencing parser
+    when the piece of data is being referenced many times inside the serialized data.
+
+by default the referencing parser is constructed by:
+
+rshowp= insertVar showp
+    rreadp= readVar readp
+    but this can be redefined. See for example the instance of [] in RefSerialize.hs
+
+This is an example of a showp parser for a simple data structure.
+
+data S= S Int Int deriving ( Show, Eq)
+
+instance  Serialize S  where
+        showp (S x y)= do
+                        xs &lt;- rshowp x  -- rshowp parsers can be inside showp parser
+                        ys &lt;- rshowp y
+                        return $ <A HREF="S .html"
+>S </A
+>++xs++<A HREF=" .html"
+> </A
+>++ys
+
+readp =  do
+                        symbol <A HREF="S.html"
+>S</A
+>     -- I included a (almost) complete Parsec for deserialization
+                        x &lt;- rreadp
+                        y &lt;- rreadp
+                        return $ S x y
+
+there is a mix between referencing and no referencing parser here:
+
+Data.RefSerialize&gt;putStrLn $ runW $ showp $ S x x
+    S  v23 v23 where {v23= 5; }</PRE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+>module <A HREF="Data-Parser.html"
+>Data.Parser</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>class</SPAN
+>  <A HREF="#t%3ASerialize"
+>Serialize</A
+> c  <SPAN CLASS="keyword"
+>where</SPAN
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Ashowp"
+>showp</A
+> :: c -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Areadp"
+>readp</A
+> :: <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c</TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Arshowp"
+>rshowp</A
+> :: c -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Arreadp"
+>rreadp</A
+> :: <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ArShow"
+>rShow</A
+> :: <A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> c =&gt; c -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ArRead"
+>rRead</A
+> :: <A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> c =&gt; String -&gt; c</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AinsertVar"
+>insertVar</A
+> ::  (a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String) -&gt; a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AreadVar"
+>readVar</A
+> :: <A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> c =&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AvarName"
+>varName</A
+> ::  a -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ArunR"
+>runR</A
+> ::  <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> a -&gt; String -&gt; a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ArunW"
+>runW</A
+> :: <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AreadHexp"
+>readHexp</A
+> :: (Num a, Integral a) =&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AshowHexp"
+>showHexp</A
+> :: (Num a, Integral a) =&gt; a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Data-Parser.html"
+>Data.Parser</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>class</SPAN
+>  <A NAME="t:Serialize"
+><A NAME="t%3ASerialize"
+></A
+></A
+><B
+>Serialize</B
+> c  <SPAN CLASS="keyword"
+>where</SPAN
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="section4"
+>Methods</TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A NAME="v:showp"
+><A NAME="v%3Ashowp"
+></A
+></A
+><B
+>showp</B
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+>:: c</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="arg"
+>-&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+><TD CLASS="rdoc"
+>shows the content of a expression, must be  defined bu the user
+</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:readp"
+><A NAME="v%3Areadp"
+></A
+></A
+><B
+>readp</B
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+>:: <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c</TD
+><TD CLASS="rdoc"
+>read the content of a expression, must be user defined
+</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:rshowp"
+><A NAME="v%3Arshowp"
+></A
+></A
+><B
+>rshowp</B
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+>:: c</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="arg"
+>-&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+><TD CLASS="rdoc"
+>insert a reference (a variable in the where section).   <TT
+>rshowp  = insertVar  showp </TT
+> -- default definition
+</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:rreadp"
+><A NAME="v%3Arreadp"
+></A
+></A
+><B
+>rreadp</B
+> :: <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="section4"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Serialize')" ALT="show/hide"
+> Instances</TD
+></TR
+><TR
+><TD CLASS="body"
+><DIV ID="i:Serialize" STYLE="display:block;"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> String</TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> a =&gt; <A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> ([] a)</TD
+></TR
+></TABLE
+></DIV
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:rShow"
+><A NAME="v%3ArShow"
+></A
+></A
+><B
+>rShow</B
+> :: <A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> c =&gt; c -&gt; String</TD
+></TR
+><TR
+><TD CLASS="doc"
+>use the rshowp parser to serialize the object
+ <TT
+> rShow c= runW  $  rshowp c</TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:rRead"
+><A NAME="v%3ArRead"
+></A
+></A
+><B
+>rRead</B
+> :: <A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> c =&gt; String -&gt; c</TD
+></TR
+><TR
+><TD CLASS="doc"
+>deserialize  trough the rreadp parser
+ <TT
+> rRead str= runR rreadp $ str</TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:insertVar"
+><A NAME="v%3AinsertVar"
+></A
+></A
+><B
+>insertVar</B
+> ::  (a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String) -&gt; a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+></TR
+><TR
+><TD CLASS="doc"
+>insert a variable at this position. The expression value is inserted the where part if it is not already
+ created. If the address of this object being parsed correspond with an address already parsed and
+ it is in the where section, then the same variable name is used
+   <TT
+>runW showp (1::Int)                                -&gt; <A HREF="1.html"
+>1</A
+>
+   runW (insertVar showp) (1::Int)                -&gt;  v1 where { v1=1}
+   runW (insertVar showp) [(1::Int) ,1]        -&gt; [v1.v1] where { v1=1}</TT
+>
+   This is useful when the object is referenced many times
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:readVar"
+><A NAME="v%3AreadVar"
+></A
+></A
+><B
+>readVar</B
+> :: <A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> c =&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c</TD
+></TR
+><TR
+><TD CLASS="doc"
+>deserialize a variable serialized with insertVar. Memory references are restored
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:varName"
+><A NAME="v%3AvarName"
+></A
+></A
+><B
+>varName</B
+> ::  a -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:runR"
+><A NAME="v%3ArunR"
+></A
+></A
+><B
+>runR</B
+> ::  <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> a -&gt; String -&gt; a</TD
+></TR
+><TR
+><TD CLASS="doc"
+>deserialize the string with the parser
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:runW"
+><A NAME="v%3ArunW"
+></A
+></A
+><B
+>runW</B
+> :: <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String -&gt; String</TD
+></TR
+><TR
+><TD CLASS="doc"
+>serialize x with the parser
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:readHexp"
+><A NAME="v%3AreadHexp"
+></A
+></A
+><B
+>readHexp</B
+> :: (Num a, Integral a) =&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:showHexp"
+><A NAME="v%3AshowHexp"
+></A
+></A
+><B
+>showHexp</B
+> :: (Num a, Integral a) =&gt; a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 2.4.2</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/Data-Serialize.html b/Data-Serialize.html
new file mode 100644
--- /dev/null
+++ b/Data-Serialize.html
@@ -0,0 +1,264 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Data.Serialize</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+><SCRIPT TYPE="text/javascript"
+>window.onload = function () {setSynopsis("mini_Data-Serialize.html")};</SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Data.Serialize</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A NAME="t:MFun"
+><A NAME="t%3AMFun"
+></A
+></A
+><B
+>MFun</B
+> = Char</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A NAME="t:VarName"
+><A NAME="t%3AVarName"
+></A
+></A
+><B
+>VarName</B
+> = String</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A NAME="t:ShowF"
+><A NAME="t%3AShowF"
+></A
+></A
+><B
+>ShowF</B
+> = String</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A NAME="t:Context"
+><A NAME="t%3AContext"
+></A
+></A
+><B
+>Context</B
+> = Map Int (<A HREF="Data-Serialize.html#t%3AMFun"
+>MFun</A
+>, <A HREF="Data-Serialize.html#t%3AShowF"
+>ShowF</A
+>)</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+>  <A NAME="t:Error"
+><A NAME="t%3AError"
+></A
+></A
+><B
+>Error</B
+>  </TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="section4"
+>Constructors</TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+><A NAME="v:Error"
+><A NAME="v%3AError"
+></A
+></A
+><B
+>Error</B
+> String</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+>  <A NAME="t:Stat"
+><A NAME="t%3AStat"
+></A
+></A
+><B
+>Stat</B
+>  </TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="section4"
+>Constructors</TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+><A NAME="v:Stat"
+><A NAME="v%3AStat"
+></A
+></A
+><B
+>Stat</B
+> (<A HREF="Data-Serialize.html#t%3AContext"
+>Context</A
+>, String, String)</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:varName"
+><A NAME="v%3AvarName"
+></A
+></A
+><B
+>varName</B
+> ::  a -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:numVar"
+><A NAME="v%3AnumVar"
+></A
+></A
+><B
+>numVar</B
+> :: String -&gt; Int</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 2.4.2</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/Data/Parser.hs b/Data/Parser.hs
--- a/Data/Parser.hs
+++ b/Data/Parser.hs
@@ -1,3 +1,5 @@
+{- |  A Parsec parser for the refSerialize monad. See package Parsec. all the functions have the same meaning
+-}
 module Data.Parser( ST(..),(<?>),(<|>),char,anyChar, string, upper, space, digit
                  , sepBy, between, choice, option, notFollowedBy, many
                  , bool
@@ -11,12 +13,12 @@
                  , decimal          -- :: ST Integer
                  , hexadecimal      -- :: ST Integer
                  , octal            -- :: ST Integer
-            
+
                  , symbol           -- :: String -> ST String
                  , lexeme           -- :: forall a. ST a -> ST a
-                 , whiteSpace       -- :: ST ()     
-              
-                 , parens           -- :: forall a. ST a -> ST a 
+                 , whiteSpace       -- :: ST ()
+
+                 , parens           -- :: forall a. ST a -> ST a
                  , braces           -- :: forall a. ST a -> ST a
                  , angles           -- :: forall a. ST a -> ST a
                  , brackets         -- :: forall a. ST a -> ST a
@@ -29,10 +31,10 @@
                  , semiSep          -- :: forall a . ST a -> ST [a]
                  , semiSep1         -- :: forall a . ST a -> ST [a]
                  , commaSep         -- :: forall a . ST a -> ST [a]
-                 , commaSep1        -- :: forall a . ST a -> ST [a]                
-                    
-                 
-                 
+                 , commaSep1        -- :: forall a . ST a -> ST [a]
+
+
+
                  ) where
 
 import Control.Monad
@@ -41,30 +43,30 @@
 import Data.Serialize
 
 
-data ST a= ST(Stat-> Either Error (Stat , a) ) 
+data ST a= ST(Stat-> Either Error (Stat , a) )
 
---monadic serialization/deserialization
+-- | monadic serialization & deserialization
 instance  Monad ST where
-    return  x = ST (\s -> Right (s, x)) 
+    return  x = ST (\s -> Right (s, x))
     ST g >>= f = ST (\s ->
-                      
+
                        case g s of
                         Right (s', x)->
-                          let 
-                              ST fun  = f x 
+                          let
+                              ST fun  = f x
                           in  case  fun s' of
                                left@(Left msg) -> left
                                rigth->  rigth
-                              
+
                         Left msg -> Left msg
-                      
+
                     )
-                    
+
 instance MonadPlus ST where
   mzero= ST (\(Stat (a,b,c)) -> Left $ Error "an error occurred")
   mplus p1 p2   = parsecPlus p1 p2
 
-infixr 1 <|>    
+infixr 1 <|>
 (<|>) = parsecPlus
 infix  0 <?>
 
@@ -73,7 +75,7 @@
 parsecPlus :: ST a -> ST a -> ST a
 parsecPlus (ST p1) (ST p2)
     = ST (\state ->
-        case (p1 state) of        
+        case (p1 state) of
           Left (Error s) -> case (p2 state) of
                                  Left (Error s') -> Left $ Error ( s++ "\n"++ s')
                                  consumed-> consumed
@@ -82,28 +84,28 @@
 
 
 
-label :: ST a -> String -> ST a    
+label :: ST a -> String -> ST a
 label p msg
   = labels p [msg]
 
 labels :: ST a -> [String] -> ST a
 labels (ST p) msgs
-    = ST (\state -> 
+    = ST (\state ->
         case (p state) of
           Left(Error reply) -> Left $  Error ( reply ++concatMap ("\n in "++) msgs)
-                           
+
           other       -> other
       )
 
-char :: Char -> ST Char          
-   
-char c= ST(\(Stat(cs,s,v)) ->  
+char :: Char -> ST Char
+
+char c= ST(\(Stat(cs,s,v)) ->
    if null s then Left (Error $ "unexpected end of input")
-   else if c== head s then Right(Stat(cs,tail s,v), c) 
+   else if c== head s then Right(Stat(cs,tail s,v), c)
    else Left (Error ( "char "++ c:" not match " ++ '\"':s++"\"" )))
-   
-                           
-anyChar = ST(\(Stat(cs,s,v)) ->   
+
+
+anyChar = ST(\(Stat(cs,s,v)) ->
     if null s then Left (Error $ "unexpected end of input")
     else Right(Stat(cs,tail s,v), head s))
 
@@ -112,40 +114,40 @@
      else if bf heads then  Right(Stat(cs,tail s,v), heads)
      else Left (Error ( "satisfy  not matching condition in " ++ '\"':s++"\"" )))
 
-                                         
+
 upper = ST(\(Stat(cs,s,v)) ->  let  heads= head s in
      if null s then Left (Error $ "unexpected end of input")
      else if isUpper (head s) then  Right(Stat(cs,tail s,v), head s)
      else Left (Error ( "upper  not matching condition in " ++ '\"':s++"\"" )))
 
-     
+
 space =ST(\(Stat(cs,s,v)) ->  let  heads= head s in
      if null s then Left (Error $ "unexpected end of input")
-     else if isSpace heads then Right(Stat(cs,tail s,v), heads) 
+     else if isSpace heads then Right(Stat(cs,tail s,v), heads)
      else Left (Error ( "expected space at the head of " ++ s )))
-      
-                                 
-digit1 l1 l2= ST(\(Stat(cs,s,v)) -> let c= head s in  if c >= l1 && c <= l2  then Right(Stat(cs,tail s,v), c) 
+
+
+digit1 l1 l2= ST(\(Stat(cs,s,v)) -> let c= head s in  if c >= l1 && c <= l2  then Right(Stat(cs,tail s,v), c)
                                      else Left (Error ( "expected digit at the head of " ++ s )))
-      
-empty = ST(\(Stat(cs,s,v)) ->   if null s  then Right(Stat(cs, s,v), ()) 
-                                     else Left (Error ( "expected empty list" )))                               
-                               
+
+empty = ST(\(Stat(cs,s,v)) ->   if null s  then Right(Stat(cs, s,v), ())
+                                     else Left (Error ( "expected empty list" )))
+
 octDigit= digit1 '0' '7'
 
 digit= digit1 '0' '9'
 
-hexDigit= ST(\(Stat(cs,s,v)) ->  let c= head s in if c >= '0' && c <= '9'  || c >= 'a' && c<='f'  || c >= 'A' && c <= 'F'  then Right(Stat(cs,tail s,v), c) 
+hexDigit= ST(\(Stat(cs,s,v)) ->  let c= head s in if c >= '0' && c <= '9'  || c >= 'a' && c<='f'  || c >= 'A' && c <= 'F'  then Right(Stat(cs,tail s,v), c)
                                      else Left (Error ( "expected space at the head of " ++ s )))
-                               
-oneOf xs= ST(\(Stat(cs,s,v)) -> let c= head s in if c `elem` xs then Right(Stat(cs,tail s,v), c) 
+
+oneOf xs= ST(\(Stat(cs,s,v)) -> let c= head s in if c `elem` xs then Right(Stat(cs,tail s,v), c)
                                      else Left (Error ( "expected digit at the head of " ++ s )))
 
-noneOf xs= ST(\(Stat(cs,s,v)) -> let c= head s in if not $ c `elem` xs then Right(Stat(cs,tail s,v), c) 
+noneOf xs= ST(\(Stat(cs,s,v)) -> let c= head s in if not $ c `elem` xs then Right(Stat(cs,tail s,v), c)
                                      else Left (Error ( "expected digit at the head of " ++ s )))
 
 try p= p
-                             
+
 unexpected msg
     = ST (\state -> Left (Error $ msg++ "unexpected"))
 
@@ -157,16 +159,16 @@
                         }
                         <?> "sepBy "
 between open close p
-                    = do{ open; x <- p; close; return x } 
-                   
+                    = do{ open; x <- p; close; return x }
+
 choice ps           = foldr (<|>) mzero ps <?> "choice "
 
-option x p          = p <|> return x 
-             
-             
+option x p          = p <|> return x
+
+
 notFollowedBy p     = try (do{ c <- p; unexpected (show [c]) }
                            <|> return ()
-                          )  
+                          )
 
                           <?> "notFollowedBy "
 
@@ -174,7 +176,7 @@
 
 skipMany p          = scan
                     where
-                      scan  = do{ p; scan } <|> return ()                  
+                      scan  = do{ p; scan } <|> return ()
 
 
 manyTill p end      = scan
@@ -184,12 +186,12 @@
                               do{ x <- p; xs <- scan; return (x:xs) }
 
 
-string ""=  return ""              
-string ys@(x:xs)= do 
+string ""=  return ""
+string ys@(x:xs)= do
                   char x
                   string xs
                   return ys
-                  <?> "string "++ys 
+                  <?> "string "++ys
 
 
 bool = lexeme ( do{ symbol "True" ; return True} <|> do{ symbol "False" ; return False})   <?> "Bool"
@@ -197,19 +199,19 @@
 many :: ST a -> ST [a]
 many p = many1 p <|> return []
 many1 :: ST a -> ST [a]
-many1 p = do {a <- p; as <- many p; return (a:as)}   
+many1 p = do {a <- p; as <- many p; return (a:as)}
 
 
 --from Token.hs
-    -----------------------------------------------------------
-    -- Bracketing
-    -----------------------------------------------------------
+-----------------------------------------------------------
+-- Bracketing
+-----------------------------------------------------------
 parens p        = between (symbol "(") (symbol ")") p <?> "parens "
 braces p        = between (symbol "{") (symbol "}") p <?> "braces "
 angles p        = between (symbol "<") (symbol ">") p <?> "angles "
 brackets p      = between (symbol "[") (symbol "]") p <?> "brackets "
 
-semi            = symbol ";" 
+semi            = symbol ";"
 comma           = symbol ","
 dot             = symbol "."
 colon           = symbol ":"
@@ -225,12 +227,12 @@
 -- Chars & Strings
 -----------------------------------------------------------
 -- charLiteral :: ST Char
-charLiteral     = lexeme (between (char '\'') 
+charLiteral     = lexeme (between (char '\'')
                                 (char '\'' <?> "end of character")
                                 characterChar )
                 <?> "character"
 
-characterChar   = charLetter <|> charEscape 
+characterChar   = charLetter <|> charEscape
                 <?> "literal character"
 
 charEscape      = do{ char '\\'; escapeCode }
@@ -240,18 +242,18 @@
 
 -- stringLiteral :: ST String
 stringLiteral   = lexeme (
-                do{ str <- between (char '"')                   
+                do{ str <- between (char '"')
                                         (char '"' <?> "end of string")
-                                        (many stringChar) 
+                                        (many stringChar)
                 ; return (foldr (maybe id (:)) "" str)
                 }
                 <?> "literal string")
 
 -- stringChar :: ST (Maybe Char)
 stringChar      =   do{ c <- stringLetter; return (Just c) }
-                <|> stringEscape 
+                <|> stringEscape
                 <?> "string character"
-        
+
 stringLetter    = satisfy (\c -> (c /= '"') && (c /= '\\') && (c > '\026'))
 
 stringEscape    = do{ char '\\'
@@ -259,14 +261,14 @@
                         <|> do{ escapeEmpty; return Nothing }
                         <|> do{ esc <- escapeCode; return (Just esc) }
                 }
-                
+
 escapeEmpty     = char '&'
 escapeGap       = do{ many1 space
                 ; char '\\' <?> "end of string gap"
                 }
-                
-                
-                
+
+
+
 -- escape codes
 escapeCode      = charEsc <|> charNum <|> charAscii <|> charControl
                 <?> "escape code"
@@ -277,8 +279,8 @@
                 ; return (toEnum (fromEnum code - fromEnum 'A'))
                 }
 
--- charNum :: ST Char                    
-charNum         = do{ code <- decimal 
+-- charNum :: ST Char
+charNum         = do{ code <- decimal
                                 <|> do{ char 'o'; number 8 octDigit }
                                 <|> do{ char 'x'; number 16 hexDigit }
                 ; return (toEnum (fromInteger code))
@@ -287,7 +289,7 @@
 charEsc         = choice (map parseEsc escMap)
                 where
                 parseEsc (c,code)     = do{ char c; return code }
-                
+
 charAscii       = choice (map parseAscii asciiMap)
                 where
                 parseAscii (asc,code) = try (do{ string asc; return code })
@@ -295,7 +297,7 @@
 
 -- escape code tables
 escMap          = zip ("abfnrtv\\\"\'") ("\a\b\f\n\r\t\v\\\"\'")
-asciiMap        = zip (ascii3codes ++ ascii2codes) (ascii3 ++ ascii2) 
+asciiMap        = zip (ascii3codes ++ ascii2codes) (ascii3 ++ ascii2)
 
 ascii2codes     = ["BS","HT","LF","VT","FF","CR","SO","SI","EM",
                 "FS","GS","RS","US","SP"]
@@ -322,7 +324,7 @@
 
 
 -- floats
-floating        = do{ n <- decimal 
+floating        = do{ n <- decimal
                 ; fractExponent n
                 }
 
@@ -331,23 +333,23 @@
                 ; zeroNumFloat
                 }
                 <|> decimalFloat
-                
+
 zeroNumFloat    =  do{ n <- hexadecimal <|> octal
                         ; return (Left n)
                         }
                 <|> decimalFloat
                 <|> fractFloat 0
-                <|> return (Left 0)                  
-                
+                <|> return (Left 0)
+
 decimalFloat    = do{ n <- decimal
-                ; option (Left n) 
+                ; option (Left n)
                                 (fractFloat n)
                 }
 
 fractFloat n    = do{ f <- fractExponent n
                 ; return (Right f)
                 }
-                
+
 fractExponent n = do{ fract <- fraction
                 ; expo  <- option 1.0 exponent'
                 ; return ((fromInteger n + fract)*expo)
@@ -364,7 +366,7 @@
                 <?> "fraction"
                 where
                 op d f    = (f + fromIntegral (digitToInt d))/10.0
-                
+
 exponent'       = do{ oneOf "eE"
                 ; f <- sign
                 ; e <- decimal <?> "exponent"
@@ -381,10 +383,10 @@
                 ; n <- nat
                 ; return (f n)
                 }
-                
+
 -- sign            :: ST (Integer -> Integer)
-sign            =   (char '-' >> return negate) 
-                <|> (char '+' >> return id)     
+sign            =   (char '-' >> return negate)
+                <|> (char '+' >> return id)
                 <|> return id
 
 nat             = zeroNumber <|> decimal
@@ -392,9 +394,9 @@
 zeroNumber      = do{ char '0'
                 ; hexadecimal <|> octal <|> decimal <|> return 0
                 }
-                <?> ""       
+                <?> ""
 
-decimal         = number 10 digit        
+decimal         = number 10 digit
 hexadecimal     = do{ oneOf "xX"; number 16 hexDigit }
 octal           = do{ oneOf "oO"; number 8 octDigit  }
 
@@ -404,23 +406,23 @@
         = do{ digits <- many1 baseDigit
             ; let n = foldl (\x d -> base*x + toInteger (digitToInt d)) 0 digits
             ; seq n (return n)
-            }          
+            }
 
-    
-    -----------------------------------------------------------
-    -- White space & symbols
-    -----------------------------------------------------------
+
+-----------------------------------------------------------
+-- White space & symbols
+-----------------------------------------------------------
 symbol name
-        = lexeme (string name)
+        = lexeme (string name)  <?> "symbol"
 
-lexeme p       
+lexeme p
         = do{ x <- p; whiteSpace ; return x  }
-      
-      
-    --whiteSpace    
+
+
+--whiteSpace
 whiteSpace  = skipMany (simpleSpace <?> "")
-          
-          
-simpleSpace = skipMany1 (satisfy isSpace)    
-        
+
+
+simpleSpace = skipMany1 (satisfy isSpace)
+
 
diff --git a/Data/RefSerialize.hs b/Data/RefSerialize.hs
--- a/Data/RefSerialize.hs
+++ b/Data/RefSerialize.hs
@@ -1,102 +1,246 @@
-{-# OPTIONS -fglasgow-exts -fallow-undecidable-instances -fallow-overlapping-instances  #-}
-module Data.RefSerialize 
-(    --module Data.Serialize
-     module Data.Parser  -- export the complete set of Parsec.Token parsers adapted for composing readp parsers
+{-# OPTIONS -fglasgow-exts -fallow-undecidable-instances -fallow-overlapping-instances -XIncoherentInstances #-}
+
+-----------------------------------------------------------------------------
+--
+-- Module      :  Data.RefSerialize
+-- Copyright   :  Alberto Gómez Corona
+-- License     :  see LICENSE
+--
+-- Maintainer  :  agocorona@gmail.com
+-- Stability   :  experimental
+
+
+-- |   Read, Show and Data.Binary do not check for repeated references to the same address.
+--     As a result, the data is duplicated when seri<alized. This is a waste of space in the filesystem
+--     and  also a waste of serialization time. but the worst consequence is that, when the serialized data is read,
+--     it allocates multiple copies for the same object when referenced multiple times. Because multiple referenced
+--     data is very typical in a pure language such is Haskell, this means that the resulting data loose the beatiful
+--     economy of space and processing time that referential transparency permits.
+--
+--     Here comes a brief tutorial:
+--
+--     @runW applies showp, the serialization parser of the instance Int for the RefSerialize class
+--
+--    Data.RefSerialize>let x= 5 :: Int
+--    Data.RefSerialize>runW $ showp x
+--    "5"
+--
+--    every instance of Read and Show is an instance of RefSerialize. for how to construct showp and readp parsers, see the demo.hs
+--
+--    rshowp is derived from showp, it labels the serialized data with a variable name
+--
+--    Data.RefSerialize>runW $ rshowp x
+--    " v8 where {v8= 5; }"
+--
+--    Data.RefSerialize>runW $ rshowp [2::Int,3::Int]
+--    " v6 where {v6= [ v9,  v10]; v9= 2; v10= 3; }"
+--
+--    while showp does a normal show serialization
+--
+--    Data.RefSerialize>runW $ showp [x,x]
+--    "[5, 5]"
+--
+--    rshowp variables are serialized memory references: no piece of data that point to the same addrees is serialized but one time
+--
+--    Data.RefSerialize>runW $ rshowp [x,x]
+--    " v9 where {v6= 5; v9= [ v6, v6]; }"
+--
+--
+--
+--    "this happens recursively"
+--
+--    Data.RefSerialize>let xs= [x,x] in str = runW $ rshowp [xs,xs]
+--    Data.RefSerialize>str
+--    " v8 where {v8= [ v10, v10]; v9= 5; v10= [ v9, v9]; }"
+--
+--    the rshowp serialized data is read with rreadp. The showp serialized data is read by readp
+--
+--    Data.RefSerialize>let xss= runR rreadp str :: [[Int]]
+--    Data.RefSerialize>print xss
+--    [[5,5],[5,5]]
+--
+--    this is the deserialized data
+--
+--    the deserialized data keep the references!! pointers are restored! That is the whole point!
+--
+--    Data.RefSerialize>varName xss !! 0 == varName xss !! 1
+--    True
+--
+--
+--    rShow= runW rshowp
+--    rRead= runR rreadp
+--
+--    Data.RefSerialize>rShow x
+--    " v11 where {v11= 5; }"
+--
+--
+--    In the definition of a referencing parser non referencing parsers can be used and viceversa. Use a referencing parser
+--    when the piece of data is being referenced many times inside the serialized data.
+--
+--    by default the referencing parser is constructed by:
+--
+--
+--    rshowp= insertVar showp
+--    rreadp= readVar readp
+--    but this can be redefined. See for example the instance of [] in RefSerialize.hs
+--
+--    This is an example of a showp parser for a simple data structure.
+--
+--    data S= S Int Int deriving ( Show, Eq)
+--
+--    instance  Serialize S  where
+--        showp (S x y)= do
+--                        xs <- rshowp x  -- rshowp parsers can be inside showp parser
+--                        ys <- rshowp y
+--                        return $ "S "++xs++" "++ys
+--
+--
+--
+--       readp =  do
+--                        symbol "S"     -- I included a (almost) complete Parsec for deserialization
+--                        x <- rreadp
+--                        y <- rreadp
+--                        return $ S x y
+--
+--    there is a mix between referencing and no referencing parser here:
+--
+--    Data.RefSerialize>putStrLn $ runW $ showp $ S x x
+--    S  v23 v23 where {v23= 5; }@
+
+
+
+
+
+
+
+module Data.RefSerialize
+(
+     module Data.Parser
     ,Serialize(
-        showp  -- :: c -> ST String  -- shows the content of a expression, must be user defined
-   
-       ,readp  -- ::  ST c           -- read the content of a expression, must be user defined
+        showp
 
-       ,rshowp -- :: c -> ST String  -- insert a reference (a variable in the where section) 
-       --rshowp -- = insertVar  showp -- default definition
-   
-       ,rreadp -- :: ST c            -- read a variable in the where section (to use for deserializing rshowp output)
-       --rreadp -- = readVar  readp   -- default definition
-    
-    
+       ,readp
+
+       ,rshowp
+
+       ,rreadp
+
     )
-    ,rShow    -- ::  Serialize c => c -> String         -- use the rshowp parser to serialize the object
-    ,rRead    -- ::  Serialize c => String ->c          -- deserialize  trough the rreadp parser
-    ,insertVar-- :: (a -> ST String) -> a -> ST String  -- insert a variable, its value generated by a showp parser, will be inserted in the where section
-    ,readVar  -- ::  read a variable referenced int the where section
-    ,varName  -- ::  two variables that point to the same address will have identical varname (derived from import System.Mem.StableName)
-    ,runR     -- :: ST a -> String ->  a    runR parser string  -- deserialize the string with the parser
-    ,runW     -- :: ST String -> String     runW $ parser x     -- serialize x with the parser
-)   
+    ,rShow
+    ,rRead
+    ,insertVar
+    ,readVar
+    ,varName
+    ,runR
+    ,runW
+    ,readHexp
+    ,showHexp
+)
+
  where
 import qualified Data.Map as M
 import Data.Serialize
 import Data.Parser
 import Unsafe.Coerce
 import Data.Char(isAlpha, isSpace, isAlphaNum)
---import Token
+import Numeric(readHex,showHex)
 
+
 class Serialize c where
-   showp :: c -> ST String
-   
-   readp ::  ST c
 
-   rshowp :: c -> ST String
+   showp :: c -> ST String     -- ^   shows the content of a expression, must be  defined bu the user
+
+   readp ::  ST c                     -- ^ read the content of a expression, must be user defined
+
+   rshowp :: c -> ST String    -- ^ insert a reference (a variable in the where section).   @rshowp  = insertVar  showp @ -- default definition
+
    rshowp  = insertVar  showp
-   
-   rreadp :: ST c
-   rreadp = readVar  readp 
+
+   rreadp :: ST c                     --  ^ read a variable in the where section (to use for deserializing rshowp output).   @rreadp  = readVar  readp@   -- default definition
+   rreadp = readVar  readp
 {-
 #ifdef Axioms
 
    serializeAxioms: Axioms c
    serializeAxioms= axioms{
-         unary=   [Axiom "reverse" 
+         unary=   [Axiom "reverse"
                             (\x ->  let str= rShow x
                                         y = rRead xtr
                                     in  y== x)
-                                       
+
                    AxioM "pointer equality"
                            (\x ->   let str= rShow[x,x]
                                         [y,z] = rRead str
                                     in varName y== varName z)
                   ]
         }
-#endif                                          
--}   
-
-         
+#endif
+-}
+-- | use the rshowp parser to serialize the object
+-- @ rShow c= runW  $  rshowp c@
 rShow :: Serialize c => c -> String
 rShow c= runW  $  rshowp c
-    
-rRead :: Serialize c => String ->c
+
+-- | deserialize  trough the rreadp parser
+-- @ rRead str= runR rreadp $ str@
+rRead :: Serialize c => String -> c
 rRead str= runR rreadp $ str
 
+readHexp :: (Num a, Integral a) => ST a
+readHexp = ST(\(Stat(c,s,v)) ->
+               let l=  readHex  s
+               in if null l then Left . Error $  "not readable: " ++ s
+                             else let ((x,str2):_)= l
+                                        in Right(Stat(c,dropWhile isSpace str2,v),x) )
+                <?> "readHexp "
 
 readSR :: Read a => ST a
-readSR = ST(\(Stat(c,s,v)) -> let ((x,str2):_)= readsPrec 1 s in Right(Stat(c,str2,v),x) )
 
+readSR = ST(\(Stat(c,s,v)) ->
+               let l=  readsPrec 1 s
+               in if null l then Left . Error $  "not readable: " ++ s
+                             else let ((x,str2):_)= l
+                                        in Right(Stat(c,dropWhile isSpace str2,v),x) )
+                <?> "readp: readsPrec "
+
+
+--readSR = ST(\(Stat(c,s,v)) -> let ((x,str2):_)= readsPrec 1 s in Right(Stat(c,str2,v),x) )
+
+
+-- |  deserialize the string with the parser
 runR:: ST a -> String ->  a
-runR   (ST f) str= 
-    let (struct, vars)= readContext "where " str 
+runR   (ST f) str=
+    let (struct, vars)= readContext "where " str
     in  case   f (Stat(M.empty,struct,vars) ) of
           Right (Stat _, a) -> a
           Left (Error s) -> error s
-  
 
-  
+showHexp :: (Num a,Integral a) => a -> ST String
+showHexp var= ST(\(Stat(c,s,v)) ->  Right(Stat(c,s,v),showHex var ""))  <?> "showHexp "
+
 showSR :: Show a => a -> ST String
-showSR var= ST(\(Stat(c,s,v)) ->  Right(Stat(c,s,v),show var))
+showSR var= ST(\(Stat(c,s,v)) ->  Right(Stat(c,s,v),show var))   <?> "showp: show "
 
+
+-- |   serialize x with the parser
 runW :: ST String -> String
 runW (ST f) = case  f (Stat(M.empty,"",""))  of
               Right (Stat (c,_,_), str) ->
                 let scontext= M.assocs c
-                    show1 c= concatMap (\(n,(_,v))->"v"++ show n++"= "++v++"; ")  scontext  
+                    show1 c= concatMap (\(n,(_,v))->"v"++ show n++"= "++v++"; ")  scontext
                     vars= show1  c
                     strContext= if null vars  then "" else  " where {"++vars ++ "}"
-                    
+
                 in  str ++ strContext
-            
+
               Left (Error s) -> error s
-      
 
+-- -------------Instances
 
+instance Serialize String where
+    showp = showSR
+    readp = readSR
+
 instance  Serialize a => Serialize [a] where
   showp []= return "[]"
   showp (x:xs)=  do
@@ -106,10 +250,10 @@
            where
            f x=do  str <- showp (x:: a)
                    return $ ", "++str
-  
 
-  readp =  brackets $ commaSep $ readp 
 
+  readp =  (brackets $ commaSep $ readp)    <?> "readp:: [] "
+
   rshowp  = insertVar rshowp1 where
     rshowp1 []= insertVar return "[]"
     rshowp1 (x:xs)= do
@@ -119,36 +263,23 @@
            where
            f x= do str <- rshowp (x:: a)
                    return $ ", "++str
-  
 
-  rreadp = readVar $ brackets $ commaSep $ rreadp   
 
-{-
-instance Serialize Int where
-  showp = showSR
-  readp = readSR
+  rreadp = (readVar $ brackets $ commaSep $ rreadp)   <?> "rreadp:: [] "
 
-instance Serialize Char where
-  showp = showSR
-  readp = readSR
--}
+
 instance (Show a, Read a) => Serialize a where
     showp = showSR
     readp = readSR
-                
-{-      
-instance Serialize String where
-    showp = showSR 
-    readp = readSR 
-    
-instance Serialize Integer where
-    showp = showSR
-    readp = readSR                  
--}
 
--- | insert a variable at this position. and the expression value in the where part.
---   runW rshowp (1::Int) -> "1"
---   runW (insertVar rshowp) (1::Int) -> v1 where { v1=1}
+
+
+-- | insert a variable at this position. The expression value is inserted the where part if it is not already
+-- created. If the address of this object being parsed correspond with an address already parsed and
+-- it is in the where section, then the same variable name is used
+--   @runW showp (1::Int)                                -> "1"
+--   runW (insertVar showp) (1::Int)                ->  v1 where { v1=1}
+--   runW (insertVar showp) [(1::Int) ,1]        -> [v1.v1] where { v1=1}@
 --   This is useful when the object is referenced many times
 
 insertVar :: (a -> ST String) -> a -> ST String
@@ -156,24 +287,24 @@
  let mf = trytofindEntireObject x c in
  case mf of
    Just  var ->  Right(Stat(c,s,v),var)
-   Nothing -> 
-         let 
+   Nothing ->
+         let
             ST f= parser x
             Right (Stat (c',_,_), str) = f  (Stat(c,s,v))
-            
+
          in Right(Stat(addc str c',s,v), ' ':varname))
  where
-  addc str c= M.insert ( hash) (unsafeCoerce x,  str) c 
+  addc str c= M.insert ( hash) (unsafeCoerce x,  str) c
   hash = hasht x
-  varname= "v" ++ show hash 
+  varname= "v" ++ show hash
 
-  trytofindEntireObject x c= 
+  trytofindEntireObject x c=
          case M.lookup  hash  c  of
            Nothing -> Nothing
            Just _  -> Just varname
-           
- 
 
+
+-- | deserialize a variable serialized with insertVar. Memory references are restored
 readVar :: Serialize c => ST c -> ST c
 readVar parser=  ST(\(Stat(c,s,v))->
           let
@@ -181,21 +312,21 @@
                (var, str2) = span isAlphaNum s1
 
           in case trytofindEntireObject (numVar var) c  of
- 
+
            Just  (x,_) ->  Right(Stat(c,str2,v),unsafeCoerce x)
-           Nothing ->              
-            let   
+           Nothing ->
+            let
                (_, rest)= readContext (var++"= ") v
-               ST f= parser 
+               ST f= parser
             in  case f  (Stat(c,rest,v)) --`debug` ("s="++s++"var="++var++"rest="++rest )
             of
                  Right (Stat(c',s',v'),x) ->
-                   let c''= M.insert (numVar var) (unsafeCoerce x,  "") c' 
-                   in  Right (Stat(c'',str2,v),x)  
-                   
+                   let c''= M.insert (numVar var) (unsafeCoerce x,  "") c'
+                   in  Right (Stat(c'',str2,v),x)
+
                  err -> err)
   where
-  trytofindEntireObject x c= 
+  trytofindEntireObject x c=
          case M.lookup   x  c  of
            Nothing -> Nothing
            justx   -> justx
diff --git a/Data/Serialize.hs b/Data/Serialize.hs
--- a/Data/Serialize.hs
+++ b/Data/Serialize.hs
@@ -34,7 +34,9 @@
 
 
 hasht x=  (hashStableName . unsafePerformIO . makeStableName) x
- 
+
+-- !  two variables that point to the same address will have identical varname (derived from import System.Mem.StableName)
+varName:: a -> String
 varName x= "v"++ (show . hasht) x
 
 
@@ -43,5 +45,5 @@
 numVar :: String -> Int
 numVar var= read $ tail var
 
-  
+
 
diff --git a/IDE.session b/IDE.session
new file mode 100644
--- /dev/null
+++ b/IDE.session
@@ -0,0 +1,15 @@
+Time of storage:
+               "Thu Sep 24 12:44:15 Hora de verano romance 2009"
+Layout:        VerticalP (HorizontalP (TerminalP {paneGroups = fromList [], paneTabs = Just TopP, currentPage = 5, detachedId = Nothing, detachedSize = Nothing}) (TerminalP {paneGroups = fromList [], paneTabs = Just TopP, currentPage = -1, detachedId = Nothing, detachedSize = Nothing}) 420) (HorizontalP (TerminalP {paneGroups = fromList [("Debug",HorizontalP (TerminalP {paneGroups = fromList [], paneTabs = Nothing, currentPage = 0, detachedId = Nothing, detachedSize = Nothing}) (TerminalP {paneGroups = fromList [], paneTabs = Just RightP, currentPage = 0, detachedId = Nothing, detachedSize = Nothing}) 109)], paneTabs = Just BottomP, currentPage = 0, detachedId = Nothing, detachedSize = Nothing}) (TerminalP {paneGroups = fromList [], paneTabs = Just BottomP, currentPage = 1, detachedId = Nothing, detachedSize = Nothing}) 234) 859
+Population:    [(Just (BreakpointsSt BreakpointsState),[SplitP RightP,SplitP TopP,GroupP "Debug",SplitP BottomP]),(Just (BufferSt (BufferState "C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\TCache-0.6.4\\Data\\TCache\\Dynamic.hs" 82)),[SplitP LeftP,SplitP TopP]),(Just (ErrorsSt ErrorsState),[SplitP RightP,SplitP TopP,GroupP "Debug",SplitP BottomP]),(Just (BufferSt (BufferState "C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\TCache-0.6.4\\Data\\TCache\\IDynamic.hs" 94)),[SplitP LeftP,SplitP TopP]),(Just (BufferSt (BufferState "C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\TCache-0.6.4\\Data\\TCache\\IResource.hs" 8516)),[SplitP LeftP,SplitP TopP]),(Just (InfoSt (InfoState (Descr {descrName' = "showHex", typeInfo' = "showHex :: forall a. Integral a => a -> ShowS\n", descrModu' = PM {pack = PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,1,0,0], versionTags = []}}, modu = ModuleName ["Numeric"]}, mbLocation' = Nothing, mbComment' = Nothing, details' = VariableDescr}))),[SplitP RightP,SplitP BottomP]),(Just (LogSt LogState),[SplitP RightP,SplitP BottomP]),(Just (ModulesSt (ModulesState 143 (System,True) (Nothing,Nothing) (ExpanderState {localExp = ([],[]), localExpNoBlack = ([[5,16],[5,13],[5,1],[5],[4,0,1],[4,0,0],[4,0],[4],[1,0],[1],[0]],[]), packageExp = ([[4],[0]],[]), packageExpNoBlack = ([],[]), systemExp = ([],[]), systemExpNoBlack = ([],[])}))),[SplitP RightP,SplitP BottomP]),(Just (BufferSt (BufferState "C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\RefSerialize-0.2.4\\Data\\Parser.hs" 13845)),[SplitP LeftP,SplitP TopP]),(Just (BufferSt (BufferState "C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\RefSerialize-0.2.4\\RefSerialize.cabal" 2165)),[SplitP LeftP,SplitP TopP]),(Just (BufferSt (BufferState "C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\RefSerialize-0.2.4\\Data\\RefSerialize.hs" 1148)),[SplitP LeftP,SplitP TopP]),(Just (ReferencesSt (ReferencesState {refTo = Just (Descr {descrName' = "multisetEditor", typeInfo' = "multisetEditor :: forall alpha.\n                  (Show alpha, Default alpha, Eq alpha) =>\n                  ColumnDescr alpha\n                  -> (Editor alpha, Parameters)\n                  -> Maybe ([alpha] -> [alpha])\n                  -> Maybe (alpha -> alpha -> Bool)\n                  -> Editor [alpha]\n", descrModu' = PM {pack = PackageIdentifier {pkgName = PackageName "leksah", pkgVersion = Version {versionBranch = [0,5,0], versionTags = []}}, modu = ModuleName ["Graphics","UI","Editor","Composite"]}, mbLocation' = Just (Location {locationSLine = 499, locationSCol = 0, locationELine = 616, locationECol = 25}), mbComment' = Just "An editor with a subeditor, of which a list of items can be selected\n\n", details' = VariableDescr}), refScope = Package})),[SplitP RightP,SplitP BottomP]),(Just (SearchSt (SearchState {searchString = "number", searchScope = System, searchMode = Prefix {caseSense = True}})),[SplitP RightP,SplitP TopP]),(Just (BufferSt (BufferState "C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\RefSerialize-0.2.4\\Data\\Serialize.hs" 0)),[SplitP LeftP,SplitP TopP]),(Just (BufferSt (BufferState "C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\TCache-0.6.4\\TCache.cabal" 1675)),[SplitP LeftP,SplitP TopP]),(Just (BufferSt (BufferState "C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\TCache-0.6.4\\Data\\TCache.hs" 7779)),[SplitP LeftP,SplitP TopP]),(Just (BufferSt (BufferState "C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\TCache-0.6.4\\Data\\TCache\\TMVar.hs" 65)),[SplitP LeftP,SplitP TopP]),(Just (TraceSt TraceState),[SplitP RightP,SplitP TopP,GroupP "Debug",SplitP BottomP]),(Just (BufferSt (BufferStateTrans "Unnamed" "\n-----------------------------------------------------------------------------\n--\n-- Module      :  Data.RefSerialize\n-- Copyright   :  Alberto G\243mez Corona\n-- License     :  see LICENSE\n--\n-- Maintainer  :  agocorona@gmail.com\n-- Stability   :  experimental\n\n\n--  |   Read, Show and Data.Binary do not check for repeated references to the same address.\n--     As a result, the data is duplicated when seri<alized. This is a waste of space in the filesystem\n--     and  also a waste of serialization time. but the worst consequence is that, when the serialized data is read,\n--     it allocates multiple copies for the same object when referenced multiple times. Because multiple referenced\n--     data is very typical in a pure language such is Haskell, this means that the resulting data loose the beatiful\n--     economy of space and processing time that referential transparency permits.\n--\n--     Here comes a brief tutorial\n--\n--     runW applies showp, the serialization parser of the instance Int for the RefSerialize class\n--\n--    Data.RefSerialize>let x= 5 :: Int\n--    Data.RefSerialize>runW $ showp x\n--    \"5\"\n--\n--    every instance of Read and Show is an instance of RefSerialize. for how to construct showp and readp parsers, see the demo.hs\n--\n--    rshowp is derived from showp, it labels the serialized data with a variable name\n--\n--    Data.RefSerialize>runW $ rshowp x\n--    \" v8 where {v8= 5; }\"\n--\n--    Data.RefSerialize>runW $ rshowp [2::Int,3::Int]\n--    \" v6 where {v6= [ v9,  v10]; v9= 2; v10= 3; }\"\n--\n--    while showp does a normal show serialization\n--\n--    Data.RefSerialize>runW $ showp [x,x]\n--    \"[5, 5]\"\n--\n--    rshowp variables are serialized memory references: no piece of data that point to the same addrees is serialized but one time\n--\n--    Data.RefSerialize>runW $ rshowp [x,x]\n--    \" v9 where {v6= 5; v9= [ v6, v6]; }\"\n--\n--\n--\n--    \"this happens recursively\"\n--\n--    Data.RefSerialize>let xs= [x,x] in str = runW $ rshowp [xs,xs]\n--    Data.RefSerialize>str\n--    \" v8 where {v8= [ v10, v10]; v9= 5; v10= [ v9, v9]; }\"\n--\n--    the rshowp serialized data is read with rreadp. The showp serialized data is read by readp\n--\n--    Data.RefSerialize>let xss= runR rreadp str :: [[Int]]\n--    Data.RefSerialize>print xss\n--    [[5,5],[5,5]]\n--\n--    this is the deserialized data\n--\n--    the deserialized data keep the references!! pointers are restored! That is the whole point!\n--\n--    Data.RefSerialize>varName xss !! 0 == varName xss !! 1\n--    True\n--\n--\n--    rShow= runW rshowp\n--    rRead= runR rreadp\n--\n--    Data.RefSerialize>rShow x\n--    \" v11 where {v11= 5; }\"\n--\n--\n--    In the definition of a referencing parser non referencing parsers can be used and viceversa. Use a referencing parser\n--    when the piece of data is being referenced many times inside the serialized data.\n--\n--    by default the referencing parser is constructed by:\n--\n--\n--    rshowp= insertVar showp\n--    rreadp= readVar readp\n--    but this can be redefined. See for example the instance of [] in RefSerialize.hs\n--\n--    This is an example of a showp parser for a simple data structure.\n--\n--    data S= S Int Int deriving ( Show, Eq)\n--\n--    instance  Serialize S  where\n--        showp (S x y)= do\n--                        xs <- rshowp x  -- rshowp parsers can be inside showp parser\n--                        ys <- rshowp y\n--                        return $ \"S \"++xs++\" \"++ys\n--\n--\n--\n--       readp =  do\n--                        symbol \"S\"     -- I included a (almost) complete Parsec for deserialization\n--                        x <- rreadp\n--                        y <- rreadp\n--                        return $ S x y\n--\n--    there is a mix between referencing and no referencing parser here:\n--\n--    Data.RefSerialize>putStrLn $ runW $ showp $ S x x\n--    S  v23 v23 where {v23= 5; }\n--\n\n\n\n\n{-\n#ifdef Axioms\n\n   serializeAxioms: Axioms c\n   serializeAxioms= axioms{\n         unary=   [Axiom \"reverse\"\n                            (\\x ->  let str= rShow x\n                                        y = rRead xtr\n                                    in  y== x)\n\n                   AxioM \"pointer equality\"\n                           (\\x ->   let str= rShow[x,x]\n                                        [y,z] = rRead str\n                                    in varName y== varName z)\n                  ]\n        }\n#endif\n-}\n" 0)),[SplitP LeftP,SplitP TopP]),(Just (VariablesSt VariablesState),[SplitP RightP,SplitP TopP,GroupP "Debug",SplitP BottomP]),(Just (BufferSt (BufferState "C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\Workflow-0.5.5\\Workflow.cabal" 1665)),[SplitP LeftP,SplitP TopP]),(Just (BufferSt (BufferStateTrans "_Eval.hs" ":l  demos\\DocumentApprobalRefSerial.hs\n\n:l demos\\sequence.hs\n:list\n\nlet mcount=  plift $  putStr (show n ++ \" \") >> hFlush stdout >> threadDelay 1000000>>mcount (n+1)" 40)),[SplitP RightP,SplitP TopP,GroupP "Debug",SplitP TopP]),(Just (BufferSt (BufferState "C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\RefSerialize-0.2.4\\demo.hs" 0)),[SplitP LeftP,SplitP TopP]),(Just (BufferSt (BufferState "C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\RefSerialize-0.2.4\\tutorial.txt" 2523)),[SplitP LeftP,SplitP TopP])]
+Window size:   (1024,540)
+Active package:
+               Just "C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\RefSerialize-0.2.4\\RefSerialize.cabal"
+Active pane:   Just "RefSerialize.hs"
+Toolbar visible:
+               True
+FindbarState:  (True,FindState {entryStr = "@", entryHist = ["@","doc","I.","ll the rest derive from it","clearSyncCacheProc","DynamicIn","takeBlocks","size","getTVars ","cate","unsa","logWFF"], replaceStr = "PMonadTrans", replaceHist = [], caseSensitive = False, entireWord = False, wrapAround = True, regex = False, lineNr = 1})
+Recently opened files:
+               ["C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\RefSerialize-0.2.4\\Data\\Parser.hs","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\TCache-0.6.4\\Data\\TCache\\TMVar\\Dynamic.hs","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\RefSerialize-0.2.4\\Data\\RefSerialize.hs","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\Workflow-0.5.5\\demos\\sequence.hs","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\Workflow-0.5.5\\Control\\Workflow.hs","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\Workflow-0.5.5\\demos\\DocumentApprobalRefSerial.hs","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\RefSerialize-0.2.3.tar.gz","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\Workflow-0.5\\demos\\DocumentApprobalRefSerial.hs","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\TCache-0.6.4\\Data\\TCache\\IDynamic.hs","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\TCache-0.6.4\\Data\\TCache\\IResource.hs","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\TCache-0.6.4\\demos\\Sample.hs","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\TCache-0.6.4\\TCache.cabal"]
+Recently opened packages:
+               ["C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\Workflow-0.5.5\\Workflow.cabal","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\TCache-0.6.4\\TCache.cabal","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\Workflow-0.5\\Workflow.cabal","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\Workflow-0.3\\Workflow.cabal","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\TCache-0.6.3\\TCache.cabal","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\Workflow-0.4.6\\Workflow.cabal","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\RefSerialize-0.2.3\\RefSerialize.cabal","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\tests\\All\\test.cabal","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\Workflow-0.4.5\\Workflow.cabal","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\Workflow-0.4\\Workflow.cabal","C:\\Documents and Settings\\Alberto Gomez Corona\\Mis documentos\\haskell\\devel\\Cluster-0.3.3 distributed TVar nosync\\Cluster.cabal"]
diff --git a/RefSerialize.cabal b/RefSerialize.cabal
--- a/RefSerialize.cabal
+++ b/RefSerialize.cabal
@@ -1,40 +1,52 @@
 name:                RefSerialize
-version:             0.2.3
-synopsis:            Write to and read from Strings maintaining internal memory references 
-description:         
-                     Read, Show and Data.Binary do not check for pointers to the same address 
-                     as a result, the data is duplicated when serialized. This is a waste of space in the filesystem 
+version:             0.2.4
+synopsis:            Write to and read from Strings maintaining internal memory references
+description:
+                     Read, Show and Data.Binary do not check for repeated references to the same address.
+                     As a result, the data is duplicated when serialized. This is a waste of space in the filesystem
                      and  also a waste of serialization time. but the worst consequence is that, when the serialized data is read,
-                     it allocates multiple copies for the same object referenced multiple times. Because multiple referenced
-                     data is very typical in a pure language such is Haskell, this means that the resulting data loose the beatiful 
+                     it allocates multiple copies for the same object when referenced multiple times. Because multiple referenced
+                     data is very typical in a pure language such is Haskell, this means that the resulting data loose the beatiful
                      economy of space and processing time that referential transparency permits.
-                     
+                     .
+                     Every instance of Show/Read is also a instance of Data.RefSerialize.
+                     .
                      This package allows the serialization and deserialization of large data structures without duplication of data, with
                      the result of optimized performance and memory usage. It is also useful for debugging purposes.
-                     
+                     .
                      There are automatic derived instances for instances of Read/Show. Lists of non-chars have its own instance.
-                     The deserializer contains a subset of Parsec.Token for defining deserializing parsers. 
-                     
-                     Every instance of Show/Read is also a instance of Data.RefSerialize
-                     
-                     the serialized string has the form "expr( var1, ...varn) where  var1=value1,..valn=valueN " so that the
-                     string can ve EVALuated. So the entire deserialization can be substituted by eval.
-                     
-                     See demo.hs and tutorial. I presumably will add a entry in haskell-web.blogspot.com
-                     
-                     To develop: -derived instances for Data.Binary
+                     The deserializer contains a subset of Parsec.Token for defining deserializing parsers.
+                     .
+                     the serialized string has the form:
+                     .
+                     @expr( var1, ...varn) where  var1=value1,..valn=valueN @
+                     .
+                     so that the string can be EVALuated.
+                     .
+                     See demo.hs and tutorial.
+                     .
+                     in this release:
+                            .
+                            *  Proper trailing withespace handlling for instances of Read
+                            .
+                            *  Error handllig for instances of Read.
+                     .
+                     To do:
+                     .
+                                 -derived instances for Data.Binary
+                     .
                                  -serialization to/from ByteStings
                      
 
-category:            Parsing
+category:           Parsing, Data, Database
 license:             BSD3
 license-file:        LICENSE
 author:              Alberto Gómez Corona
 maintainer:          agocorona@gmail.com
 Tested-With:         GHC == 6.8.2
 Build-Type:          Simple
-build-Depends:       base,containers
+build-Depends:       base >=3 && <4,containers
 Cabal-Version:       >= 1.2
 
 exposed-modules:     Data.RefSerialize, Data.Parser, Data.Serialize
-ghc-options:         
+ghc-options:    -O2
diff --git a/demo.hs b/demo.hs
--- a/demo.hs
+++ b/demo.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS -fglasgow-exts -XOverlappingInstances  -XUndecidableInstances    #-}
 module Main where
 
 import System.Mem.StableName
@@ -5,7 +6,7 @@
 import Data.RefSerialize
 
 --simple data structure
-data S= S Int Int deriving ( Show, Eq)         
+data S= S Int Int deriving ( Show, Eq)
 
 
 instance  Serialize S  where
@@ -13,11 +14,11 @@
                     xs <- rshowp x  -- rshowp parsers can be inside showp parser
                     ys <- rshowp y
                     return $ "S "++xs++" "++ys
-       
-     
+
+
     readp =  do
                     symbol "S"
-                    x <- rreadp    
+                    x <- rreadp
                     y <- rreadp
                     return $ S x y
 
@@ -26,43 +27,45 @@
 data Data = Data Int String deriving (Read,Show)
 
 data Stat a= Workflows [String]
-           | Stat{ wfName :: String, state:: Int, index :: Int, recover:: Bool, sync :: Bool , resource :: [a]} 
+           | Stat{ wfName :: String, state:: Int, index :: Int, recover:: Bool, sync :: Bool , resource :: [a]}
            | I a
-           deriving (Read,Show)  
+           deriving (Read,Show)
 
 -- the parser definitions for this structure
 
 instance Serialize a =>  Serialize (Stat a) where
-    showp (Workflows list)= do  
+    showp (Workflows list)= do
           str <- showp list
           return $ "StatWorkflows "++ str
-    showp (I x) = return $ "I " ++ rShow x 
+
+    showp (I x) = return $ "I " ++ rShow x
+
     showp  (Stat wfName state index recover sync resource)= do
-       parsea <- rshowp resource   --creates a variable 
-       return $ "Stat "++ show wfName ++" "++ show state++" "++show index++" "++show recover++" "++ show sync ++ parsea  
-       
-    readp = choice [rStat, rData, rWorkflows] where --choice is a exported parser (Parsec.Token interface is included) 
+       parsea <- rshowp resource     --creates a variable
+       return $ "Stat "++ show wfName ++" "++ show state++" "++show index++" "++show recover++" "++ show sync ++ parsea
+
+    readp = choice [rStat, rData, rWorkflows] where --choice is a exported parser (Parsec.Token interface is included)
         rStat= do
-              symbol "Stat" 
+              symbol "Stat"
               wfName <- stringLiteral    -- various parsec parsers are used
               state <- integer
               index <- integer
               recover <- bool
               sync <- bool
-              resource <- rreadp   -- read the variable 
-              return $ Stat wfName (fromIntegral state) (fromIntegral index) recover sync resource 
-              
+              resource <- rreadp   -- read the variable
+              return $ Stat wfName (fromIntegral state) (fromIntegral index) recover sync resource
+
         rData= do
                symbol "I"
                a <- readp
-               return $ I a 
+               return $ I a
 
         rWorkflows= do
                symbol "StatWorkflows"
                list <- readp
-               return $ Workflows list  
+               return $ Workflows list
 
-          
+
 main=  do
    let x = (5 :: Int)
    putStrLn $ runW $ showp $ S x x
@@ -70,23 +73,23 @@
    let str= rShow xss
    putStrLn str
    let y = rRead  " v10 where {v6= [ v8, v8]; v8= 5; v9= [v8, v8]; v10= [ v6,  v9]; }" ::[[Int]]
-   print y 
+   print y
    putStrLn "instance (Show a, Read a) => Serialize a "
    putStr "rShow 10="
    putStrLn $ rShow (10 :: Int)
-   
+
    putStrLn "serialize String's"
    let x= "hello"
    let str= rShow x
    putStrLn $ "rShow "++ str++"= "++str
-  
+
    let y= rRead str :: String
    print y
    print $ x==y
 
-   putStrLn "serialize [a] "    
+   putStrLn "serialize [a] "
    let xs= take 2 $ repeat (Data 0 "")
-   
+
    let xss= take 2 $ repeat xs
    let str= rShow xss
    putStrLn str
@@ -99,25 +102,25 @@
 
    print xs
    putStr "rShow xs="
-   let str= rShow  xs 
+   let str= rShow  xs
    putStrLn str
 
-   
-   putStrLn "using the RefSerialize instance of Stat (see definition in this file)" 
-   let stat0 = Stat{ wfName="", state=0, index=0, recover=False, resource=[], sync= True} 
 
+   putStrLn "using the RefSerialize instance of Stat (see definition in this file)"
+   let stat0 = Stat{ wfName="", state=0, index=0, recover=False, resource=[], sync= True}
+
    let data0= Data 0 ""
 
    let str = rShow  stat0{resource= (take 2 $ repeat  data0) ++ (take 2 $ repeat (Data 1 "1")) }
    putStrLn "references to the same address are identified by rshowp. they point to the same variable in the serialized data"
    putStrLn $ "rShow "++ show data0 ++"= "++ str
    let stat1= rRead str :: Stat Data
-   
+
    putStrLn "data that point to the same variable when serializeds point to the same memory address when deserialized"
-   
+
    let addr x= (hashStableName . unsafePerformIO . makeStableName) x
    let x= (resource stat1 !! 0)
-   putStr "first element of the resource list= " 
+   putStr "first element of the resource list= "
    print x
    putStr "address of this element= "
    print $ addr x
@@ -127,6 +130,6 @@
    putStr "address of this element= "
    print $ addr y
    print $ addr y== addr x
-     
- 
+
+
 
diff --git a/dist/build/autogen/Paths_RefSerialize.hs b/dist/build/autogen/Paths_RefSerialize.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/Paths_RefSerialize.hs
@@ -0,0 +1,29 @@
+module Paths_RefSerialize (
+    version,
+    getBinDir, getLibDir, getDataDir, getLibexecDir,
+    getDataFileName
+  ) where
+
+import Data.Version (Version(..))
+import System.Environment (getEnv)
+
+version :: Version
+version = Version {versionBranch = [0,2,4], versionTags = []}
+
+bindir, libdir, datadir, libexecdir :: FilePath
+
+bindir     = "C:\\Archivos de programa\\Haskell\\bin"
+libdir     = "C:\\Archivos de programa\\Haskell\\RefSerialize-0.2.4\\ghc-6.10.3"
+datadir    = "C:\\Archivos de programa\\Haskell\\RefSerialize-0.2.4"
+libexecdir = "C:\\Archivos de programa\\Haskell\\RefSerialize-0.2.4"
+
+getBinDir, getLibDir, getDataDir, getLibexecDir :: IO FilePath
+getBinDir = catch (getEnv "RefSerialize_bindir") (\_ -> return bindir)
+getLibDir = catch (getEnv "RefSerialize_libdir") (\_ -> return libdir)
+getDataDir = catch (getEnv "RefSerialize_datadir") (\_ -> return datadir)
+getLibexecDir = catch (getEnv "RefSerialize_libexecdir") (\_ -> return libexecdir)
+
+getDataFileName :: FilePath -> IO FilePath
+getDataFileName name = do
+  dir <- getDataDir
+  return (dir ++ "\\" ++ name)
diff --git a/dist/build/autogen/cabal_macros.h b/dist/build/autogen/cabal_macros.h
new file mode 100644
--- /dev/null
+++ b/dist/build/autogen/cabal_macros.h
@@ -0,0 +1,14 @@
+/* DO NOT EDIT: This file is automatically generated by Cabal */
+
+/* package base-4.1.0.0 */
+#define MIN_VERSION_base(major1,major2,minor) \
+  (major1) <  4 || \
+  (major1) == 4 && (major2) <  1 || \
+  (major1) == 4 && (major2) == 1 && (minor) <= 0
+
+/* package containers-0.2.0.1 */
+#define MIN_VERSION_containers(major1,major2,minor) \
+  (major1) <  0 || \
+  (major1) == 0 && (major2) <  2 || \
+  (major1) == 0 && (major2) == 2 && (minor) <= 0
+
diff --git a/dist/doc/html/RefSerialize/Data-Parser.html b/dist/doc/html/RefSerialize/Data-Parser.html
new file mode 100644
--- /dev/null
+++ b/dist/doc/html/RefSerialize/Data-Parser.html
@@ -0,0 +1,504 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Data.Parser</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+><SCRIPT TYPE="text/javascript"
+>window.onload = function () {setSynopsis("mini_Data-Parser.html")};</SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Data.Parser</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+>A Parsec parser for the refSerialize monad. See package Parsec. all the functions have the same meaning
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+>  <A NAME="t:ST"
+><A NAME="t%3AST"
+></A
+></A
+><B
+>ST</B
+> a </TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="section4"
+>Constructors</TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+><A NAME="v:ST"
+><A NAME="v%3AST"
+></A
+></A
+><B
+>ST</B
+> (<A HREF="Data-Serialize.html#t%3AStat"
+>Stat</A
+> -&gt; Either <A HREF="Data-Serialize.html#t%3AError"
+>Error</A
+> (<A HREF="Data-Serialize.html#t%3AStat"
+>Stat</A
+>, a))</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section4"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:ST')" ALT="show/hide"
+> Instances</TD
+></TR
+><TR
+><TD CLASS="body"
+><DIV ID="i:ST" STYLE="display:block;"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+>Monad <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>MonadPlus <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+></TD
+></TR
+></TABLE
+></DIV
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>&lt;?&gt;</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>&lt;|&gt;</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:char"
+><A NAME="v%3Achar"
+></A
+></A
+><B
+>char</B
+> :: Char -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> Char</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>anyChar</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>string</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>upper</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>space</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>digit</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:sepBy"
+><A NAME="v%3AsepBy"
+></A
+></A
+><B
+>sepBy</B
+> ::  <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> sep -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> [a]</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>between</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>choice</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>option</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>notFollowedBy</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:many"
+><A NAME="v%3Amany"
+></A
+></A
+><B
+>many</B
+> ::  <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> [a]</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>bool</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>charLiteral</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>stringLiteral</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>natural</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>integer</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>float</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>naturalOrFloat</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>decimal</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>hexadecimal</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>octal</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>symbol</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>lexeme</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>whiteSpace</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>parens</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>braces</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>angles</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>brackets</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>semi</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>comma</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>colon</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>dot</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>semiSep</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>semiSep1</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>commaSep</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>commaSep1</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 2.4.2</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/dist/doc/html/RefSerialize/Data-RefSerialize.html b/dist/doc/html/RefSerialize/Data-RefSerialize.html
new file mode 100644
--- /dev/null
+++ b/dist/doc/html/RefSerialize/Data-RefSerialize.html
@@ -0,0 +1,770 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Data.RefSerialize</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+><SCRIPT TYPE="text/javascript"
+>window.onload = function () {setSynopsis("mini_Data-RefSerialize.html")};</SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Data.RefSerialize</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Description</TD
+></TR
+><TR
+><TD CLASS="doc"
+><P
+>Read, Show and Data.Binary do not check for repeated references to the same address.
+     As a result, the data is duplicated when seri&lt;alized. This is a waste of space in the filesystem
+     and  also a waste of serialization time. but the worst consequence is that, when the serialized data is read,
+     it allocates multiple copies for the same object when referenced multiple times. Because multiple referenced
+     data is very typical in a pure language such is Haskell, this means that the resulting data loose the beatiful
+     economy of space and processing time that referential transparency permits.
+</P
+><P
+>Here comes a brief tutorial
+</P
+><PRE
+>runW applies showp, the serialization parser of the instance Int for the RefSerialize class
+
+Data.RefSerialize&gt;let x= 5 :: Int
+    Data.RefSerialize&gt;runW $ showp x
+    <A HREF="5.html"
+>5</A
+>
+
+every instance of Read and Show is an instance of RefSerialize. for how to construct showp and readp parsers, see the demo.hs
+
+rshowp is derived from showp, it labels the serialized data with a variable name
+
+Data.RefSerialize&gt;runW $ rshowp x
+    <A HREF=" v8 where {v8= 5; }.html"
+> v8 where {v8= 5; }</A
+>
+
+Data.RefSerialize&gt;runW $ rshowp [2::Int,3::Int]
+    <A HREF=" v6 where {v6= [ v9,  v10]; v9= 2; v10= 3; }.html"
+> v6 where {v6= [ v9,  v10]; v9= 2; v10= 3; }</A
+>
+
+while showp does a normal show serialization
+
+Data.RefSerialize&gt;runW $ showp [x,x]
+    <A HREF="[5, 5].html"
+>[5, 5]</A
+>
+
+rshowp variables are serialized memory references: no piece of data that point to the same addrees is serialized but one time
+
+Data.RefSerialize&gt;runW $ rshowp [x,x]
+    <A HREF=" v9 where {v6= 5; v9= [ v6, v6]; }.html"
+> v9 where {v6= 5; v9= [ v6, v6]; }</A
+>
+
+<A HREF="this happens recursively.html"
+>this happens recursively</A
+>
+
+Data.RefSerialize&gt;let xs= [x,x] in str = runW $ rshowp [xs,xs]
+    Data.RefSerialize&gt;str
+    <A HREF=" v8 where {v8= [ v10, v10]; v9= 5; v10= [ v9, v9]; }.html"
+> v8 where {v8= [ v10, v10]; v9= 5; v10= [ v9, v9]; }</A
+>
+
+the rshowp serialized data is read with rreadp. The showp serialized data is read by readp
+
+Data.RefSerialize&gt;let xss= runR rreadp str :: [[Int]]
+    Data.RefSerialize&gt;print xss
+    [[5,5],[5,5]]
+
+this is the deserialized data
+
+the deserialized data keep the references!! pointers are restored! That is the whole point!
+
+Data.RefSerialize&gt;varName xss !! 0 == varName xss !! 1
+    True
+
+rShow= runW rshowp
+    rRead= runR rreadp
+
+Data.RefSerialize&gt;rShow x
+    <A HREF=" v11 where {v11= 5; }.html"
+> v11 where {v11= 5; }</A
+>
+
+In the definition of a referencing parser non referencing parsers can be used and viceversa. Use a referencing parser
+    when the piece of data is being referenced many times inside the serialized data.
+
+by default the referencing parser is constructed by:
+
+rshowp= insertVar showp
+    rreadp= readVar readp
+    but this can be redefined. See for example the instance of [] in RefSerialize.hs
+
+This is an example of a showp parser for a simple data structure.
+
+data S= S Int Int deriving ( Show, Eq)
+
+instance  Serialize S  where
+        showp (S x y)= do
+                        xs &lt;- rshowp x  -- rshowp parsers can be inside showp parser
+                        ys &lt;- rshowp y
+                        return $ <A HREF="S .html"
+>S </A
+>++xs++<A HREF=" .html"
+> </A
+>++ys
+
+readp =  do
+                        symbol <A HREF="S.html"
+>S</A
+>     -- I included a (almost) complete Parsec for deserialization
+                        x &lt;- rreadp
+                        y &lt;- rreadp
+                        return $ S x y
+
+there is a mix between referencing and no referencing parser here:
+
+Data.RefSerialize&gt;putStrLn $ runW $ showp $ S x x
+    S  v23 v23 where {v23= 5; }</PRE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Synopsis</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+>module <A HREF="Data-Parser.html"
+>Data.Parser</A
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>class</SPAN
+>  <A HREF="#t%3ASerialize"
+>Serialize</A
+> c  <SPAN CLASS="keyword"
+>where</SPAN
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Ashowp"
+>showp</A
+> :: c -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Areadp"
+>readp</A
+> :: <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c</TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Arshowp"
+>rshowp</A
+> :: c -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3Arreadp"
+>rreadp</A
+> :: <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ArShow"
+>rShow</A
+> :: <A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> c =&gt; c -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ArRead"
+>rRead</A
+> :: <A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> c =&gt; String -&gt; c</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AinsertVar"
+>insertVar</A
+> ::  (a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String) -&gt; a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AreadVar"
+>readVar</A
+> :: <A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> c =&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AvarName"
+>varName</A
+> ::  a -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ArunR"
+>runR</A
+> ::  <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> a -&gt; String -&gt; a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3ArunW"
+>runW</A
+> :: <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AreadHexp"
+>readHexp</A
+> :: (Num a, Integral a) =&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="#v%3AshowHexp"
+>showHexp</A
+> :: (Num a, Integral a) =&gt; a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+>module <A HREF="Data-Parser.html"
+>Data.Parser</A
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>class</SPAN
+>  <A NAME="t:Serialize"
+><A NAME="t%3ASerialize"
+></A
+></A
+><B
+>Serialize</B
+> c  <SPAN CLASS="keyword"
+>where</SPAN
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="section4"
+>Methods</TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A NAME="v:showp"
+><A NAME="v%3Ashowp"
+></A
+></A
+><B
+>showp</B
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+>:: c</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="arg"
+>-&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+><TD CLASS="rdoc"
+>shows the content of a expression, must be  defined bu the user
+</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:readp"
+><A NAME="v%3Areadp"
+></A
+></A
+><B
+>readp</B
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+>:: <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c</TD
+><TD CLASS="rdoc"
+>read the content of a expression, must be user defined
+</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:rshowp"
+><A NAME="v%3Arshowp"
+></A
+></A
+><B
+>rshowp</B
+></TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+>:: c</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+><TR
+><TD CLASS="arg"
+>-&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+><TD CLASS="rdoc"
+>insert a reference (a variable in the where section).   <TT
+>rshowp  = insertVar  showp </TT
+> -- default definition
+</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:rreadp"
+><A NAME="v%3Arreadp"
+></A
+></A
+><B
+>rreadp</B
+> :: <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c</TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s8"
+></TD
+></TR
+><TR
+><TD CLASS="section4"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Serialize')" ALT="show/hide"
+> Instances</TD
+></TR
+><TR
+><TD CLASS="body"
+><DIV ID="i:Serialize" STYLE="display:block;"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="decl"
+><A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> String</TD
+></TR
+><TR
+><TD CLASS="decl"
+><A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> a =&gt; <A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> ([] a)</TD
+></TR
+></TABLE
+></DIV
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:rShow"
+><A NAME="v%3ArShow"
+></A
+></A
+><B
+>rShow</B
+> :: <A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> c =&gt; c -&gt; String</TD
+></TR
+><TR
+><TD CLASS="doc"
+>use the rshowp parser to serialize the object
+ <TT
+> rShow c= runW  $  rshowp c</TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:rRead"
+><A NAME="v%3ArRead"
+></A
+></A
+><B
+>rRead</B
+> :: <A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> c =&gt; String -&gt; c</TD
+></TR
+><TR
+><TD CLASS="doc"
+>deserialize  trough the rreadp parser
+ <TT
+> rRead str= runR rreadp $ str</TT
+>
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:insertVar"
+><A NAME="v%3AinsertVar"
+></A
+></A
+><B
+>insertVar</B
+> ::  (a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String) -&gt; a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+></TR
+><TR
+><TD CLASS="doc"
+>insert a variable at this position. The expression value is inserted the where part if it is not already
+ created. If the address of this object being parsed correspond with an address already parsed and
+ it is in the where section, then the same variable name is used
+   <TT
+>runW showp (1::Int)                                -&gt; <A HREF="1.html"
+>1</A
+>
+   runW (insertVar showp) (1::Int)                -&gt;  v1 where { v1=1}
+   runW (insertVar showp) [(1::Int) ,1]        -&gt; [v1.v1] where { v1=1}</TT
+>
+   This is useful when the object is referenced many times
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:readVar"
+><A NAME="v%3AreadVar"
+></A
+></A
+><B
+>readVar</B
+> :: <A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Serialize</A
+> c =&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> c</TD
+></TR
+><TR
+><TD CLASS="doc"
+>deserialize a variable serialized with insertVar. Memory references are restored
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:varName"
+><A NAME="v%3AvarName"
+></A
+></A
+><B
+>varName</B
+> ::  a -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:runR"
+><A NAME="v%3ArunR"
+></A
+></A
+><B
+>runR</B
+> ::  <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> a -&gt; String -&gt; a</TD
+></TR
+><TR
+><TD CLASS="doc"
+>deserialize the string with the parser
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:runW"
+><A NAME="v%3ArunW"
+></A
+></A
+><B
+>runW</B
+> :: <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String -&gt; String</TD
+></TR
+><TR
+><TD CLASS="doc"
+>serialize x with the parser
+</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:readHexp"
+><A NAME="v%3AreadHexp"
+></A
+></A
+><B
+>readHexp</B
+> :: (Num a, Integral a) =&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> a</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:showHexp"
+><A NAME="v%3AshowHexp"
+></A
+></A
+><B
+>showHexp</B
+> :: (Num a, Integral a) =&gt; a -&gt; <A HREF="Data-Parser.html#t%3AST"
+>ST</A
+> String</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 2.4.2</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/dist/doc/html/RefSerialize/Data-Serialize.html b/dist/doc/html/RefSerialize/Data-Serialize.html
new file mode 100644
--- /dev/null
+++ b/dist/doc/html/RefSerialize/Data-Serialize.html
@@ -0,0 +1,264 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Data.Serialize</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+><SCRIPT TYPE="text/javascript"
+>window.onload = function () {setSynopsis("mini_Data-Serialize.html")};</SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="modulebar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><FONT SIZE="6"
+>Data.Serialize</FONT
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Documentation</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A NAME="t:MFun"
+><A NAME="t%3AMFun"
+></A
+></A
+><B
+>MFun</B
+> = Char</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A NAME="t:VarName"
+><A NAME="t%3AVarName"
+></A
+></A
+><B
+>VarName</B
+> = String</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A NAME="t:ShowF"
+><A NAME="t%3AShowF"
+></A
+></A
+><B
+>ShowF</B
+> = String</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+> <A NAME="t:Context"
+><A NAME="t%3AContext"
+></A
+></A
+><B
+>Context</B
+> = Map Int (<A HREF="Data-Serialize.html#t%3AMFun"
+>MFun</A
+>, <A HREF="Data-Serialize.html#t%3AShowF"
+>ShowF</A
+>)</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+>  <A NAME="t:Error"
+><A NAME="t%3AError"
+></A
+></A
+><B
+>Error</B
+>  </TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="section4"
+>Constructors</TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+><A NAME="v:Error"
+><A NAME="v%3AError"
+></A
+></A
+><B
+>Error</B
+> String</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+>  <A NAME="t:Stat"
+><A NAME="t%3AStat"
+></A
+></A
+><B
+>Stat</B
+>  </TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="section4"
+>Constructors</TD
+></TR
+><TR
+><TD CLASS="body"
+><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
+><TR
+><TD CLASS="arg"
+><A NAME="v:Stat"
+><A NAME="v%3AStat"
+></A
+></A
+><B
+>Stat</B
+> (<A HREF="Data-Serialize.html#t%3AContext"
+>Context</A
+>, String, String)</TD
+><TD CLASS="rdoc"
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:varName"
+><A NAME="v%3AvarName"
+></A
+></A
+><B
+>varName</B
+> ::  a -&gt; String</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="decl"
+><A NAME="v:numVar"
+><A NAME="v%3AnumVar"
+></A
+></A
+><B
+>numVar</B
+> :: String -&gt; Int</TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 2.4.2</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/dist/doc/html/RefSerialize/doc-index.html b/dist/doc/html/RefSerialize/doc-index.html
new file mode 100644
--- /dev/null
+++ b/dist/doc/html/RefSerialize/doc-index.html
@@ -0,0 +1,526 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+> (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD COLSPAN="2" STYLE="padding-top:5px;"
+><FORM onsubmit="full_search(); return false;" ACTION=""
+>Search: <INPUT ID="searchbox" onkeyup="quick_search()"
+> <INPUT VALUE="Search" TYPE="submit"
+> <SPAN ID="searchmsg"
+> </SPAN
+></FORM
+></TD
+></TR
+><TR
+><TD
+><TABLE ID="indexlist" CELLPADDING="0" CELLSPACING="5"
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>&lt;?&gt;</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>&lt;|&gt;</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>angles</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>anyChar</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>between</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>bool</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>braces</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>brackets</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>char</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Parser.html#v%3Achar"
+>Data.Parser</A
+>, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>charLiteral</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>choice</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>colon</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>comma</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>commaSep</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>commaSep1</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>Context</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#t%3AContext"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>debug</TD
+><TD CLASS="indexlinks"
+>Data.Serialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>decimal</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>digit</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>dot</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry" COLSPAN="2"
+>Error</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexannot"
+>1 (Type/Class)</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#t%3AError"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexannot"
+>2 (Data Constructor)</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#v%3AError"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>float</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>hasht</TD
+><TD CLASS="indexlinks"
+>Data.Serialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>hexadecimal</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>insertVar</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3AinsertVar"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>integer</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>lexeme</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>many</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Parser.html#v%3Amany"
+>Data.Parser</A
+>, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>MFun</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#t%3AMFun"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>natural</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>naturalOrFloat</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>notFollowedBy</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>numVar</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#v%3AnumVar"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>octal</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>option</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>parens</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>readContext</TD
+><TD CLASS="indexlinks"
+>Data.Serialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>readHexp</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3AreadHexp"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>readp</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3Areadp"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>readVar</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3AreadVar"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>rRead</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3ArRead"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>rreadp</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3Arreadp"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>rShow</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3ArShow"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>rshowp</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3Arshowp"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>runR</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3ArunR"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>runW</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3ArunW"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>semi</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>semiSep</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>semiSep1</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>sepBy</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Parser.html#v%3AsepBy"
+>Data.Parser</A
+>, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>Serialize</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>ShowF</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#t%3AShowF"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>showHexp</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3AshowHexp"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>showp</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3Ashowp"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>space</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry" COLSPAN="2"
+>ST</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexannot"
+>1 (Type/Class)</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Parser.html#t%3AST"
+>Data.Parser</A
+>, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexannot"
+>2 (Data Constructor)</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Parser.html#v%3AST"
+>Data.Parser</A
+>, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry" COLSPAN="2"
+>Stat</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexannot"
+>1 (Type/Class)</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#t%3AStat"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexannot"
+>2 (Data Constructor)</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#v%3AStat"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>string</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>stringLiteral</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>symbol</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>upper</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>VarName</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#t%3AVarName"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>varName</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#v%3AvarName"
+>Data.Serialize</A
+>, <A HREF="Data-RefSerialize.html#v%3AvarName"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>whiteSpace</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/dist/doc/html/RefSerialize/frames.html b/dist/doc/html/RefSerialize/frames.html
new file mode 100644
--- /dev/null
+++ b/dist/doc/html/RefSerialize/frames.html
@@ -0,0 +1,27 @@
+<html>
+<head>
+<script type="text/javascript"><!--
+/*
+
+  The synopsis frame needs to be updated using javascript, so we hide
+  it by default and only show it if javascript is enabled.
+
+  TODO: provide some means to disable it.
+*/
+function load() {
+  var d = document.getElementById("inner-fs");
+  d.rows = "50%,50%";
+}
+--></script>
+<frameset id="outer-fs" cols="25%,75%" onload="load()">
+  <frameset id="inner-fs" rows="100%,0%">
+
+    <frame src="index-frames.html" name="modules">
+    <frame src="" name="synopsis">
+
+  </frameset>
+  <frame src="index.html" name="main">
+
+</frameset>
+
+</html>
diff --git a/dist/doc/html/RefSerialize/haddock-util.js b/dist/doc/html/RefSerialize/haddock-util.js
new file mode 100644
--- /dev/null
+++ b/dist/doc/html/RefSerialize/haddock-util.js
@@ -0,0 +1,139 @@
+// Haddock JavaScript utilities
+function toggle(button,id)
+{
+   var n = document.getElementById(id).style;
+   if (n.display == "none")
+   {
+    button.src = "minus.gif";
+    n.display = "block";
+   }
+   else
+   {
+    button.src = "plus.gif";
+    n.display = "none";
+   }
+}
+
+
+var max_results = 75; // 50 is not enough to search for map in the base libraries
+var shown_range = null;
+var last_search = null;
+
+function quick_search()
+{
+    perform_search(false);
+}
+
+function full_search()
+{
+    perform_search(true);
+}
+
+
+function perform_search(full)
+{
+    var text = document.getElementById("searchbox").value.toLowerCase();
+    if (text == last_search && !full) return;
+    last_search = text;
+    
+    var table = document.getElementById("indexlist");
+    var status = document.getElementById("searchmsg");
+    var children = table.firstChild.childNodes;
+    
+    // first figure out the first node with the prefix
+    var first = bisect(-1);
+    var last = (first == -1 ? -1 : bisect(1));
+
+    if (first == -1)
+    {
+        table.className = "";
+        status.innerHTML = "No results found, displaying all";
+    }
+    else if (first == 0 && last == children.length - 1)
+    {
+        table.className = "";
+        status.innerHTML = "";
+    }
+    else if (last - first >= max_results && !full)
+    {
+        table.className = "";
+        status.innerHTML = "More than " + max_results + ", press Search to display";
+    }
+    else
+    {
+        // decide what you need to clear/show
+        if (shown_range)
+            setclass(shown_range[0], shown_range[1], "indexrow");
+        setclass(first, last, "indexshow");
+        shown_range = [first, last];
+        table.className = "indexsearch";
+        status.innerHTML = "";
+    }
+
+    
+    function setclass(first, last, status)
+    {
+        for (var i = first; i <= last; i++)
+        {
+            children[i].className = status;
+        }
+    }
+    
+    
+    // do a binary search, treating 0 as ...
+    // return either -1 (no 0's found) or location of most far match
+    function bisect(dir)
+    {
+        var first = 0, finish = children.length - 1;
+        var mid, success = false;
+
+        while (finish - first > 3)
+        {
+            mid = Math.floor((finish + first) / 2);
+
+            var i = checkitem(mid);
+            if (i == 0) i = dir;
+            if (i == -1)
+                finish = mid;
+            else
+                first = mid;
+        }
+        var a = (dir == 1 ? first : finish);
+        var b = (dir == 1 ? finish : first);
+        for (var i = b; i != a - dir; i -= dir)
+        {
+            if (checkitem(i) == 0) return i;
+        }
+        return -1;
+    }    
+    
+    
+    // from an index, decide what the result is
+    // 0 = match, -1 is lower, 1 is higher
+    function checkitem(i)
+    {
+        var s = getitem(i).toLowerCase().substr(0, text.length);
+        if (s == text) return 0;
+        else return (s > text ? -1 : 1);
+    }
+    
+    
+    // from an index, get its string
+    // this abstracts over alternates
+    function getitem(i)
+    {
+        for ( ; i >= 0; i--)
+        {
+            var s = children[i].firstChild.firstChild.data;
+            if (s.indexOf(' ') == -1)
+                return s;
+        }
+        return ""; // should never be reached
+    }
+}
+
+function setSynopsis(filename) {
+    if (parent.window.synopsis) {
+      parent.window.synopsis.location = filename;
+    }
+}
diff --git a/dist/doc/html/RefSerialize/haddock.css b/dist/doc/html/RefSerialize/haddock.css
new file mode 100644
--- /dev/null
+++ b/dist/doc/html/RefSerialize/haddock.css
@@ -0,0 +1,297 @@
+/* -------- Global things --------- */
+
+BODY { 
+  background-color: #ffffff;
+  color: #000000;
+  font-family: sans-serif;
+  padding: 0 0;
+  } 
+
+A:link    { color: #0000e0; text-decoration: none }
+A:visited { color: #0000a0; text-decoration: none }
+A:hover   { background-color: #e0e0ff; text-decoration: none }
+
+TABLE.vanilla {
+  width: 100%;
+  border-width: 0px;
+  /* I can't seem to specify cellspacing or cellpadding properly using CSS... */
+}
+
+TABLE.vanilla2 {
+  border-width: 0px;
+}
+
+/* <TT> font is a little too small in MSIE */
+TT  { font-size: 100%; }
+PRE { font-size: 100%; }
+
+LI P { margin: 0pt } 
+
+TD {
+  border-width: 0px;
+}
+
+TABLE.narrow {
+  border-width: 0px;
+}
+
+TD.s8  {  height: 8px;  }
+TD.s15 {  height: 15px; }
+
+SPAN.keyword { text-decoration: underline; }
+
+/* Resize the buttom image to match the text size */
+IMG.coll { width : 0.75em; height: 0.75em; margin-bottom: 0; margin-right: 0.5em }
+
+/* --------- Contents page ---------- */
+
+DIV.node {
+  padding-left: 3em;
+}
+
+DIV.cnode {
+  padding-left: 1.75em;
+}
+
+SPAN.pkg {
+  position: absolute;
+  left: 50em;
+}
+
+/* --------- Documentation elements ---------- */
+
+TD.children {
+  padding-left: 25px;
+  }
+
+TD.synopsis {
+  padding: 2px;
+  background-color: #f0f0f0;
+  font-family: monospace
+ }
+
+TD.decl { 
+  padding: 2px;
+  background-color: #f0f0f0; 
+  font-family: monospace;
+  vertical-align: top;
+  }
+
+TD.topdecl {
+  padding: 2px;
+  background-color: #f0f0f0;
+  font-family: monospace;
+  vertical-align: top;
+}
+
+TABLE.declbar {
+  border-spacing: 0px;
+ }
+
+TD.declname {
+  width: 100%;
+ }
+
+TD.declbut {
+  padding-left: 5px;
+  padding-right: 5px;
+  border-left-width: 1px;
+  border-left-color: #000099;
+  border-left-style: solid;
+  white-space: nowrap;
+  font-size: small;
+ }
+
+/* 
+  arg is just like decl, except that wrapping is not allowed.  It is
+  used for function and constructor arguments which have a text box
+  to the right, where if wrapping is allowed the text box squashes up
+  the declaration by wrapping it.
+*/
+TD.arg { 
+  padding: 2px;
+  background-color: #f0f0f0; 
+  font-family: monospace;
+  vertical-align: top;
+  white-space: nowrap;
+  }
+
+TD.recfield { padding-left: 20px }
+
+TD.doc  { 
+  padding-top: 2px;
+  padding-left: 10px;
+  }
+
+TD.ndoc  { 
+  padding: 2px;
+  }
+
+TD.rdoc  { 
+  padding: 2px;
+  padding-left: 10px;
+  width: 100%;
+  }
+
+TD.body  { 
+  padding-left: 10px
+  }
+
+TD.pkg {
+  width: 100%;
+  padding-left: 10px
+}
+
+TABLE.indexsearch TR.indexrow {
+  display: none;
+}
+TABLE.indexsearch TR.indexshow {
+  display: table-row;
+}
+
+TD.indexentry {
+  vertical-align: top;
+  padding-right: 10px
+  }
+
+TD.indexannot {
+  vertical-align: top;
+  padding-left: 20px;
+  white-space: nowrap
+  }
+
+TD.indexlinks {
+  width: 100%
+  }
+
+/* ------- Section Headings ------- */
+
+TD.section1 {
+  padding-top: 15px;
+  font-weight: bold;
+  font-size: 150%
+  }
+
+TD.section2 {
+  padding-top: 10px;
+  font-weight: bold;
+  font-size: 130%
+  }
+
+TD.section3 {
+  padding-top: 5px;
+  font-weight: bold;
+  font-size: 110%
+  }
+
+TD.section4 {
+  font-weight: bold;
+  font-size: 100%
+  }
+
+/* -------------- The title bar at the top of the page */
+
+TD.infohead {
+  color: #ffffff;
+  font-weight: bold;
+  padding-right: 10px;
+  text-align: left;
+}
+
+TD.infoval {
+  color: #ffffff;
+  padding-right: 10px;
+  text-align: left;
+}
+
+TD.topbar {
+  background-color: #000099;
+  padding: 5px;
+}
+
+TD.title {
+  color: #ffffff;
+  padding-left: 10px;
+  width: 100%
+  }
+
+TD.topbut {
+  padding-left: 5px;
+  padding-right: 5px;
+  border-left-width: 1px;
+  border-left-color: #ffffff;
+  border-left-style: solid;
+  white-space: nowrap;
+  }
+
+TD.topbut A:link {
+  color: #ffffff
+  }
+
+TD.topbut A:visited {
+  color: #ffff00
+  }
+
+TD.topbut A:hover {
+  background-color: #6060ff;
+  }
+
+TD.topbut:hover {
+  background-color: #6060ff
+  }
+
+TD.modulebar { 
+  background-color: #0077dd;
+  padding: 5px;
+  border-top-width: 1px;
+  border-top-color: #ffffff;
+  border-top-style: solid;
+  }
+
+/* --------- The page footer --------- */
+
+TD.botbar {
+  background-color: #000099;
+  color: #ffffff;
+  padding: 5px
+  }
+TD.botbar A:link {
+  color: #ffffff;
+  text-decoration: underline
+  }
+TD.botbar A:visited {
+  color: #ffff00
+  }
+TD.botbar A:hover {
+  background-color: #6060ff
+  }
+
+/* --------- Mini Synopsis for Frame View --------- */
+
+.outer {
+  margin: 0 0;
+  padding: 0 0;
+}
+
+.mini-synopsis {
+  padding: 0.25em 0.25em;
+}
+
+.mini-synopsis H1 { font-size: 130%; }
+.mini-synopsis H2 { font-size: 110%; }
+.mini-synopsis H3 { font-size: 100%; }
+.mini-synopsis H1, .mini-synopsis H2, .mini-synopsis H3 {
+  margin-top: 0.5em;
+  margin-bottom: 0.25em;
+  padding: 0 0;
+}
+
+.mini-synopsis H1 { border-bottom: 1px solid #ccc; }
+
+.mini-topbar {
+  font-size: 130%;
+  background: #0077dd;
+  padding: 0.25em;
+}
+
+
diff --git a/dist/doc/html/RefSerialize/haskell_icon.gif b/dist/doc/html/RefSerialize/haskell_icon.gif
new file mode 100644
Binary files /dev/null and b/dist/doc/html/RefSerialize/haskell_icon.gif differ
diff --git a/dist/doc/html/RefSerialize/index-frames.html b/dist/doc/html/RefSerialize/index-frames.html
new file mode 100644
--- /dev/null
+++ b/dist/doc/html/RefSerialize/index-frames.html
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+></TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><P
+><A HREF="Data-Parser.html" TARGET="main"
+>Data.Parser</A
+><BR
+><A HREF="Data-RefSerialize.html" TARGET="main"
+>Data.RefSerialize</A
+><BR
+><A HREF="Data-Serialize.html" TARGET="main"
+>Data.Serialize</A
+><BR
+></P
+></TABLE
+></BODY
+></HTML
+>
diff --git a/dist/doc/html/RefSerialize/index.html b/dist/doc/html/RefSerialize/index.html
new file mode 100644
--- /dev/null
+++ b/dist/doc/html/RefSerialize/index.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+></TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Modules</TD
+></TR
+><TR
+><TD
+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD STYLE="width: 50em"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:0')" ALT="show/hide"
+>Data</TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"
+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:0" STYLE="display:block;"
+><TR
+><TD STYLE="padding-left: 1.25em;width: 48em"
+><A HREF="Data-Parser.html"
+>Data.Parser</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 48em"
+><A HREF="Data-RefSerialize.html"
+>Data.RefSerialize</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 48em"
+><A HREF="Data-Serialize.html"
+>Data.Serialize</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 2.4.2</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/dist/doc/html/RefSerialize/mini_Data-Parser.html b/dist/doc/html/RefSerialize/mini_Data-Parser.html
new file mode 100644
--- /dev/null
+++ b/dist/doc/html/RefSerialize/mini_Data-Parser.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Data.Parser</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><DIV CLASS="outer"
+><DIV CLASS="mini-topbar"
+>Data.Parser</DIV
+><DIV CLASS="mini-synopsis"
+><DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+>&nbsp;<A HREF="Data-Parser.html#t%3AST" TARGET="main"
+>ST</A
+> a</DIV
+>   <DIV CLASS="decl"
+><A HREF="Data-Parser.html#v%3Achar" TARGET="main"
+>char</A
+></DIV
+>      <DIV CLASS="decl"
+><A HREF="Data-Parser.html#v%3AsepBy" TARGET="main"
+>sepBy</A
+></DIV
+>     <DIV CLASS="decl"
+><A HREF="Data-Parser.html#v%3Amany" TARGET="main"
+>many</A
+></DIV
+>                         </DIV
+></DIV
+></BODY
+></HTML
+>
diff --git a/dist/doc/html/RefSerialize/mini_Data-RefSerialize.html b/dist/doc/html/RefSerialize/mini_Data-RefSerialize.html
new file mode 100644
--- /dev/null
+++ b/dist/doc/html/RefSerialize/mini_Data-RefSerialize.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Data.RefSerialize</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><DIV CLASS="outer"
+><DIV CLASS="mini-topbar"
+>Data.RefSerialize</DIV
+><DIV CLASS="mini-synopsis"
+> <DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>class</SPAN
+>&nbsp;<A HREF="Data-RefSerialize.html#t%3ASerialize" TARGET="main"
+>Serialize</A
+> c</DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3ArShow" TARGET="main"
+>rShow</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3ArRead" TARGET="main"
+>rRead</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3AinsertVar" TARGET="main"
+>insertVar</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3AreadVar" TARGET="main"
+>readVar</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3AvarName" TARGET="main"
+>varName</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3ArunR" TARGET="main"
+>runR</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3ArunW" TARGET="main"
+>runW</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3AreadHexp" TARGET="main"
+>readHexp</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3AshowHexp" TARGET="main"
+>showHexp</A
+></DIV
+></DIV
+></DIV
+></BODY
+></HTML
+>
diff --git a/dist/doc/html/RefSerialize/mini_Data-Serialize.html b/dist/doc/html/RefSerialize/mini_Data-Serialize.html
new file mode 100644
--- /dev/null
+++ b/dist/doc/html/RefSerialize/mini_Data-Serialize.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Data.Serialize</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><DIV CLASS="outer"
+><DIV CLASS="mini-topbar"
+>Data.Serialize</DIV
+><DIV CLASS="mini-synopsis"
+><DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+>&nbsp;<A HREF="Data-Serialize.html#t%3AMFun" TARGET="main"
+>MFun</A
+> </DIV
+> <DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+>&nbsp;<A HREF="Data-Serialize.html#t%3AVarName" TARGET="main"
+>VarName</A
+> </DIV
+> <DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+>&nbsp;<A HREF="Data-Serialize.html#t%3AShowF" TARGET="main"
+>ShowF</A
+> </DIV
+> <DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+>&nbsp;<A HREF="Data-Serialize.html#t%3AContext" TARGET="main"
+>Context</A
+> </DIV
+> <DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+>&nbsp;<A HREF="Data-Serialize.html#t%3AError" TARGET="main"
+>Error</A
+> </DIV
+> <DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+>&nbsp;<A HREF="Data-Serialize.html#t%3AStat" TARGET="main"
+>Stat</A
+> </DIV
+> <DIV CLASS="decl"
+><A HREF="Data-Serialize.html#v%3AvarName" TARGET="main"
+>varName</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-Serialize.html#v%3AnumVar" TARGET="main"
+>numVar</A
+></DIV
+></DIV
+></DIV
+></BODY
+></HTML
+>
diff --git a/dist/doc/html/RefSerialize/minus.gif b/dist/doc/html/RefSerialize/minus.gif
new file mode 100644
Binary files /dev/null and b/dist/doc/html/RefSerialize/minus.gif differ
diff --git a/dist/doc/html/RefSerialize/plus.gif b/dist/doc/html/RefSerialize/plus.gif
new file mode 100644
Binary files /dev/null and b/dist/doc/html/RefSerialize/plus.gif differ
diff --git a/dist/setup-config b/dist/setup-config
new file mode 100644
--- /dev/null
+++ b/dist/setup-config
@@ -0,0 +1,2 @@
+Saved package config for RefSerialize-0.2.4 written by Cabal-1.6.0.3 using ghc-6.10
+LocalBuildInfo {installDirTemplates = InstallDirs {prefix = "C:\\Archivos de programa\\Haskell", bindir = "$prefix\\bin", libdir = "$prefix", libsubdir = "$pkgid\\$compiler", dynlibdir = "$libdir", libexecdir = "$prefix\\$pkgid", progdir = "$libdir\\hugs\\programs", includedir = "$libdir\\$libsubdir\\include", datadir = "C:\\Archivos de programa\\Haskell", datasubdir = "$pkgid", docdir = "$prefix\\doc\\$pkgid", mandir = "$datadir\\man", htmldir = "$docdir\\html", haddockdir = "$htmldir"}, compiler = Compiler {compilerId = CompilerId GHC (Version {versionBranch = [6,10,3], versionTags = []}), compilerExtensions = [(CPP,"-XCPP"),(PostfixOperators,"-XPostfixOperators"),(PatternGuards,"-XPatternGuards"),(UnicodeSyntax,"-XUnicodeSyntax"),(MagicHash,"-XMagicHash"),(PolymorphicComponents,"-XPolymorphicComponents"),(ExistentialQuantification,"-XExistentialQuantification"),(KindSignatures,"-XKindSignatures"),(EmptyDataDecls,"-XEmptyDataDecls"),(ParallelListComp,"-XParallelListComp"),(TransformListComp,"-XTransformListComp"),(ForeignFunctionInterface,"-XForeignFunctionInterface"),(UnliftedFFITypes,"-XUnliftedFFITypes"),(LiberalTypeSynonyms,"-XLiberalTypeSynonyms"),(Rank2Types,"-XRank2Types"),(RankNTypes,"-XRankNTypes"),(ImpredicativeTypes,"-XImpredicativeTypes"),(TypeOperators,"-XTypeOperators"),(RecursiveDo,"-XRecursiveDo"),(Arrows,"-XArrows"),(UnknownExtension "PArr","-XPArr"),(TemplateHaskell,"-XTemplateHaskell"),(QuasiQuotes,"-XQuasiQuotes"),(Generics,"-XGenerics"),(NoImplicitPrelude,"-XNoImplicitPrelude"),(RecordWildCards,"-XRecordWildCards"),(NamedFieldPuns,"-XNamedFieldPuns"),(RecordPuns,"-XRecordPuns"),(DisambiguateRecordFields,"-XDisambiguateRecordFields"),(OverloadedStrings,"-XOverloadedStrings"),(GADTs,"-XGADTs"),(ViewPatterns,"-XViewPatterns"),(TypeFamilies,"-XTypeFamilies"),(BangPatterns,"-XBangPatterns"),(NoMonomorphismRestriction,"-XNoMonomorphismRestriction"),(NoMonoPatBinds,"-XNoMonoPatBinds"),(RelaxedPolyRec,"-XRelaxedPolyRec"),(ExtendedDefaultRules,"-XExtendedDefaultRules"),(ImplicitParams,"-XImplicitParams"),(ScopedTypeVariables,"-XScopedTypeVariables"),(PatternSignatures,"-XPatternSignatures"),(UnboxedTuples,"-XUnboxedTuples"),(StandaloneDeriving,"-XStandaloneDeriving"),(DeriveDataTypeable,"-XDeriveDataTypeable"),(TypeSynonymInstances,"-XTypeSynonymInstances"),(FlexibleContexts,"-XFlexibleContexts"),(FlexibleInstances,"-XFlexibleInstances"),(ConstrainedClassMethods,"-XConstrainedClassMethods"),(MultiParamTypeClasses,"-XMultiParamTypeClasses"),(FunctionalDependencies,"-XFunctionalDependencies"),(GeneralizedNewtypeDeriving,"-XGeneralizedNewtypeDeriving"),(OverlappingInstances,"-XOverlappingInstances"),(UndecidableInstances,"-XUndecidableInstances"),(IncoherentInstances,"-XIncoherentInstances"),(PackageImports,"-XPackageImports"),(NewQualifiedOperators,"-XNewQualifiedOperators")]}, buildDir = "dist\\build", scratchDir = "dist\\scratch", packageDeps = [PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,1,0,0], versionTags = []}},PackageIdentifier {pkgName = PackageName "containers", pkgVersion = Version {versionBranch = [0,2,0,1], versionTags = []}}], installedPkgs = PackageIndex (fromList [(PackageName "array",[InstalledPackageInfo {package = PackageIdentifier {pkgName = PackageName "array", pkgVersion = Version {versionBranch = [0,2,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package defines the classes @IArray@ of immutable arrays and\n@MArray@ of arrays mutable within appropriate monads, as well as\nsome instances of these classes.", category = "Data Structures", exposed = True, exposedModules = [ModuleName ["Data","Array","Base"],ModuleName ["Data","Array","Diff"],ModuleName ["Data","Array","IArray"],ModuleName ["Data","Array","IO"],ModuleName ["Data","Array","IO","Internals"],ModuleName ["Data","Array","MArray"],ModuleName ["Data","Array","ST"],ModuleName ["Data","Array","Storable"],ModuleName ["Data","Array","Unboxed"],ModuleName ["Data","Array"]], hiddenModules = [], importDirs = ["C:\\ghc\\ghc-6.10.3\\array-0.2.0.0"], libraryDirs = ["C:\\ghc\\ghc-6.10.3\\array-0.2.0.0"], hsLibraries = ["HSarray-0.2.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,1,0,0], versionTags = []}},PackageIdentifier {pkgName = PackageName "syb", pkgVersion = Version {versionBranch = [0,1,0,1], versionTags = []}}], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["C:\\ghc\\ghc-6.10.3/doc/libraries/array\\array.haddock"], haddockHTMLs = ["$httptopdir/doc/libraries/array"]}]),(PackageName "base",[InstalledPackageInfo {package = PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,1,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains the Prelude and its support libraries,\nand a large collection of useful libraries ranging from data\nstructures to parsing combinators and debugging utilities.", category = "", exposed = True, exposedModules = [ModuleName ["Foreign","Concurrent"],ModuleName ["GHC","Arr"],ModuleName ["GHC","Base"],ModuleName ["GHC","Classes"],ModuleName ["GHC","Conc"],ModuleName ["GHC","ConsoleHandler"],ModuleName ["GHC","Desugar"],ModuleName ["GHC","Enum"],ModuleName ["GHC","Environment"],ModuleName ["GHC","Err"],ModuleName ["GHC","Exception"],ModuleName ["GHC","Exts"],ModuleName ["GHC","Float"],ModuleName ["GHC","ForeignPtr"],ModuleName ["GHC","Handle"],ModuleName ["GHC","IO"],ModuleName ["GHC","IOBase"],ModuleName ["GHC","Int"],ModuleName ["GHC","List"],ModuleName ["GHC","Num"],ModuleName ["GHC","PArr"],ModuleName ["GHC","Pack"],ModuleName ["GHC","Ptr"],ModuleName ["GHC","Read"],ModuleName ["GHC","Real"],ModuleName ["GHC","ST"],ModuleName ["GHC","STRef"],ModuleName ["GHC","Show"],ModuleName ["GHC","Stable"],ModuleName ["GHC","Storable"],ModuleName ["GHC","TopHandler"],ModuleName ["GHC","Unicode"],ModuleName ["GHC","Weak"],ModuleName ["GHC","Word"],ModuleName ["System","Timeout"],ModuleName ["Control","Applicative"],ModuleName ["Control","Arrow"],ModuleName ["Control","Category"],ModuleName ["Control","Concurrent"],ModuleName ["Control","Concurrent","Chan"],ModuleName ["Control","Concurrent","MVar"],ModuleName ["Control","Concurrent","QSem"],ModuleName ["Control","Concurrent","QSemN"],ModuleName ["Control","Concurrent","SampleVar"],ModuleName ["Control","Exception"],ModuleName ["Control","Exception","Base"],ModuleName ["Control","OldException"],ModuleName ["Control","Monad"],ModuleName ["Control","Monad","Fix"],ModuleName ["Control","Monad","Instances"],ModuleName ["Control","Monad","ST"],ModuleName ["Control","Monad","ST","Lazy"],ModuleName ["Control","Monad","ST","Strict"],ModuleName ["Data","Bits"],ModuleName ["Data","Bool"],ModuleName ["Data","Char"],ModuleName ["Data","Complex"],ModuleName ["Data","Dynamic"],ModuleName ["Data","Either"],ModuleName ["Data","Eq"],ModuleName ["Data","Data"],ModuleName ["Data","Fixed"],ModuleName ["Data","Foldable"],ModuleName ["Data","Function"],ModuleName ["Data","HashTable"],ModuleName ["Data","IORef"],ModuleName ["Data","Int"],ModuleName ["Data","Ix"],ModuleName ["Data","List"],ModuleName ["Data","Maybe"],ModuleName ["Data","Monoid"],ModuleName ["Data","Ord"],ModuleName ["Data","Ratio"],ModuleName ["Data","STRef"],ModuleName ["Data","STRef","Lazy"],ModuleName ["Data","STRef","Strict"],ModuleName ["Data","String"],ModuleName ["Data","Traversable"],ModuleName ["Data","Tuple"],ModuleName ["Data","Typeable"],ModuleName ["Data","Unique"],ModuleName ["Data","Version"],ModuleName ["Data","Word"],ModuleName ["Debug","Trace"],ModuleName ["Foreign"],ModuleName ["Foreign","C"],ModuleName ["Foreign","C","Error"],ModuleName ["Foreign","C","String"],ModuleName ["Foreign","C","Types"],ModuleName ["Foreign","ForeignPtr"],ModuleName ["Foreign","Marshal"],ModuleName ["Foreign","Marshal","Alloc"],ModuleName ["Foreign","Marshal","Array"],ModuleName ["Foreign","Marshal","Error"],ModuleName ["Foreign","Marshal","Pool"],ModuleName ["Foreign","Marshal","Utils"],ModuleName ["Foreign","Ptr"],ModuleName ["Foreign","StablePtr"],ModuleName ["Foreign","Storable"],ModuleName ["Numeric"],ModuleName ["Prelude"],ModuleName ["System","Console","GetOpt"],ModuleName ["System","CPUTime"],ModuleName ["System","Environment"],ModuleName ["System","Exit"],ModuleName ["System","IO"],ModuleName ["System","IO","Error"],ModuleName ["System","IO","Unsafe"],ModuleName ["System","Info"],ModuleName ["System","Mem"],ModuleName ["System","Mem","StableName"],ModuleName ["System","Mem","Weak"],ModuleName ["System","Posix","Internals"],ModuleName ["System","Posix","Types"],ModuleName ["Text","ParserCombinators","ReadP"],ModuleName ["Text","ParserCombinators","ReadPrec"],ModuleName ["Text","Printf"],ModuleName ["Text","Read"],ModuleName ["Text","Read","Lex"],ModuleName ["Text","Show"],ModuleName ["Text","Show","Functions"],ModuleName ["Unsafe","Coerce"]], hiddenModules = [], importDirs = ["C:\\ghc\\ghc-6.10.3\\base-4.1.0.0"], libraryDirs = ["C:\\ghc\\ghc-6.10.3\\base-4.1.0.0"], hsLibraries = ["HSbase-4.1.0.0"], extraLibraries = ["wsock32","msvcrt","kernel32","user32","shell32"], extraGHCiLibraries = [], includeDirs = ["C:\\ghc\\ghc-6.10.3\\base-4.1.0.0\\include"], includes = ["HsBase.h"], depends = [PackageIdentifier {pkgName = PackageName "ghc-prim", pkgVersion = Version {versionBranch = [0,1,0,0], versionTags = []}},PackageIdentifier {pkgName = PackageName "integer", pkgVersion = Version {versionBranch = [0,1,0,1], versionTags = []}},PackageIdentifier {pkgName = PackageName "rts", pkgVersion = Version {versionBranch = [1,0], versionTags = []}}], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["C:\\ghc\\ghc-6.10.3/doc/libraries/base\\base.haddock"], haddockHTMLs = ["$httptopdir/doc/libraries/base"]}]),(PackageName "containers",[InstalledPackageInfo {package = PackageIdentifier {pkgName = PackageName "containers", pkgVersion = Version {versionBranch = [0,2,0,1], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains efficient general-purpose implementations\nof various basic immutable container types.  The declared cost of\neach operation is either worst-case or amortized, but remains\nvalid even if structures are shared.", category = "Data Structures", exposed = True, exposedModules = [ModuleName ["Data","Graph"],ModuleName ["Data","IntMap"],ModuleName ["Data","IntSet"],ModuleName ["Data","Map"],ModuleName ["Data","Sequence"],ModuleName ["Data","Set"],ModuleName ["Data","Tree"]], hiddenModules = [], importDirs = ["C:\\ghc\\ghc-6.10.3\\containers-0.2.0.1"], libraryDirs = ["C:\\ghc\\ghc-6.10.3\\containers-0.2.0.1"], hsLibraries = ["HScontainers-0.2.0.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [PackageIdentifier {pkgName = PackageName "array", pkgVersion = Version {versionBranch = [0,2,0,0], versionTags = []}},PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,1,0,0], versionTags = []}}], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["C:\\ghc\\ghc-6.10.3/doc/libraries/containers\\containers.haddock"], haddockHTMLs = ["$httptopdir/doc/libraries/containers"]}]),(PackageName "ghc-prim",[InstalledPackageInfo {package = PackageIdentifier {pkgName = PackageName "ghc-prim", pkgVersion = Version {versionBranch = [0,1,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "GHC primitives.", category = "", exposed = True, exposedModules = [ModuleName ["GHC","Prim"],ModuleName ["GHC","Bool"],ModuleName ["GHC","Generics"],ModuleName ["GHC","Ordering"],ModuleName ["GHC","PrimopWrappers"],ModuleName ["GHC","IntWord32"],ModuleName ["GHC","IntWord64"],ModuleName ["GHC","Tuple"],ModuleName ["GHC","Types"],ModuleName ["GHC","Unit"]], hiddenModules = [], importDirs = ["C:\\ghc\\ghc-6.10.3\\ghc-prim-0.1.0.0"], libraryDirs = ["C:\\ghc\\ghc-6.10.3\\ghc-prim-0.1.0.0"], hsLibraries = ["HSghc-prim-0.1.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [PackageIdentifier {pkgName = PackageName "rts", pkgVersion = Version {versionBranch = [1,0], versionTags = []}}], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["C:\\ghc\\ghc-6.10.3/doc/libraries/ghc-prim\\ghc-prim.haddock"], haddockHTMLs = ["$httptopdir/doc/libraries/ghc-prim"]}]),(PackageName "integer",[InstalledPackageInfo {package = PackageIdentifier {pkgName = PackageName "integer", pkgVersion = Version {versionBranch = [0,1,0,1], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains an Integer library based on GMP.", category = "", exposed = True, exposedModules = [ModuleName ["GHC","Integer"],ModuleName ["GHC","Integer","Internals"]], hiddenModules = [], importDirs = ["C:\\ghc\\ghc-6.10.3\\integer-0.1.0.1"], libraryDirs = ["C:\\ghc\\ghc-6.10.3\\integer-0.1.0.1"], hsLibraries = ["HSinteger-0.1.0.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [PackageIdentifier {pkgName = PackageName "ghc-prim", pkgVersion = Version {versionBranch = [0,1,0,0], versionTags = []}}], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["C:\\ghc\\ghc-6.10.3/doc/libraries/integer\\integer.haddock"], haddockHTMLs = ["$httptopdir/doc/libraries/integer"]}]),(PackageName "rts",[InstalledPackageInfo {package = PackageIdentifier {pkgName = PackageName "rts", pkgVersion = Version {versionBranch = [1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "glasgow-haskell-users@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "", category = "", exposed = True, exposedModules = [], hiddenModules = [], importDirs = [], libraryDirs = ["C:\\ghc\\ghc-6.10.3","C:\\ghc\\ghc-6.10.3/gcc-lib"], hsLibraries = ["HSrts"], extraLibraries = ["m","ffi","gmp","wsock32"], extraGHCiLibraries = [], includeDirs = ["C:\\ghc\\ghc-6.10.3/include","PAPI_INCLUDE_DIR"], includes = ["Stg.h"], depends = [], hugsOptions = [], ccOptions = [], ldOptions = ["-u","_ghczmprim_GHCziTypes_Izh_static_info","-u","_ghczmprim_GHCziTypes_Czh_static_info","-u","_ghczmprim_GHCziTypes_Fzh_static_info","-u","_ghczmprim_GHCziTypes_Dzh_static_info","-u","_base_GHCziPtr_Ptr_static_info","-u","_base_GHCziWord_Wzh_static_info","-u","_base_GHCziInt_I8zh_static_info","-u","_base_GHCziInt_I16zh_static_info","-u","_base_GHCziInt_I32zh_static_info","-u","_base_GHCziInt_I64zh_static_info","-u","_base_GHCziWord_W8zh_static_info","-u","_base_GHCziWord_W16zh_static_info","-u","_base_GHCziWord_W32zh_static_info","-u","_base_GHCziWord_W64zh_static_info","-u","_base_GHCziStable_StablePtr_static_info","-u","_ghczmprim_GHCziTypes_Izh_con_info","-u","_ghczmprim_GHCziTypes_Czh_con_info","-u","_ghczmprim_GHCziTypes_Fzh_con_info","-u","_ghczmprim_GHCziTypes_Dzh_con_info","-u","_base_GHCziPtr_Ptr_con_info","-u","_base_GHCziPtr_FunPtr_con_info","-u","_base_GHCziStable_StablePtr_con_info","-u","_ghczmprim_GHCziBool_False_closure","-u","_ghczmprim_GHCziBool_True_closure","-u","_base_GHCziPack_unpackCString_closure","-u","_base_GHCziIOBase_stackOverflow_closure","-u","_base_GHCziIOBase_heapOverflow_closure","-u","_base_ControlziExceptionziBase_nonTermination_closure","-u","_base_GHCziIOBase_blockedOnDeadMVar_closure","-u","_base_GHCziIOBase_blockedIndefinitely_closure","-u","_base_ControlziExceptionziBase_nestedAtomically_closure","-u","_base_GHCziWeak_runFinalizzerBatch_closure","-u","_base_GHCziTopHandler_runIO_closure","-u","_base_GHCziTopHandler_runNonIO_closure","-u","_base_GHCziConc_runHandlers_closure","-u","_base_GHCziConc_ensureIOManagerIsRunning_closure"], frameworkDirs = [], frameworks = [], haddockInterfaces = [], haddockHTMLs = []}]),(PackageName "syb",[InstalledPackageInfo {package = PackageIdentifier {pkgName = PackageName "syb", pkgVersion = Version {versionBranch = [0,1,0,1], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", description = "This package contains the generics system described in the\n/Scrap Your Boilerplate/ papers (see <http://www.cs.vu.nl/boilerplate/>).\nIt defines the @Data@ class of types permitting folding and unfolding\nof constructor applications, instances of this class for primitive\ntypes, and a variety of traversals.", category = "", exposed = True, exposedModules = [ModuleName ["Data","Generics"],ModuleName ["Data","Generics","Aliases"],ModuleName ["Data","Generics","Basics"],ModuleName ["Data","Generics","Instances"],ModuleName ["Data","Generics","Schemes"],ModuleName ["Data","Generics","Text"],ModuleName ["Data","Generics","Twins"]], hiddenModules = [], importDirs = ["C:\\ghc\\ghc-6.10.3\\syb-0.1.0.1"], libraryDirs = ["C:\\ghc\\ghc-6.10.3\\syb-0.1.0.1"], hsLibraries = ["HSsyb-0.1.0.1"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,1,0,0], versionTags = []}}], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["C:\\ghc\\ghc-6.10.3/doc/libraries/syb\\syb.haddock"], haddockHTMLs = ["$httptopdir/doc/libraries/syb"]}])]), pkgDescrFile = Just ".\\RefSerialize.cabal", localPkgDescr = PackageDescription {package = PackageIdentifier {pkgName = PackageName "RefSerialize", pkgVersion = Version {versionBranch = [0,2,4], versionTags = []}}, license = BSD3, licenseFile = "LICENSE", copyright = "", maintainer = "agocorona@gmail.com", author = "Alberto G\243mez Corona", stability = "", testedWith = [(GHC,ThisVersion (Version {versionBranch = [6,8,2], versionTags = []}))], homepage = "", pkgUrl = "", bugReports = "", sourceRepos = [], synopsis = "Write to and read from Strings maintaining internal memory references", description = "Read, Show and Data.Binary do not check for repeated references to the same address.\nAs a result, the data is duplicated when serialized. This is a waste of space in the filesystem\nand  also a waste of serialization time. but the worst consequence is that, when the serialized data is read,\nit allocates multiple copies for the same object when referenced multiple times. Because multiple referenced\ndata is very typical in a pure language such is Haskell, this means that the resulting data loose the beatiful\neconomy of space and processing time that referential transparency permits.\n\nEvery instance of Show/Read is also a instance of Data.RefSerialize.\n\nThis package allows the serialization and deserialization of large data structures without duplication of data, with\nthe result of optimized performance and memory usage. It is also useful for debugging purposes.\n\nThere are automatic derived instances for instances of Read/Show. Lists of non-chars have its own instance.\nThe deserializer contains a subset of Parsec.Token for defining deserializing parsers.\n\nthe serialized string has the form:\n\n\"@expr( var1, ...varn) where  var1=value1,..valn=valueN @\"\n\nso that the string can be EVALuated.\n\nSee demo.hs and tutorial.\n\nin this release:\n\n*  Proper trailing withespace handlling for instances of Read\n\n*  Error handllig for instances of Read.\n\nTo do: -derived instances for Data.Binary\n-serialization to/from ByteStings", category = "Parsing", customFieldsPD = [], buildDepends = [Dependency (PackageName "base") AnyVersion,Dependency (PackageName "containers") AnyVersion], descCabalVersion = UnionVersionRanges (ThisVersion (Version {versionBranch = [1,2], versionTags = []})) (LaterVersion (Version {versionBranch = [1,2], versionTags = []})), buildType = Just Simple, library = Just (Library {exposedModules = [ModuleName ["Data","RefSerialize"],ModuleName ["Data","Parser"],ModuleName ["Data","Serialize"]], libExposed = True, libBuildInfo = BuildInfo {buildable = True, buildTools = [], cppOptions = [], ccOptions = [], ldOptions = [], pkgconfigDepends = [], frameworks = [], cSources = [], hsSourceDirs = ["."], otherModules = [], extensions = [], extraLibs = [], extraLibDirs = [], includeDirs = [], includes = [], installIncludes = [], options = [(GHC,["-O2"])], ghcProfOptions = [], ghcSharedOptions = [], customFieldsBI = []}}), executables = [], dataFiles = [], dataDir = "", extraSrcFiles = [], extraTmpFiles = []}, withPrograms = [("ar",ConfiguredProgram {programId = "ar", programVersion = Nothing, programArgs = [], programLocation = FoundOnSystem {locationPath = "C:\\ghc\\ghc-6.10.3\\bin\\ar.exe"}}),("cpphs",ConfiguredProgram {programId = "cpphs", programVersion = Just (Version {versionBranch = [1,7], versionTags = []}), programArgs = [], programLocation = FoundOnSystem {locationPath = "C:\\Archivos de programa\\Haskell\\bin\\cpphs.exe"}}),("gcc",ConfiguredProgram {programId = "gcc", programVersion = Just (Version {versionBranch = [3,4,5], versionTags = []}), programArgs = ["-BC:\\ghc\\ghc-6.10.3\\gcc-lib","-IC:\\ghc\\ghc-6.10.3\\include\\mingw"], programLocation = FoundOnSystem {locationPath = "C:\\ghc\\ghc-6.10.3\\gcc.exe"}}),("ghc",ConfiguredProgram {programId = "ghc", programVersion = Just (Version {versionBranch = [6,10,3], versionTags = []}), programArgs = [], programLocation = FoundOnSystem {locationPath = "C:\\ghc\\ghc-6.10.3\\bin\\ghc.exe"}}),("ghc-pkg",ConfiguredProgram {programId = "ghc-pkg", programVersion = Just (Version {versionBranch = [6,10,3], versionTags = []}), programArgs = [], programLocation = FoundOnSystem {locationPath = "C:\\ghc\\ghc-6.10.3\\bin\\ghc-pkg.exe"}}),("haddock",ConfiguredProgram {programId = "haddock", programVersion = Just (Version {versionBranch = [2,4,2], versionTags = []}), programArgs = [], programLocation = FoundOnSystem {locationPath = "C:\\ghc\\ghc-6.10.3\\bin\\haddock.exe"}}),("happy",ConfiguredProgram {programId = "happy", programVersion = Just (Version {versionBranch = [1,18,4], versionTags = []}), programArgs = [], programLocation = FoundOnSystem {locationPath = "C:\\ghc\\ghc-6.10.3\\bin\\happy.exe"}}),("hsc2hs",ConfiguredProgram {programId = "hsc2hs", programVersion = Just (Version {versionBranch = [0,67], versionTags = []}), programArgs = [], programLocation = FoundOnSystem {locationPath = "C:\\ghc\\ghc-6.10.3\\bin\\hsc2hs.exe"}}),("hscolour",ConfiguredProgram {programId = "hscolour", programVersion = Just (Version {versionBranch = [1,13], versionTags = []}), programArgs = [], programLocation = FoundOnSystem {locationPath = "C:\\Archivos de programa\\Haskell\\bin\\HsColour.exe"}}),("ld",ConfiguredProgram {programId = "ld", programVersion = Nothing, programArgs = ["-x"], programLocation = FoundOnSystem {locationPath = "C:\\ghc\\ghc-6.10.3\\gcc-lib\\ld.exe"}}),("pkg-config",ConfiguredProgram {programId = "pkg-config", programVersion = Just (Version {versionBranch = [0,23], versionTags = []}), programArgs = [], programLocation = FoundOnSystem {locationPath = "c:\\gtk2hs\\0.10.1\\bin\\pkg-config.exe"}}),("tar",ConfiguredProgram {programId = "tar", programVersion = Nothing, programArgs = [], programLocation = FoundOnSystem {locationPath = "C:\\Archivos de programa\\UnixUtils\\usr\\local\\wbin\\tar.exe"}})], withPackageDB = GlobalPackageDB, withVanillaLib = True, withProfLib = False, withSharedLib = False, withProfExe = False, withOptimization = NormalOptimisation, withGHCiLib = True, splitObjs = False, stripExes = True, progPrefix = "", progSuffix = ""}
diff --git a/doc-index.html b/doc-index.html
new file mode 100644
--- /dev/null
+++ b/doc-index.html
@@ -0,0 +1,526 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+> (Index)</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD COLSPAN="2" STYLE="padding-top:5px;"
+><FORM onsubmit="full_search(); return false;" ACTION=""
+>Search: <INPUT ID="searchbox" onkeyup="quick_search()"
+> <INPUT VALUE="Search" TYPE="submit"
+> <SPAN ID="searchmsg"
+> </SPAN
+></FORM
+></TD
+></TR
+><TR
+><TD
+><TABLE ID="indexlist" CELLPADDING="0" CELLSPACING="5"
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>&lt;?&gt;</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>&lt;|&gt;</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>angles</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>anyChar</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>between</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>bool</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>braces</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>brackets</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>char</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Parser.html#v%3Achar"
+>Data.Parser</A
+>, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>charLiteral</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>choice</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>colon</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>comma</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>commaSep</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>commaSep1</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>Context</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#t%3AContext"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>debug</TD
+><TD CLASS="indexlinks"
+>Data.Serialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>decimal</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>digit</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>dot</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry" COLSPAN="2"
+>Error</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexannot"
+>1 (Type/Class)</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#t%3AError"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexannot"
+>2 (Data Constructor)</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#v%3AError"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>float</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>hasht</TD
+><TD CLASS="indexlinks"
+>Data.Serialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>hexadecimal</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>insertVar</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3AinsertVar"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>integer</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>lexeme</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>many</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Parser.html#v%3Amany"
+>Data.Parser</A
+>, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>MFun</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#t%3AMFun"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>natural</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>naturalOrFloat</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>notFollowedBy</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>numVar</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#v%3AnumVar"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>octal</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>option</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>parens</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>readContext</TD
+><TD CLASS="indexlinks"
+>Data.Serialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>readHexp</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3AreadHexp"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>readp</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3Areadp"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>readVar</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3AreadVar"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>rRead</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3ArRead"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>rreadp</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3Arreadp"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>rShow</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3ArShow"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>rshowp</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3Arshowp"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>runR</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3ArunR"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>runW</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3ArunW"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>semi</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>semiSep</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>semiSep1</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>sepBy</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Parser.html#v%3AsepBy"
+>Data.Parser</A
+>, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>Serialize</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#t%3ASerialize"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>ShowF</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#t%3AShowF"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>showHexp</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3AshowHexp"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>showp</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-RefSerialize.html#v%3Ashowp"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>space</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry" COLSPAN="2"
+>ST</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexannot"
+>1 (Type/Class)</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Parser.html#t%3AST"
+>Data.Parser</A
+>, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexannot"
+>2 (Data Constructor)</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Parser.html#v%3AST"
+>Data.Parser</A
+>, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry" COLSPAN="2"
+>Stat</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexannot"
+>1 (Type/Class)</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#t%3AStat"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexannot"
+>2 (Data Constructor)</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#v%3AStat"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>string</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>stringLiteral</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>symbol</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>upper</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>VarName</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#t%3AVarName"
+>Data.Serialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>varName</TD
+><TD CLASS="indexlinks"
+><A HREF="Data-Serialize.html#v%3AvarName"
+>Data.Serialize</A
+>, <A HREF="Data-RefSerialize.html#v%3AvarName"
+>Data.RefSerialize</A
+></TD
+></TR
+><TR CLASS="indexrow"
+><TD CLASS="indexentry"
+>whiteSpace</TD
+><TD CLASS="indexlinks"
+>Data.Parser, Data.RefSerialize</TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/frames.html b/frames.html
new file mode 100644
--- /dev/null
+++ b/frames.html
@@ -0,0 +1,27 @@
+<html>
+<head>
+<script type="text/javascript"><!--
+/*
+
+  The synopsis frame needs to be updated using javascript, so we hide
+  it by default and only show it if javascript is enabled.
+
+  TODO: provide some means to disable it.
+*/
+function load() {
+  var d = document.getElementById("inner-fs");
+  d.rows = "50%,50%";
+}
+--></script>
+<frameset id="outer-fs" cols="25%,75%" onload="load()">
+  <frameset id="inner-fs" rows="100%,0%">
+
+    <frame src="index-frames.html" name="modules">
+    <frame src="" name="synopsis">
+
+  </frameset>
+  <frame src="index.html" name="main">
+
+</frameset>
+
+</html>
diff --git a/haddock-util.js b/haddock-util.js
new file mode 100644
--- /dev/null
+++ b/haddock-util.js
@@ -0,0 +1,139 @@
+// Haddock JavaScript utilities
+function toggle(button,id)
+{
+   var n = document.getElementById(id).style;
+   if (n.display == "none")
+   {
+    button.src = "minus.gif";
+    n.display = "block";
+   }
+   else
+   {
+    button.src = "plus.gif";
+    n.display = "none";
+   }
+}
+
+
+var max_results = 75; // 50 is not enough to search for map in the base libraries
+var shown_range = null;
+var last_search = null;
+
+function quick_search()
+{
+    perform_search(false);
+}
+
+function full_search()
+{
+    perform_search(true);
+}
+
+
+function perform_search(full)
+{
+    var text = document.getElementById("searchbox").value.toLowerCase();
+    if (text == last_search && !full) return;
+    last_search = text;
+    
+    var table = document.getElementById("indexlist");
+    var status = document.getElementById("searchmsg");
+    var children = table.firstChild.childNodes;
+    
+    // first figure out the first node with the prefix
+    var first = bisect(-1);
+    var last = (first == -1 ? -1 : bisect(1));
+
+    if (first == -1)
+    {
+        table.className = "";
+        status.innerHTML = "No results found, displaying all";
+    }
+    else if (first == 0 && last == children.length - 1)
+    {
+        table.className = "";
+        status.innerHTML = "";
+    }
+    else if (last - first >= max_results && !full)
+    {
+        table.className = "";
+        status.innerHTML = "More than " + max_results + ", press Search to display";
+    }
+    else
+    {
+        // decide what you need to clear/show
+        if (shown_range)
+            setclass(shown_range[0], shown_range[1], "indexrow");
+        setclass(first, last, "indexshow");
+        shown_range = [first, last];
+        table.className = "indexsearch";
+        status.innerHTML = "";
+    }
+
+    
+    function setclass(first, last, status)
+    {
+        for (var i = first; i <= last; i++)
+        {
+            children[i].className = status;
+        }
+    }
+    
+    
+    // do a binary search, treating 0 as ...
+    // return either -1 (no 0's found) or location of most far match
+    function bisect(dir)
+    {
+        var first = 0, finish = children.length - 1;
+        var mid, success = false;
+
+        while (finish - first > 3)
+        {
+            mid = Math.floor((finish + first) / 2);
+
+            var i = checkitem(mid);
+            if (i == 0) i = dir;
+            if (i == -1)
+                finish = mid;
+            else
+                first = mid;
+        }
+        var a = (dir == 1 ? first : finish);
+        var b = (dir == 1 ? finish : first);
+        for (var i = b; i != a - dir; i -= dir)
+        {
+            if (checkitem(i) == 0) return i;
+        }
+        return -1;
+    }    
+    
+    
+    // from an index, decide what the result is
+    // 0 = match, -1 is lower, 1 is higher
+    function checkitem(i)
+    {
+        var s = getitem(i).toLowerCase().substr(0, text.length);
+        if (s == text) return 0;
+        else return (s > text ? -1 : 1);
+    }
+    
+    
+    // from an index, get its string
+    // this abstracts over alternates
+    function getitem(i)
+    {
+        for ( ; i >= 0; i--)
+        {
+            var s = children[i].firstChild.firstChild.data;
+            if (s.indexOf(' ') == -1)
+                return s;
+        }
+        return ""; // should never be reached
+    }
+}
+
+function setSynopsis(filename) {
+    if (parent.window.synopsis) {
+      parent.window.synopsis.location = filename;
+    }
+}
diff --git a/haddock.css b/haddock.css
new file mode 100644
--- /dev/null
+++ b/haddock.css
@@ -0,0 +1,297 @@
+/* -------- Global things --------- */
+
+BODY { 
+  background-color: #ffffff;
+  color: #000000;
+  font-family: sans-serif;
+  padding: 0 0;
+  } 
+
+A:link    { color: #0000e0; text-decoration: none }
+A:visited { color: #0000a0; text-decoration: none }
+A:hover   { background-color: #e0e0ff; text-decoration: none }
+
+TABLE.vanilla {
+  width: 100%;
+  border-width: 0px;
+  /* I can't seem to specify cellspacing or cellpadding properly using CSS... */
+}
+
+TABLE.vanilla2 {
+  border-width: 0px;
+}
+
+/* <TT> font is a little too small in MSIE */
+TT  { font-size: 100%; }
+PRE { font-size: 100%; }
+
+LI P { margin: 0pt } 
+
+TD {
+  border-width: 0px;
+}
+
+TABLE.narrow {
+  border-width: 0px;
+}
+
+TD.s8  {  height: 8px;  }
+TD.s15 {  height: 15px; }
+
+SPAN.keyword { text-decoration: underline; }
+
+/* Resize the buttom image to match the text size */
+IMG.coll { width : 0.75em; height: 0.75em; margin-bottom: 0; margin-right: 0.5em }
+
+/* --------- Contents page ---------- */
+
+DIV.node {
+  padding-left: 3em;
+}
+
+DIV.cnode {
+  padding-left: 1.75em;
+}
+
+SPAN.pkg {
+  position: absolute;
+  left: 50em;
+}
+
+/* --------- Documentation elements ---------- */
+
+TD.children {
+  padding-left: 25px;
+  }
+
+TD.synopsis {
+  padding: 2px;
+  background-color: #f0f0f0;
+  font-family: monospace
+ }
+
+TD.decl { 
+  padding: 2px;
+  background-color: #f0f0f0; 
+  font-family: monospace;
+  vertical-align: top;
+  }
+
+TD.topdecl {
+  padding: 2px;
+  background-color: #f0f0f0;
+  font-family: monospace;
+  vertical-align: top;
+}
+
+TABLE.declbar {
+  border-spacing: 0px;
+ }
+
+TD.declname {
+  width: 100%;
+ }
+
+TD.declbut {
+  padding-left: 5px;
+  padding-right: 5px;
+  border-left-width: 1px;
+  border-left-color: #000099;
+  border-left-style: solid;
+  white-space: nowrap;
+  font-size: small;
+ }
+
+/* 
+  arg is just like decl, except that wrapping is not allowed.  It is
+  used for function and constructor arguments which have a text box
+  to the right, where if wrapping is allowed the text box squashes up
+  the declaration by wrapping it.
+*/
+TD.arg { 
+  padding: 2px;
+  background-color: #f0f0f0; 
+  font-family: monospace;
+  vertical-align: top;
+  white-space: nowrap;
+  }
+
+TD.recfield { padding-left: 20px }
+
+TD.doc  { 
+  padding-top: 2px;
+  padding-left: 10px;
+  }
+
+TD.ndoc  { 
+  padding: 2px;
+  }
+
+TD.rdoc  { 
+  padding: 2px;
+  padding-left: 10px;
+  width: 100%;
+  }
+
+TD.body  { 
+  padding-left: 10px
+  }
+
+TD.pkg {
+  width: 100%;
+  padding-left: 10px
+}
+
+TABLE.indexsearch TR.indexrow {
+  display: none;
+}
+TABLE.indexsearch TR.indexshow {
+  display: table-row;
+}
+
+TD.indexentry {
+  vertical-align: top;
+  padding-right: 10px
+  }
+
+TD.indexannot {
+  vertical-align: top;
+  padding-left: 20px;
+  white-space: nowrap
+  }
+
+TD.indexlinks {
+  width: 100%
+  }
+
+/* ------- Section Headings ------- */
+
+TD.section1 {
+  padding-top: 15px;
+  font-weight: bold;
+  font-size: 150%
+  }
+
+TD.section2 {
+  padding-top: 10px;
+  font-weight: bold;
+  font-size: 130%
+  }
+
+TD.section3 {
+  padding-top: 5px;
+  font-weight: bold;
+  font-size: 110%
+  }
+
+TD.section4 {
+  font-weight: bold;
+  font-size: 100%
+  }
+
+/* -------------- The title bar at the top of the page */
+
+TD.infohead {
+  color: #ffffff;
+  font-weight: bold;
+  padding-right: 10px;
+  text-align: left;
+}
+
+TD.infoval {
+  color: #ffffff;
+  padding-right: 10px;
+  text-align: left;
+}
+
+TD.topbar {
+  background-color: #000099;
+  padding: 5px;
+}
+
+TD.title {
+  color: #ffffff;
+  padding-left: 10px;
+  width: 100%
+  }
+
+TD.topbut {
+  padding-left: 5px;
+  padding-right: 5px;
+  border-left-width: 1px;
+  border-left-color: #ffffff;
+  border-left-style: solid;
+  white-space: nowrap;
+  }
+
+TD.topbut A:link {
+  color: #ffffff
+  }
+
+TD.topbut A:visited {
+  color: #ffff00
+  }
+
+TD.topbut A:hover {
+  background-color: #6060ff;
+  }
+
+TD.topbut:hover {
+  background-color: #6060ff
+  }
+
+TD.modulebar { 
+  background-color: #0077dd;
+  padding: 5px;
+  border-top-width: 1px;
+  border-top-color: #ffffff;
+  border-top-style: solid;
+  }
+
+/* --------- The page footer --------- */
+
+TD.botbar {
+  background-color: #000099;
+  color: #ffffff;
+  padding: 5px
+  }
+TD.botbar A:link {
+  color: #ffffff;
+  text-decoration: underline
+  }
+TD.botbar A:visited {
+  color: #ffff00
+  }
+TD.botbar A:hover {
+  background-color: #6060ff
+  }
+
+/* --------- Mini Synopsis for Frame View --------- */
+
+.outer {
+  margin: 0 0;
+  padding: 0 0;
+}
+
+.mini-synopsis {
+  padding: 0.25em 0.25em;
+}
+
+.mini-synopsis H1 { font-size: 130%; }
+.mini-synopsis H2 { font-size: 110%; }
+.mini-synopsis H3 { font-size: 100%; }
+.mini-synopsis H1, .mini-synopsis H2, .mini-synopsis H3 {
+  margin-top: 0.5em;
+  margin-bottom: 0.25em;
+  padding: 0 0;
+}
+
+.mini-synopsis H1 { border-bottom: 1px solid #ccc; }
+
+.mini-topbar {
+  font-size: 130%;
+  background: #0077dd;
+  padding: 0.25em;
+}
+
+
diff --git a/haskell_icon.gif b/haskell_icon.gif
new file mode 100644
Binary files /dev/null and b/haskell_icon.gif differ
diff --git a/index-frames.html b/index-frames.html
new file mode 100644
--- /dev/null
+++ b/index-frames.html
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+></TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><P
+><A HREF="Data-Parser.html" TARGET="main"
+>Data.Parser</A
+><BR
+><A HREF="Data-RefSerialize.html" TARGET="main"
+>Data.RefSerialize</A
+><BR
+><A HREF="Data-Serialize.html" TARGET="main"
+>Data.Serialize</A
+><BR
+></P
+></TABLE
+></BODY
+></HTML
+>
diff --git a/index.html b/index.html
new file mode 100644
--- /dev/null
+++ b/index.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+></TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD CLASS="topbar"
+><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD
+><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
+></TD
+><TD CLASS="title"
+></TD
+><TD CLASS="topbut"
+><A HREF="index.html"
+>Contents</A
+></TD
+><TD CLASS="topbut"
+><A HREF="doc-index.html"
+>Index</A
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="section1"
+>Modules</TD
+></TR
+><TR
+><TD
+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0"
+><TR
+><TD STYLE="width: 50em"
+><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'n:0')" ALT="show/hide"
+>Data</TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding: 0; padding-left: 2em" COLSPAN="3"
+><TABLE CLASS="vanilla2" CELLSPACING="0" CELLPADDING="0" ID="n:0" STYLE="display:block;"
+><TR
+><TD STYLE="padding-left: 1.25em;width: 48em"
+><A HREF="Data-Parser.html"
+>Data.Parser</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 48em"
+><A HREF="Data-RefSerialize.html"
+>Data.RefSerialize</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+><TR
+><TD STYLE="padding-left: 1.25em;width: 48em"
+><A HREF="Data-Serialize.html"
+>Data.Serialize</A
+></TD
+><TD
+></TD
+><TD
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+><TR
+><TD CLASS="s15"
+></TD
+></TR
+><TR
+><TD CLASS="botbar"
+>Produced by <A HREF="http://www.haskell.org/haddock/"
+>Haddock</A
+> version 2.4.2</TD
+></TR
+></TABLE
+></BODY
+></HTML
+>
diff --git a/mini_Data-Parser.html b/mini_Data-Parser.html
new file mode 100644
--- /dev/null
+++ b/mini_Data-Parser.html
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Data.Parser</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><DIV CLASS="outer"
+><DIV CLASS="mini-topbar"
+>Data.Parser</DIV
+><DIV CLASS="mini-synopsis"
+><DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+>&nbsp;<A HREF="Data-Parser.html#t%3AST" TARGET="main"
+>ST</A
+> a</DIV
+>   <DIV CLASS="decl"
+><A HREF="Data-Parser.html#v%3Achar" TARGET="main"
+>char</A
+></DIV
+>      <DIV CLASS="decl"
+><A HREF="Data-Parser.html#v%3AsepBy" TARGET="main"
+>sepBy</A
+></DIV
+>     <DIV CLASS="decl"
+><A HREF="Data-Parser.html#v%3Amany" TARGET="main"
+>many</A
+></DIV
+>                         </DIV
+></DIV
+></BODY
+></HTML
+>
diff --git a/mini_Data-RefSerialize.html b/mini_Data-RefSerialize.html
new file mode 100644
--- /dev/null
+++ b/mini_Data-RefSerialize.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Data.RefSerialize</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><DIV CLASS="outer"
+><DIV CLASS="mini-topbar"
+>Data.RefSerialize</DIV
+><DIV CLASS="mini-synopsis"
+> <DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>class</SPAN
+>&nbsp;<A HREF="Data-RefSerialize.html#t%3ASerialize" TARGET="main"
+>Serialize</A
+> c</DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3ArShow" TARGET="main"
+>rShow</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3ArRead" TARGET="main"
+>rRead</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3AinsertVar" TARGET="main"
+>insertVar</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3AreadVar" TARGET="main"
+>readVar</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3AvarName" TARGET="main"
+>varName</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3ArunR" TARGET="main"
+>runR</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3ArunW" TARGET="main"
+>runW</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3AreadHexp" TARGET="main"
+>readHexp</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-RefSerialize.html#v%3AshowHexp" TARGET="main"
+>showHexp</A
+></DIV
+></DIV
+></DIV
+></BODY
+></HTML
+>
diff --git a/mini_Data-Serialize.html b/mini_Data-Serialize.html
new file mode 100644
--- /dev/null
+++ b/mini_Data-Serialize.html
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--Rendered using the Haskell Html Library v0.2-->
+<HTML
+><HEAD
+><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
+><TITLE
+>Data.Serialize</TITLE
+><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
+><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
+></SCRIPT
+></HEAD
+><BODY
+><DIV CLASS="outer"
+><DIV CLASS="mini-topbar"
+>Data.Serialize</DIV
+><DIV CLASS="mini-synopsis"
+><DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+>&nbsp;<A HREF="Data-Serialize.html#t%3AMFun" TARGET="main"
+>MFun</A
+> </DIV
+> <DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+>&nbsp;<A HREF="Data-Serialize.html#t%3AVarName" TARGET="main"
+>VarName</A
+> </DIV
+> <DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+>&nbsp;<A HREF="Data-Serialize.html#t%3AShowF" TARGET="main"
+>ShowF</A
+> </DIV
+> <DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>type</SPAN
+>&nbsp;<A HREF="Data-Serialize.html#t%3AContext" TARGET="main"
+>Context</A
+> </DIV
+> <DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+>&nbsp;<A HREF="Data-Serialize.html#t%3AError" TARGET="main"
+>Error</A
+> </DIV
+> <DIV CLASS="decl"
+><SPAN CLASS="keyword"
+>data</SPAN
+>&nbsp;<A HREF="Data-Serialize.html#t%3AStat" TARGET="main"
+>Stat</A
+> </DIV
+> <DIV CLASS="decl"
+><A HREF="Data-Serialize.html#v%3AvarName" TARGET="main"
+>varName</A
+></DIV
+> <DIV CLASS="decl"
+><A HREF="Data-Serialize.html#v%3AnumVar" TARGET="main"
+>numVar</A
+></DIV
+></DIV
+></DIV
+></BODY
+></HTML
+>
diff --git a/minus.gif b/minus.gif
new file mode 100644
Binary files /dev/null and b/minus.gif differ
diff --git a/plus.gif b/plus.gif
new file mode 100644
Binary files /dev/null and b/plus.gif differ
diff --git a/sal b/sal
new file mode 100644
--- /dev/null
+++ b/sal
@@ -0,0 +1,16 @@
+GHCi, version 6.10.3: http://www.haskell.org/ghc/  :? for help
+Loading package ghc-prim ... linking ... done.
+Loading package integer ... linking ... done.
+Loading package base ... linking ... done.
+Ok, modules loaded: Data.RefSerialize, Data.Parser, Data.Serialize.
+*Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> "5"
+*Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> " v8 where {v8= 5; }"
+*Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> " v6 where {v6= [ v9,  v10]; v9= 2; v10= 3; }"
+*Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> "[5, 5]"
+*Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> " v9 where {v6= 5; v9= [ v6, v6]; }"
+*Data.RefSerialize> *Data.RefSerialize> "this happens recursively"
+*Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> " v8 where {v8= [ v10, v10]; v9= 5; v10= [ v9, v9]; }"
+*Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> [[5,5],[5,5]]
+*Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> True
+*Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> " v11 where {v11= 5; }"
+*Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> *Data.RefSerialize> Leaving GHCi.
diff --git a/tutorial.txt b/tutorial.txt
--- a/tutorial.txt
+++ b/tutorial.txt
@@ -57,28 +57,28 @@
 by default the referencing parser is constructed by:
 
 rshowp= insertVar showp
-   rreadp= readVar readp
+rreadp= readVar readp
 but this can be redefined. See for example the instance of [] in RefSerialize.hs
 
 This is an example of a showp parser for a simple data structure.
 
-data S= S Int Int deriving ( Show, Eq)      
+data S= S Int Int deriving ( Show, Eq)
 
 instance  Serialize S  where
     showp (S x y)= do
                     xs <- rshowp x  -- rshowp parsers can be inside showp parser
                     ys <- rshowp y
                     return $ "S "++xs++" "++ys
-      
-      
 
+
+
     readp =  do
                     symbol "S"     -- I included a (almost) complete Parsec for deserialization
-                    x <- rreadp   
+                    x <- rreadp
                     y <- rreadp
                     return $ S x y
 
-there is a mix between referencing and no referencing parser here:    
- 
+there is a mix between referencing and no referencing parser here:
+
 Data.RefSerialize>putStrLn $ runW $ showp $ S x x
-S  v23 v23 where {v23= 5; } 
+S  v23 v23 where {v23= 5; }
