hxt-8.0.0: doc/hdoc/src/Text-XML-HXT-XPath-XPathDataTypes.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
<title>Haskell Code by HsColour</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='comment'>-- ------------------------------------------------------------</span>
<a name="line-2"></a>
<a name="line-3"></a><span class='comment'>{- |
<a name="line-4"></a> Module : Text.XML.HXT.XPath.XPathDataTypes
<a name="line-5"></a> Copyright : Copyright (C) 2006 Uwe Schmidt
<a name="line-6"></a> License : MIT
<a name="line-7"></a>
<a name="line-8"></a> Maintainer : Uwe Schmidt (uwe@fh-wedel.de)
<a name="line-9"></a> Stability : experimental
<a name="line-10"></a> Portability: portable
<a name="line-11"></a>
<a name="line-12"></a> The core data types of XPath.
<a name="line-13"></a> The Type NodeSet is based on the module "NavTree" which was adapted from
<a name="line-14"></a> HXML (<<a href="http://www.flightlab.com/~joe/hxml/">http://www.flightlab.com/~joe/hxml/</a>>)
<a name="line-15"></a>
<a name="line-16"></a>-}</span>
<a name="line-17"></a>
<a name="line-18"></a><span class='comment'>-- ------------------------------------------------------------</span>
<a name="line-19"></a>
<a name="line-20"></a><span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>XPath</span><span class='varop'>.</span><span class='conid'>XPathDataTypes</span>
<a name="line-21"></a> <span class='layout'>(</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>XPath</span><span class='varop'>.</span><span class='conid'>XPathDataTypes</span>
<a name="line-22"></a> <span class='layout'>,</span> <span class='keyword'>module</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>XPath</span><span class='varop'>.</span><span class='conid'>NavTree</span>
<a name="line-23"></a> <span class='layout'>)</span>
<a name="line-24"></a><span class='keyword'>where</span>
<a name="line-25"></a>
<a name="line-26"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>XPath</span><span class='varop'>.</span><span class='conid'>NavTree</span>
<a name="line-27"></a><span class='keyword'>import</span> <span class='conid'>Text</span><span class='varop'>.</span><span class='conid'>XML</span><span class='varop'>.</span><span class='conid'>HXT</span><span class='varop'>.</span><span class='conid'>DOM</span><span class='varop'>.</span><span class='conid'>Interface</span>
<a name="line-28"></a>
<a name="line-29"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
<a name="line-30"></a><span class='comment'>--</span>
<a name="line-31"></a><span class='comment'>-- Expr</span>
<a name="line-32"></a>
<a name="line-33"></a><span class='comment'>-- | Represents expression</span>
<a name="line-34"></a><span class='comment'>-- </span>
<a name="line-35"></a>
<a name="line-36"></a><a name="Expr"></a><span class='keyword'>data</span> <span class='conid'>Expr</span> <span class='keyglyph'>=</span> <span class='conid'>GenExpr</span> <span class='conid'>Op</span> <span class='keyglyph'>[</span><span class='conid'>Expr</span><span class='keyglyph'>]</span> <span class='comment'>-- ^ generic expression with an operator and one or more operands</span>
<a name="line-37"></a> <span class='keyglyph'>|</span> <span class='conid'>PathExpr</span> <span class='layout'>(</span><span class='conid'>Maybe</span> <span class='conid'>Expr</span><span class='layout'>)</span> <span class='layout'>(</span><span class='conid'>Maybe</span> <span class='conid'>LocationPath</span><span class='layout'>)</span>
<a name="line-38"></a> <span class='comment'>-- ^ a path expression contains an optional filter-expression</span>
<a name="line-39"></a> <span class='comment'>-- or an optional locationpath. one expression is urgently</span>
<a name="line-40"></a> <span class='comment'>-- necessary, both are possible</span>
<a name="line-41"></a> <span class='keyglyph'>|</span> <span class='conid'>FilterExpr</span> <span class='keyglyph'>[</span><span class='conid'>Expr</span><span class='keyglyph'>]</span> <span class='comment'>-- ^ filter-expression with zero or more predicates</span>
<a name="line-42"></a> <span class='keyglyph'>|</span> <span class='conid'>VarExpr</span> <span class='conid'>VarName</span> <span class='comment'>-- ^ variable</span>
<a name="line-43"></a> <span class='keyglyph'>|</span> <span class='conid'>LiteralExpr</span> <span class='conid'>Literal</span> <span class='comment'>-- ^ string</span>
<a name="line-44"></a> <span class='keyglyph'>|</span> <span class='conid'>NumberExpr</span> <span class='conid'>XPNumber</span> <span class='comment'>-- ^ number</span>
<a name="line-45"></a> <span class='keyglyph'>|</span> <span class='conid'>FctExpr</span> <span class='conid'>FctName</span> <span class='conid'>FctArguments</span> <span class='comment'>-- ^ a function with a name and an optional list of arguments</span>
<a name="line-46"></a> <span class='keyword'>deriving</span> <span class='layout'>(</span><span class='conid'>Show</span><span class='layout'>,</span> <span class='conid'>Eq</span><span class='layout'>)</span>
<a name="line-47"></a>
<a name="line-48"></a>
<a name="line-49"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
<a name="line-50"></a><span class='comment'>--</span>
<a name="line-51"></a><span class='comment'>-- Op</span>
<a name="line-52"></a>
<a name="line-53"></a><span class='comment'>-- | Represents XPath operators</span>
<a name="line-54"></a>
<a name="line-55"></a><a name="Op"></a><span class='keyword'>data</span> <span class='conid'>Op</span> <span class='keyglyph'>=</span> <span class='conid'>Or</span> <span class='keyglyph'>|</span> <span class='conid'>And</span> <span class='keyglyph'>|</span> <span class='conid'>Eq</span> <span class='keyglyph'>|</span> <span class='conid'>NEq</span> <span class='keyglyph'>|</span> <span class='conid'>Less</span> <span class='keyglyph'>|</span> <span class='conid'>Greater</span> <span class='keyglyph'>|</span> <span class='conid'>LessEq</span>
<a name="line-56"></a> <span class='keyglyph'>|</span> <span class='conid'>GreaterEq</span> <span class='keyglyph'>|</span><span class='conid'>Plus</span> <span class='keyglyph'>|</span> <span class='conid'>Minus</span> <span class='keyglyph'>|</span> <span class='conid'>Div</span> <span class='keyglyph'>|</span> <span class='conid'>Mod</span> <span class='keyglyph'>|</span> <span class='conid'>Mult</span><span class='keyglyph'>|</span> <span class='conid'>Unary</span> <span class='keyglyph'>|</span> <span class='conid'>Union</span>
<a name="line-57"></a> <span class='keyword'>deriving</span> <span class='layout'>(</span><span class='conid'>Show</span><span class='layout'>,</span> <span class='conid'>Eq</span><span class='layout'>)</span>
<a name="line-58"></a>
<a name="line-59"></a>
<a name="line-60"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
<a name="line-61"></a><span class='comment'>--</span>
<a name="line-62"></a><span class='comment'>-- |</span>
<a name="line-63"></a><span class='comment'>-- Represents a floating-point number according the IEEE 754 standard</span>
<a name="line-64"></a><span class='comment'>--</span>
<a name="line-65"></a><span class='comment'>-- The standard includes a special Not-a-Number (NaN) value,</span>
<a name="line-66"></a><span class='comment'>-- positive and negative infinity, positive and negative zero.</span>
<a name="line-67"></a>
<a name="line-68"></a><a name="XPNumber"></a><span class='keyword'>data</span> <span class='conid'>XPNumber</span> <span class='keyglyph'>=</span> <span class='conid'>Float</span> <span class='conid'>Float</span> <span class='comment'>-- ^ floating-point number</span>
<a name="line-69"></a> <span class='keyglyph'>|</span> <span class='conid'>NaN</span> <span class='comment'>-- ^ not-a-number</span>
<a name="line-70"></a> <span class='keyglyph'>|</span> <span class='conid'>NegInf</span> <span class='comment'>-- ^ negative infinity</span>
<a name="line-71"></a> <span class='keyglyph'>|</span> <span class='conid'>Neg0</span> <span class='comment'>-- ^ negative zero</span>
<a name="line-72"></a> <span class='keyglyph'>|</span> <span class='conid'>Pos0</span> <span class='comment'>-- ^ positive zero</span>
<a name="line-73"></a> <span class='keyglyph'>|</span> <span class='conid'>PosInf</span> <span class='comment'>-- ^ positive infinity</span>
<a name="line-74"></a>
<a name="line-75"></a>
<a name="line-76"></a><span class='keyword'>instance</span> <span class='conid'>Show</span> <span class='conid'>XPNumber</span>
<a name="line-77"></a> <span class='keyword'>where</span>
<a name="line-78"></a> <span class='varid'>show</span> <span class='conid'>NaN</span> <span class='keyglyph'>=</span> <span class='str'>"NaN"</span>
<a name="line-79"></a> <span class='varid'>show</span> <span class='conid'>NegInf</span> <span class='keyglyph'>=</span> <span class='str'>"-Infinity"</span>
<a name="line-80"></a> <span class='varid'>show</span> <span class='conid'>Neg0</span> <span class='keyglyph'>=</span> <span class='str'>"-0"</span>
<a name="line-81"></a> <span class='varid'>show</span> <span class='conid'>Pos0</span> <span class='keyglyph'>=</span> <span class='str'>"0"</span>
<a name="line-82"></a> <span class='varid'>show</span> <span class='layout'>(</span><span class='conid'>Float</span> <span class='varid'>f</span><span class='layout'>)</span> <span class='keyglyph'>=</span> <span class='varid'>show</span> <span class='varid'>f</span>
<a name="line-83"></a> <span class='varid'>show</span> <span class='conid'>PosInf</span> <span class='keyglyph'>=</span> <span class='str'>"Infinity"</span>
<a name="line-84"></a>
<a name="line-85"></a>
<a name="line-86"></a>
<a name="line-87"></a><span class='comment'>-- Negative zero is equal to positive zero,</span>
<a name="line-88"></a><span class='comment'>-- equality test with NaN-value is always false</span>
<a name="line-89"></a><span class='keyword'>instance</span> <span class='conid'>Eq</span> <span class='conid'>XPNumber</span>
<a name="line-90"></a> <span class='keyword'>where</span>
<a name="line-91"></a> <span class='conid'>NegInf</span> <span class='varop'>==</span> <span class='conid'>NegInf</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>
<a name="line-92"></a> <span class='conid'>Pos0</span> <span class='varop'>==</span> <span class='conid'>Neg0</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>
<a name="line-93"></a> <span class='conid'>Neg0</span> <span class='varop'>==</span> <span class='conid'>Pos0</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>
<a name="line-94"></a> <span class='conid'>Pos0</span> <span class='varop'>==</span> <span class='conid'>Pos0</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>
<a name="line-95"></a> <span class='conid'>Neg0</span> <span class='varop'>==</span> <span class='conid'>Neg0</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>
<a name="line-96"></a> <span class='conid'>Float</span> <span class='varid'>f</span> <span class='varop'>==</span> <span class='conid'>Float</span> <span class='varid'>g</span> <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varop'>==</span> <span class='varid'>g</span>
<a name="line-97"></a> <span class='conid'>PosInf</span> <span class='varop'>==</span> <span class='conid'>PosInf</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>
<a name="line-98"></a> <span class='keyword'>_</span> <span class='varop'>==</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>False</span>
<a name="line-99"></a>
<a name="line-100"></a>
<a name="line-101"></a><span class='keyword'>instance</span> <span class='conid'>Ord</span> <span class='conid'>XPNumber</span>
<a name="line-102"></a> <span class='keyword'>where</span>
<a name="line-103"></a> <span class='varid'>a</span> <span class='varop'><=</span> <span class='varid'>b</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='varop'><</span> <span class='varid'>b</span><span class='layout'>)</span> <span class='varop'>||</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='varop'>==</span> <span class='varid'>b</span><span class='layout'>)</span>
<a name="line-104"></a> <span class='varid'>a</span> <span class='varop'>>=</span> <span class='varid'>b</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='varop'>></span> <span class='varid'>b</span><span class='layout'>)</span> <span class='varop'>||</span> <span class='layout'>(</span><span class='varid'>a</span> <span class='varop'>==</span> <span class='varid'>b</span><span class='layout'>)</span>
<a name="line-105"></a> <span class='varid'>a</span> <span class='varop'>></span> <span class='varid'>b</span> <span class='keyglyph'>=</span> <span class='varid'>b</span> <span class='varop'><</span> <span class='varid'>a</span>
<a name="line-106"></a>
<a name="line-107"></a> <span class='conid'>NaN</span> <span class='varop'><</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>False</span>
<a name="line-108"></a> <span class='keyword'>_</span> <span class='varop'><</span> <span class='conid'>NaN</span> <span class='keyglyph'>=</span> <span class='conid'>False</span>
<a name="line-109"></a>
<a name="line-110"></a> <span class='keyword'>_</span> <span class='varop'><</span> <span class='conid'>NegInf</span> <span class='keyglyph'>=</span> <span class='conid'>False</span>
<a name="line-111"></a> <span class='conid'>NegInf</span> <span class='varop'><</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>
<a name="line-112"></a>
<a name="line-113"></a> <span class='conid'>Neg0</span> <span class='varop'><</span> <span class='conid'>Neg0</span> <span class='keyglyph'>=</span> <span class='conid'>False</span>
<a name="line-114"></a> <span class='conid'>Pos0</span> <span class='varop'><</span> <span class='conid'>Pos0</span> <span class='keyglyph'>=</span> <span class='conid'>False</span>
<a name="line-115"></a> <span class='conid'>Pos0</span> <span class='varop'><</span> <span class='conid'>Neg0</span> <span class='keyglyph'>=</span> <span class='conid'>False</span>
<a name="line-116"></a> <span class='conid'>Neg0</span> <span class='varop'><</span> <span class='conid'>Pos0</span> <span class='keyglyph'>=</span> <span class='conid'>False</span>
<a name="line-117"></a>
<a name="line-118"></a> <span class='conid'>Neg0</span> <span class='varop'><</span> <span class='conid'>Float</span> <span class='varid'>f</span> <span class='keyglyph'>=</span> <span class='num'>0</span> <span class='varop'><</span> <span class='varid'>f</span>
<a name="line-119"></a> <span class='conid'>Pos0</span> <span class='varop'><</span> <span class='conid'>Float</span> <span class='varid'>f</span> <span class='keyglyph'>=</span> <span class='num'>0</span> <span class='varop'><</span> <span class='varid'>f</span>
<a name="line-120"></a> <span class='conid'>Float</span> <span class='varid'>f</span> <span class='varop'><</span> <span class='conid'>Neg0</span> <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varop'><</span> <span class='num'>0</span>
<a name="line-121"></a> <span class='conid'>Float</span> <span class='varid'>f</span> <span class='varop'><</span> <span class='conid'>Pos0</span> <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varop'><</span> <span class='num'>0</span>
<a name="line-122"></a>
<a name="line-123"></a> <span class='conid'>Float</span> <span class='varid'>f</span> <span class='varop'><</span> <span class='conid'>Float</span> <span class='varid'>g</span> <span class='keyglyph'>=</span> <span class='varid'>f</span> <span class='varop'><</span> <span class='varid'>g</span>
<a name="line-124"></a>
<a name="line-125"></a> <span class='conid'>PosInf</span> <span class='varop'><</span> <span class='keyword'>_</span> <span class='keyglyph'>=</span> <span class='conid'>False</span>
<a name="line-126"></a> <span class='keyword'>_</span> <span class='varop'><</span> <span class='conid'>PosInf</span> <span class='keyglyph'>=</span> <span class='conid'>True</span>
<a name="line-127"></a>
<a name="line-128"></a>
<a name="line-129"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
<a name="line-130"></a><span class='comment'>-- | Represents location path</span>
<a name="line-131"></a><span class='comment'>--</span>
<a name="line-132"></a><span class='comment'>-- A location path consists of a sequence of one or more location steps.</span>
<a name="line-133"></a>
<a name="line-134"></a><a name="LocationPath"></a><span class='keyword'>data</span> <span class='conid'>LocationPath</span> <span class='keyglyph'>=</span> <span class='conid'>LocPath</span> <span class='conid'>Path</span> <span class='keyglyph'>[</span><span class='conid'>XStep</span><span class='keyglyph'>]</span>
<a name="line-135"></a> <span class='keyword'>deriving</span> <span class='layout'>(</span><span class='conid'>Show</span><span class='layout'>,</span> <span class='conid'>Eq</span><span class='layout'>)</span>
<a name="line-136"></a>
<a name="line-137"></a>
<a name="line-138"></a><span class='comment'>-- ----------------------------------------------------------------------------- </span>
<a name="line-139"></a><span class='comment'>-- |</span>
<a name="line-140"></a><span class='comment'>-- A location path is either a relative or an absolute path.</span>
<a name="line-141"></a>
<a name="line-142"></a><a name="Path"></a><span class='keyword'>data</span> <span class='conid'>Path</span> <span class='keyglyph'>=</span> <span class='conid'>Rel</span> <span class='keyglyph'>|</span> <span class='conid'>Abs</span>
<a name="line-143"></a> <span class='keyword'>deriving</span> <span class='layout'>(</span><span class='conid'>Show</span><span class='layout'>,</span> <span class='conid'>Eq</span><span class='layout'>)</span>
<a name="line-144"></a>
<a name="line-145"></a>
<a name="line-146"></a><span class='comment'>-- | Represents location step</span>
<a name="line-147"></a><span class='comment'>-- </span>
<a name="line-148"></a><span class='comment'>-- A location step consists of an axis, a node-test and zero or more predicates.</span>
<a name="line-149"></a>
<a name="line-150"></a><a name="XStep"></a><span class='keyword'>data</span> <span class='conid'>XStep</span> <span class='keyglyph'>=</span> <span class='conid'>Step</span> <span class='conid'>AxisSpec</span> <span class='conid'>NodeTest</span> <span class='keyglyph'>[</span><span class='conid'>Expr</span><span class='keyglyph'>]</span>
<a name="line-151"></a> <span class='keyword'>deriving</span> <span class='layout'>(</span><span class='conid'>Show</span><span class='layout'>,</span> <span class='conid'>Eq</span><span class='layout'>)</span>
<a name="line-152"></a>
<a name="line-153"></a>
<a name="line-154"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
<a name="line-155"></a><span class='comment'>--</span>
<a name="line-156"></a><span class='comment'>-- AxisSpec</span>
<a name="line-157"></a>
<a name="line-158"></a><span class='comment'>-- | Represents XPath axis</span>
<a name="line-159"></a>
<a name="line-160"></a><a name="AxisSpec"></a><span class='keyword'>data</span> <span class='conid'>AxisSpec</span> <span class='keyglyph'>=</span> <span class='conid'>Ancestor</span> <span class='keyglyph'>|</span> <span class='conid'>AncestorOrSelf</span> <span class='keyglyph'>|</span> <span class='conid'>Attribute</span> <span class='keyglyph'>|</span> <span class='conid'>Child</span> <span class='keyglyph'>|</span> <span class='conid'>Descendant</span>
<a name="line-161"></a> <span class='keyglyph'>|</span> <span class='conid'>DescendantOrSelf</span> <span class='keyglyph'>|</span> <span class='conid'>Following</span> <span class='keyglyph'>|</span> <span class='conid'>FollowingSibling</span>
<a name="line-162"></a> <span class='keyglyph'>|</span> <span class='conid'>Namespace</span> <span class='keyglyph'>|</span> <span class='conid'>Parent</span> <span class='keyglyph'>|</span> <span class='conid'>Preceding</span> <span class='keyglyph'>|</span> <span class='conid'>PrecedingSibling</span> <span class='keyglyph'>|</span> <span class='conid'>Self</span>
<a name="line-163"></a> <span class='keyword'>deriving</span> <span class='layout'>(</span><span class='conid'>Show</span><span class='layout'>,</span> <span class='conid'>Eq</span><span class='layout'>)</span>
<a name="line-164"></a>
<a name="line-165"></a>
<a name="line-166"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
<a name="line-167"></a><span class='comment'>--</span>
<a name="line-168"></a><span class='comment'>-- NodeTest</span>
<a name="line-169"></a>
<a name="line-170"></a><span class='comment'>-- | Represents XPath node-tests</span>
<a name="line-171"></a>
<a name="line-172"></a><a name="NodeTest"></a><span class='comment'>--data NodeTest = NameTest Name -- ^ name-test</span>
<a name="line-173"></a><a name="NodeTest"></a><span class='keyword'>data</span> <span class='conid'>NodeTest</span> <span class='keyglyph'>=</span> <span class='conid'>NameTest</span> <span class='conid'>QName</span> <span class='comment'>-- ^ name-test</span>
<a name="line-174"></a> <span class='keyglyph'>|</span> <span class='conid'>PI</span> <span class='conid'>String</span> <span class='comment'>-- ^ processing-instruction-test with a literal argument</span>
<a name="line-175"></a> <span class='keyglyph'>|</span> <span class='conid'>TypeTest</span> <span class='conid'>XPathNode</span> <span class='comment'>-- ^ all nodetype-tests</span>
<a name="line-176"></a> <span class='keyword'>deriving</span> <span class='layout'>(</span><span class='conid'>Show</span><span class='layout'>,</span> <span class='conid'>Eq</span><span class='layout'>)</span>
<a name="line-177"></a>
<a name="line-178"></a>
<a name="line-179"></a>
<a name="line-180"></a>
<a name="line-181"></a>
<a name="line-182"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
<a name="line-183"></a><span class='comment'>--</span>
<a name="line-184"></a><span class='comment'>-- XPathNode</span>
<a name="line-185"></a>
<a name="line-186"></a><span class='comment'>-- | Represents nodetype-tests</span>
<a name="line-187"></a>
<a name="line-188"></a><a name="XPathNode"></a><span class='keyword'>data</span> <span class='conid'>XPathNode</span> <span class='keyglyph'>=</span> <span class='conid'>XPNode</span> <span class='comment'>-- ^ all 7 nodetypes</span>
<a name="line-189"></a> <span class='comment'>-- (root, element, attribute, namespace, pi, comment, text)</span>
<a name="line-190"></a> <span class='keyglyph'>|</span> <span class='conid'>XPCommentNode</span> <span class='comment'>-- ^ comment-nodes</span>
<a name="line-191"></a> <span class='keyglyph'>|</span> <span class='conid'>XPPINode</span> <span class='comment'>-- ^ processing-instruction-nodes</span>
<a name="line-192"></a> <span class='keyglyph'>|</span> <span class='conid'>XPTextNode</span> <span class='comment'>-- ^ text-nodes: cdata, character data</span>
<a name="line-193"></a> <span class='keyword'>deriving</span> <span class='layout'>(</span><span class='conid'>Show</span><span class='layout'>,</span> <span class='conid'>Eq</span><span class='layout'>)</span>
<a name="line-194"></a>
<a name="line-195"></a>
<a name="line-196"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
<a name="line-197"></a><span class='comment'>--</span>
<a name="line-198"></a><span class='comment'>-- useful type definitions</span>
<a name="line-199"></a>
<a name="line-200"></a><a name="Name"></a><span class='keyword'>type</span> <span class='conid'>Name</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='conid'>NamePrefix</span><span class='layout'>,</span> <span class='conid'>LocalName</span><span class='layout'>)</span>
<a name="line-201"></a><a name="NamePrefix"></a><span class='keyword'>type</span> <span class='conid'>NamePrefix</span> <span class='keyglyph'>=</span> <span class='conid'>String</span>
<a name="line-202"></a><a name="LocalName"></a><span class='keyword'>type</span> <span class='conid'>LocalName</span> <span class='keyglyph'>=</span> <span class='conid'>String</span>
<a name="line-203"></a>
<a name="line-204"></a><a name="VarName"></a><span class='comment'>-- | Variable name</span>
<a name="line-205"></a><a name="VarName"></a><span class='keyword'>type</span> <span class='conid'>VarName</span> <span class='keyglyph'>=</span> <span class='conid'>Name</span>
<a name="line-206"></a>
<a name="line-207"></a><a name="Literal"></a><span class='comment'>-- | a string</span>
<a name="line-208"></a><a name="Literal"></a><span class='keyword'>type</span> <span class='conid'>Literal</span> <span class='keyglyph'>=</span> <span class='conid'>String</span>
<a name="line-209"></a>
<a name="line-210"></a><a name="FctName"></a><span class='comment'>-- | Function name</span>
<a name="line-211"></a><a name="FctName"></a><span class='keyword'>type</span> <span class='conid'>FctName</span> <span class='keyglyph'>=</span> <span class='conid'>String</span>
<a name="line-212"></a>
<a name="line-213"></a><a name="FctArguments"></a><span class='comment'>-- | Function arguments</span>
<a name="line-214"></a><a name="FctArguments"></a><span class='keyword'>type</span> <span class='conid'>FctArguments</span> <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>Expr</span><span class='keyglyph'>]</span>
<a name="line-215"></a>
<a name="line-216"></a><a name="Context"></a><span class='comment'>-- | Evaluation context</span>
<a name="line-217"></a><a name="Context"></a><span class='keyword'>type</span> <span class='conid'>Context</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='conid'>ConPos</span> <span class='layout'>,</span><span class='conid'>ConLen</span><span class='layout'>,</span> <span class='conid'>ConNode</span><span class='layout'>)</span>
<a name="line-218"></a>
<a name="line-219"></a><a name="ConPos"></a><span class='comment'>-- | Context position</span>
<a name="line-220"></a><a name="ConPos"></a><span class='keyword'>type</span> <span class='conid'>ConPos</span> <span class='keyglyph'>=</span> <span class='conid'>Int</span>
<a name="line-221"></a>
<a name="line-222"></a><a name="ConLen"></a><span class='comment'>-- | Context length</span>
<a name="line-223"></a><a name="ConLen"></a><span class='keyword'>type</span> <span class='conid'>ConLen</span> <span class='keyglyph'>=</span> <span class='conid'>Int</span>
<a name="line-224"></a>
<a name="line-225"></a><a name="ConNode"></a><span class='comment'>-- | Context node</span>
<a name="line-226"></a><a name="ConNode"></a><span class='keyword'>type</span> <span class='conid'>ConNode</span> <span class='keyglyph'>=</span> <span class='conid'>NavXmlTree</span>
<a name="line-227"></a>
<a name="line-228"></a>
<a name="line-229"></a>
<a name="line-230"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
<a name="line-231"></a><span class='comment'>--</span>
<a name="line-232"></a><span class='comment'>-- XPathValue</span>
<a name="line-233"></a>
<a name="line-234"></a><span class='comment'>-- | Represents XPath results</span>
<a name="line-235"></a>
<a name="line-236"></a><a name="XPathValue"></a><span class='keyword'>data</span> <span class='conid'>XPathValue</span> <span class='keyglyph'>=</span> <span class='conid'>XPVNode</span> <span class='conid'>NodeSet</span> <span class='comment'>-- ^ node-set</span>
<a name="line-237"></a> <span class='keyglyph'>|</span> <span class='conid'>XPVBool</span> <span class='conid'>Bool</span> <span class='comment'>-- ^ boolean value</span>
<a name="line-238"></a> <span class='keyglyph'>|</span> <span class='conid'>XPVNumber</span> <span class='conid'>XPNumber</span> <span class='comment'>-- ^ number according the IEEE 754 standard</span>
<a name="line-239"></a> <span class='keyglyph'>|</span> <span class='conid'>XPVString</span> <span class='conid'>String</span> <span class='comment'>-- ^ string value</span>
<a name="line-240"></a> <span class='keyglyph'>|</span> <span class='conid'>XPVError</span> <span class='conid'>String</span> <span class='comment'>-- ^ error message with text</span>
<a name="line-241"></a> <span class='keyword'>deriving</span> <span class='layout'>(</span><span class='conid'>Show</span><span class='layout'>,</span> <span class='conid'>Eq</span><span class='layout'>,</span> <span class='conid'>Ord</span><span class='layout'>)</span>
<a name="line-242"></a>
<a name="line-243"></a>
<a name="line-244"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
<a name="line-245"></a><span class='comment'>--</span>
<a name="line-246"></a><span class='comment'>-- Basic types for navigable tree and filters</span>
<a name="line-247"></a>
<a name="line-248"></a><span class='comment'>-- | Node of navigable tree representation</span>
<a name="line-249"></a>
<a name="line-250"></a><a name="NavXmlTree"></a><span class='keyword'>type</span> <span class='conid'>NavXmlTree</span> <span class='keyglyph'>=</span> <span class='conid'>NavTree</span> <span class='conid'>XNode</span>
<a name="line-251"></a>
<a name="line-252"></a><span class='comment'>-- | List of nodes of navigable tree representation</span>
<a name="line-253"></a>
<a name="line-254"></a><a name="NavXmlTrees"></a><span class='keyword'>type</span> <span class='conid'>NavXmlTrees</span> <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='conid'>NavXmlTree</span><span class='keyglyph'>]</span>
<a name="line-255"></a>
<a name="line-256"></a><span class='comment'>-- | Type synonym for a list of navigable tree representation</span>
<a name="line-257"></a>
<a name="line-258"></a><a name="NodeSet"></a><span class='keyword'>type</span> <span class='conid'>NodeSet</span> <span class='keyglyph'>=</span> <span class='conid'>NavXmlTrees</span>
<a name="line-259"></a>
<a name="line-260"></a><span class='comment'>-- | A functions that takes a XPath result and returns a XPath result</span>
<a name="line-261"></a>
<a name="line-262"></a><a name="XPathFilter"></a><span class='keyword'>type</span> <span class='conid'>XPathFilter</span> <span class='keyglyph'>=</span> <span class='conid'>XPathValue</span> <span class='keyglyph'>-></span> <span class='conid'>XPathValue</span>
<a name="line-263"></a>
<a name="line-264"></a>
<a name="line-265"></a>
<a name="line-266"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
<a name="line-267"></a><span class='comment'>--</span>
<a name="line-268"></a><span class='comment'>-- Env</span>
<a name="line-269"></a>
<a name="line-270"></a><span class='comment'>-- | XPath environment</span>
<a name="line-271"></a><span class='comment'>--</span>
<a name="line-272"></a><span class='comment'>-- All variables are stored in the environment,</span>
<a name="line-273"></a><span class='comment'>-- each variable name is bound to a value.</span>
<a name="line-274"></a>
<a name="line-275"></a><a name="VarTab"></a><span class='keyword'>type</span> <span class='conid'>VarTab</span> <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>VarName</span><span class='layout'>,</span> <span class='conid'>XPathValue</span><span class='layout'>)</span><span class='keyglyph'>]</span>
<a name="line-276"></a><a name="KeyTab"></a><span class='keyword'>type</span> <span class='conid'>KeyTab</span> <span class='keyglyph'>=</span> <span class='keyglyph'>[</span><span class='layout'>(</span><span class='conid'>QName</span><span class='layout'>,</span> <span class='conid'>String</span><span class='layout'>,</span> <span class='conid'>NavXmlTree</span><span class='layout'>)</span><span class='keyglyph'>]</span>
<a name="line-277"></a>
<a name="line-278"></a><a name="Env"></a><span class='keyword'>type</span> <span class='conid'>Env</span> <span class='keyglyph'>=</span> <span class='layout'>(</span><span class='conid'>VarTab</span><span class='layout'>,</span> <span class='conid'>KeyTab</span><span class='layout'>)</span>
<a name="line-279"></a>
<a name="line-280"></a><a name="varEnv"></a><span class='definition'>varEnv</span> <span class='keyglyph'>::</span> <span class='conid'>Env</span>
<a name="line-281"></a><span class='definition'>varEnv</span> <span class='keyglyph'>=</span> <span class='layout'>(</span> <span class='keyglyph'>[</span> <span class='layout'>(</span><span class='layout'>(</span><span class='str'>""</span><span class='layout'>,</span> <span class='str'>"name"</span><span class='layout'>)</span><span class='layout'>,</span> <span class='conid'>XPVNumber</span> <span class='conid'>NaN</span><span class='layout'>)</span> <span class='keyglyph'>]</span>
<a name="line-282"></a> <span class='layout'>,</span> <span class='conid'>[]</span>
<a name="line-283"></a> <span class='layout'>)</span>
<a name="line-284"></a>
<a name="line-285"></a><span class='comment'>-- -----------------------------------------------------------------------------</span>
</pre></body>
</html>