packages feed

hxt-7.3: doc/hdoc_arrow/Text-XML-HXT-Arrow-XmlPickle.html

<!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
>Text.XML.HXT.Arrow.XmlPickle</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"
>Haskell Xml Toolbox 7.3: The Arrow API</TD
><TD CLASS="topbut"
><A HREF="http://darcs.fh-wedel.de/hxt/src/./Text/XML/HXT/Arrow/XmlPickle.hs"
>Source code</A
></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"
>Text.XML.HXT.Arrow.XmlPickle</FONT
></TD
><TD ALIGN="right"
><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="infohead"
>Portability</TD
><TD CLASS="infoval"
>portable</TD
></TR
><TR
><TD CLASS="infohead"
>Stability</TD
><TD CLASS="infoval"
>experimental</TD
></TR
><TR
><TD CLASS="infohead"
>Maintainer</TD
><TD CLASS="infoval"
>Uwe Schmidt (uwe@fh-wedel.de)</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Description</TD
></TR
><TR
><TD CLASS="doc"
><P
>Version    : $Id$
</P
><P
>Pickler functions for converting between user defined data types
and XmlTree data. Usefull for persistent storage and retreival
of arbitray data as XML documents
</P
><P
>This module is an adaptation of the pickler combinators
developed by Andrew Kennedy
( http://research.microsoft.com/~akenn/fun/picklercombinators.pdf )
</P
><P
>The difference to Kennedys approach is that the target is not
a list of Chars but a list of XmlTrees. The basic picklers will
convert data into XML text nodes. New are the picklers for
creating elements and attributes.
</P
><P
>One extension was neccessary: The unpickling may fail.
Therefore the unpickler has a Maybe result type.
Failure is used to unpickle optional elements
(Maybe data) and lists of arbitray length
</P
><P
>There is an example program demonstrating the use
of the picklers for a none trivial data structure.
(see &quot;examples/arrows/pickle&quot; directory)
</P
></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"
><SPAN CLASS="keyword"
>data</SPAN
> <A HREF="#t%3APU"
>PU</A
> a = <A HREF="#v%3APU"
>PU</A
> {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="recfield"
><A HREF="#v%3AappPickle"
>appPickle</A
> :: ((a, St) -&gt; St)</TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3AappUnPickle"
>appUnPickle</A
> :: (St -&gt; (Maybe a, St))</TD
></TR
></TABLE
>}</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpZero"
>xpZero</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpUnit"
>xpUnit</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> ()</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpLift"
>xpLift</A
> :: a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpLiftMaybe"
>xpLiftMaybe</A
> :: Maybe a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpCondSeq"
>xpCondSeq</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b -&gt; (b -&gt; a) -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; (a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b) -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpSeq"
>xpSeq</A
> :: (b -&gt; a) -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; (a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b) -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpList"
>xpList</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> [a]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpText"
>xpText</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> String</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpText0"
>xpText0</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> String</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpPrim"
>xpPrim</A
> :: (Read a, Show a) =&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpChoice"
>xpChoice</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; (a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b) -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpWrap"
>xpWrap</A
> :: (a -&gt; b, b -&gt; a) -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpWrapMaybe"
>xpWrapMaybe</A
> :: (a -&gt; Maybe b, b -&gt; a) -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpPair"
>xpPair</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> (a, b)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpTriple"
>xpTriple</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> c -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> (a, b, c)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Axp4Tuple"
>xp4Tuple</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> c -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> d -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> (a, b, c, d)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Axp5Tuple"
>xp5Tuple</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> c -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> d -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> e -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> (a, b, c, d, e)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpOption"
>xpOption</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> (Maybe a)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpAlt"
>xpAlt</A
> :: (a -&gt; Int) -&gt; [<A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a] -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpElem"
>xpElem</A
> :: String -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpAttr"
>xpAttr</A
> :: String -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpTree"
>xpTree</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> <A HREF="Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
>XmlTree</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3ApickleDoc"
>pickleDoc</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; a -&gt; <A HREF="Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
>XmlTree</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AunpickleDoc"
>unpickleDoc</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
>XmlTree</A
> -&gt; Maybe a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>class</SPAN
> <A HREF="#t%3AXmlPickler"
>XmlPickler</A
> a  <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%3Axpickle"
>xpickle</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Axpickle"
>xpickle</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> a =&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxpickleDocument"
>xpickleDocument</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
>Attributes</A
> -&gt; String -&gt; <A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#t%3AIOStateArrow"
>IOStateArrow</A
> s a <A HREF="Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
>XmlTree</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AxunpickleDocument"
>xunpickleDocument</A
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
>Attributes</A
> -&gt; String -&gt; <A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#t%3AIOStateArrow"
>IOStateArrow</A
> s b a</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"
><SPAN CLASS="keyword"
>data</SPAN
> <A NAME="t%3APU"
></A
><B
>PU</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="5" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v%3APU"
></A
><B
>PU</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="body" COLSPAN="2"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v%3AappPickle"
></A
><B
>appPickle</B
> :: ((a, St) -&gt; St)</TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v%3AappUnPickle"
></A
><B
>appUnPickle</B
> :: (St -&gt; (Maybe a, St))</TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpZero"
></A
><B
>xpZero</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="doc"
><P
>The zero pickler
</P
><P
>Encodes othing, fails always during unpickling
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpUnit"
></A
><B
>xpUnit</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> ()</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpLift"
></A
><B
>xpLift</B
> :: a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="doc"
><P
>Lift a value to a pickler
</P
><P
>When pickling, nothing is encoded, when unpickling, the given value is inserted.
 This pickler always succeeds.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpLiftMaybe"
></A
><B
>xpLiftMaybe</B
> :: Maybe a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="doc"
><P
>Lift a Maybe value to a pickler.
</P
><P
><TT
>Nothing</TT
> is mapped to the zero pickler, <TT
>Just x</TT
> is pickled with <TT
>xpLift x</TT
>.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpCondSeq"
></A
><B
>xpCondSeq</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b -&gt; (b -&gt; a) -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; (a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b) -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b</TD
></TR
><TR
><TD CLASS="doc"
><P
>pickle/unpickle combinator for sequence and choice.
</P
><P
>When the first unpickler fails,
 the second one is taken, else the third one configured with the result from the first
 is taken. This pickler is a generalisation for <TT
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#v%3AxpSeq"
>xpSeq</A
></TT
> and <TT
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#v%3AxpChoice"
>xpChoice</A
></TT
> .
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpSeq"
></A
><B
>xpSeq</B
> :: (b -&gt; a) -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; (a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b) -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b</TD
></TR
><TR
><TD CLASS="doc"
><P
>Combine two picklers sequentially.
</P
><P
>If the first fails during
 unpickling, the whole unpickler fails
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpList"
></A
><B
>xpList</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> [a]</TD
></TR
><TR
><TD CLASS="doc"
><P
>Encoding of list values by pickling all list elements sequentially.
</P
><P
>Unpickler relies on failure for detecting the end of the list.
 The standard pickler for lists. Can also be used in compination with <TT
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#v%3AxpWrap"
>xpWrap</A
></TT
>
 for constructing set and map picklers
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpText"
></A
><B
>xpText</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> String</TD
></TR
><TR
><TD CLASS="doc"
><P
>Pickle a string into an XML text node
</P
><P
>One of the most often used primitive picklers. Attention:
 For pickling empty strings use <TT
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#v%3AxpText0"
>xpText0</A
></TT
>.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpText0"
></A
><B
>xpText0</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> String</TD
></TR
><TR
><TD CLASS="doc"
><P
>Pickle a possibly empty string into an XML node.
</P
><P
>Must be used in all places, where empty strings are legal values.
 If the content of an element can be an empty string, this string disapears
 during storing the DOM into a document and reparse the document.
 So the empty text node becomes nothing, and the pickler must deliver an empty string,
 if there is no text node in the document.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpPrim"
></A
><B
>xpPrim</B
> :: (Read a, Show a) =&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="doc"
><P
>Pickle an arbitrary value by applyling show during pickling
 and read during unpickling.
</P
><P
>Real pickling is then done with xpString.
 One of the most often used pimitive picklers. Applicable for all
 types which are instances of <TT
>Read</TT
> and <TT
>Show</TT
>
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpChoice"
></A
><B
>xpChoice</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; (a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b) -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b</TD
></TR
><TR
><TD CLASS="doc"
><P
>combine tow picklers with a choice
</P
><P
>Run two picklers in sequence like with xpSeq.
 When during unpickling the first one fails,
 an alternative pickler (first argument) is applied.
 This pickler only is used as combinator for unpickling.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpWrap"
></A
><B
>xpWrap</B
> :: (a -&gt; b, b -&gt; a) -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b</TD
></TR
><TR
><TD CLASS="doc"
><P
>map value into another domain and apply pickler there
</P
><P
>One of the most often used picklers.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpWrapMaybe"
></A
><B
>xpWrapMaybe</B
> :: (a -&gt; Maybe b, b -&gt; a) -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b</TD
></TR
><TR
><TD CLASS="doc"
><P
>like <TT
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#v%3AxpWrap"
>xpWrap</A
></TT
>, but if the inverse mapping is undefined, the unpickler fails
</P
><P
>Map a value into another domain. If the inverse mapping is
 undefined (Nothing), the unpickler fails
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpPair"
></A
><B
>xpPair</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> (a, b)</TD
></TR
><TR
><TD CLASS="doc"
><P
>pickle a pair of values sequentially
</P
><P
>Used for pairs or together with wrap for pickling
 algebraic data types with two components
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpTriple"
></A
><B
>xpTriple</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> c -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> (a, b, c)</TD
></TR
><TR
><TD CLASS="doc"
>Like <TT
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#v%3AxpPair"
>xpPair</A
></TT
> but for triples
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Axp4Tuple"
></A
><B
>xp4Tuple</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> c -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> d -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> (a, b, c, d)</TD
></TR
><TR
><TD CLASS="doc"
>Like <TT
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#v%3AxpPair"
>xpPair</A
></TT
> and <TT
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#v%3AxpTriple"
>xpTriple</A
></TT
> but for 4-tuples
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Axp5Tuple"
></A
><B
>xp5Tuple</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> b -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> c -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> d -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> e -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> (a, b, c, d, e)</TD
></TR
><TR
><TD CLASS="doc"
>Like <TT
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#v%3AxpPair"
>xpPair</A
></TT
> and <TT
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#v%3AxpTriple"
>xpTriple</A
></TT
> but for 5-tuples
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpOption"
></A
><B
>xpOption</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> (Maybe a)</TD
></TR
><TR
><TD CLASS="doc"
><P
>Encoding of optional data by ignoring the Nothing case during pickling
 and relying on failure during unpickling to recompute the Nothing case
</P
><P
>The default pickler for Maybe types
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpAlt"
></A
><B
>xpAlt</B
> :: (a -&gt; Int) -&gt; [<A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a] -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="doc"
><P
>Pickler for sum data types.
</P
><P
>Every constructor is mapped to an index into the list of picklers.
 The index is used only during pickling, not during unpickling, there the 1. match is taken
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpElem"
></A
><B
>xpElem</B
> :: String -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="doc"
><P
>Pickler for wrapping/unwrapping data into an XML element
</P
><P
>Extra parameter is the element name. THE pickler for constructing
 nested structures
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpAttr"
></A
><B
>xpAttr</B
> :: String -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="doc"
><P
>Pickler for storing/retreiving data into/from an attribute value
</P
><P
>The attribute is inserted in the surrounding element constructed by the <TT
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#v%3AxpElem"
>xpElem</A
></TT
> pickler
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpTree"
></A
><B
>xpTree</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> <A HREF="Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
>XmlTree</A
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Pickle an XmlTree by just adding it
</P
><P
>Usefull for components of type XmlTree in other data structures
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3ApickleDoc"
></A
><B
>pickleDoc</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; a -&gt; <A HREF="Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
>XmlTree</A
></TD
></TR
><TR
><TD CLASS="doc"
><P
>conversion of an arbitrary value into an XML document tree.
</P
><P
>The pickler, first parameter, controls the conversion process.
 Result is a complete document tree including a root node
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AunpickleDoc"
></A
><B
>unpickleDoc</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
>XmlTree</A
> -&gt; Maybe a</TD
></TR
><TR
><TD CLASS="doc"
><P
>Conversion of an XML document tree into an arbitrary data type
</P
><P
>The inverse of <TT
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#v%3ApickleDoc"
>pickleDoc</A
></TT
>.
 This law should hold for all picklers: <TT
> unpickle px . pickle px $ v == Just v </TT
>.
 Not every possible combination of picklers make sense.
 For reconverting a value from an XML tree, is becomes neccessary,
 to introduce &quot;enough&quot; markup for unpickling the value
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>class</SPAN
> <A NAME="t%3AXmlPickler"
></A
><B
>XmlPickler</B
> a  <SPAN CLASS="keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>The class for overloading <TT
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#v%3Axpickle"
>xpickle</A
></TT
>, the default pickler
</TD
></TR
><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%3Axpickle"
></A
><B
>xpickle</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</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:XmlPickler')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:XmlPickler" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> Int</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> Integer</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> ()</TD
></TR
><TR
><TD CLASS="decl"
>(<A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> a, <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> b) =&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> (a, b)</TD
></TR
><TR
><TD CLASS="decl"
>(<A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> a, <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> b, <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> c) =&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> (a, b, c)</TD
></TR
><TR
><TD CLASS="decl"
>(<A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> a, <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> b, <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> c, <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> d) =&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> (a, b, c, d)</TD
></TR
><TR
><TD CLASS="decl"
>(<A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> a, <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> b, <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> c, <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> d, <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> e) =&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> (a, b, c, d, e)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> a =&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> (Maybe a)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> a =&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> [a]</TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Axpickle"
></A
><B
>xpickle</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3AXmlPickler"
>XmlPickler</A
> a =&gt; <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxpickleDocument"
></A
><B
>xpickleDocument</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
>Attributes</A
> -&gt; String -&gt; <A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#t%3AIOStateArrow"
>IOStateArrow</A
> s a <A HREF="Text-XML-HXT-DOM-TypeDefs.html#t%3AXmlTree"
>XmlTree</A
></TD
></TR
><TR
><TD CLASS="doc"
><P
>store an arbitray value in a persistent XML document
</P
><P
>The pickler converts a value into an XML tree, this is written out with
 <TT
><A HREF="Text-XML-HXT-Arrow.html#v%3AwriteDocument"
>writeDocument</A
></TT
>. The option list is passed to <TT
><A HREF="Text-XML-HXT-Arrow.html#v%3AwriteDocument"
>writeDocument</A
></TT
>
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AxunpickleDocument"
></A
><B
>xunpickleDocument</B
> :: <A HREF="Text-XML-HXT-Arrow-XmlPickle.html#t%3APU"
>PU</A
> a -&gt; <A HREF="Text-XML-HXT-DOM-TypeDefs.html#t%3AAttributes"
>Attributes</A
> -&gt; String -&gt; <A HREF="Text-XML-HXT-Arrow-XmlIOStateArrow.html#t%3AIOStateArrow"
>IOStateArrow</A
> s b a</TD
></TR
><TR
><TD CLASS="doc"
><P
>read an arbitray value from an XML document
</P
><P
>The document is read with <TT
><A HREF="Text-XML-HXT-Arrow.html#v%3AreadDocument"
>readDocument</A
></TT
>. Options are passed
 to <TT
><A HREF="Text-XML-HXT-Arrow.html#v%3AreadDocument"
>readDocument</A
></TT
>. The conversion from XmlTree is done with the
 pickler.
</P
><P
><TT
> xpickleDocument xp al dest &gt;&gt;&gt; xunpickleDocument xp al' dest </TT
> is the identity arrow
 when applied with the appropriate options. When during pickling indentation is switched on,
 the whitespace must be removed during unpickling.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="botbar"
>Produced by <A HREF="http://www.haskell.org/haddock/"
>Haddock</A
> version 0.8</TD
></TR
></TABLE
></BODY
></HTML
>