Sophie

Sophie

distrib > * > 2009.0 > i586 > by-pkgid > de6775e528a2ff5ec193c6359891220e > files > 73

haskell-HaXml-1.13.2-1mdv2007.1.i586.rpm

<!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.HaXml.Combinators</TITLE
><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
><SCRIPT SRC="haddock.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"
>HaXml-1.13.2: Utilities for manipulating XML documents</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.HaXml.Combinators</FONT
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="section4"
><B
>Contents</B
></TD
></TR
><TR
><TD
><DL
><DT
><A HREF="#1"
>The content filter type.
</A
></DT
><DT
><A HREF="#2"
>Simple filters.
</A
></DT
><DD
><DL
><DT
><A HREF="#3"
>Selection filters.
</A
></DT
><DT
><A HREF="#4"
>Predicate filters.
</A
></DT
><DT
><A HREF="#5"
>Search filters.
</A
></DT
></DL
></DD
><DT
><A HREF="#6"
>Filter combinators
</A
></DT
><DD
><DL
><DT
><A HREF="#7"
>Basic combinators.
</A
></DT
><DT
><A HREF="#8"
>Recursive search.
</A
></DT
><DT
><A HREF="#9"
>Interior editing.
</A
></DT
><DT
><A HREF="#10"
>Constructive filters.
</A
></DT
></DL
></DD
><DT
><A HREF="#11"
>C-like conditionals.
</A
></DT
><DT
><A HREF="#12"
>Filters with labelled results.
</A
></DT
><DD
><DL
><DT
><A HREF="#13"
>Using and combining labelled filters.
</A
></DT
><DT
><A HREF="#14"
>Some label-generating filters.
</A
></DT
></DL
></DD
></DL
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Description</TD
></TR
><TR
><TD CLASS="doc"
><P
>This module defines the notion of filters and filter combinators
   for processing XML documents.
</P
><P
>These XML transformation combinators are described in the paper
   ``Haskell and XML: Generic Combinators or Type-Based Translation?''
   Malcolm Wallace and Colin Runciman, Proceedings ICFP'99.
</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"
>type</SPAN
> <A HREF="#t%3ACFilter"
>CFilter</A
> = <A HREF="Text-XML-HaXml-Types.html#t%3AContent"
>Content</A
> -&gt; [<A HREF="Text-XML-HaXml-Types.html#t%3AContent"
>Content</A
>]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Akeep"
>keep</A
> :: a -&gt; [a]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Anone"
>none</A
> :: a -&gt; [a]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Achildren"
>children</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aposition"
>position</A
> :: Int -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aelm"
>elm</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Atxt"
>txt</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Atag"
>tag</A
> :: String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aattr"
>attr</A
> :: <A HREF="Text-XML-HaXml-Types.html#t%3AName"
>Name</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aattrval"
>attrval</A
> :: <A HREF="Text-XML-HaXml-Types.html#t%3AAttribute"
>Attribute</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtagWith"
>tagWith</A
> :: (String -&gt; Bool) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Afind"
>find</A
> :: String -&gt; (String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aiffind"
>iffind</A
> :: String -&gt; (String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AifTxt"
>ifTxt</A
> :: (String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Ao"
>o</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aunion"
>union</A
> :: (a -&gt; [b]) -&gt; (a -&gt; [b]) -&gt; a -&gt; [b]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Acat"
>cat</A
> :: [a -&gt; [b]] -&gt; a -&gt; [b]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AandThen"
>andThen</A
> :: (a -&gt; c) -&gt; (c -&gt; a -&gt; b) -&gt; a -&gt; b</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A%7C%3E%7C"
>(|&gt;|)</A
> :: (a -&gt; [b]) -&gt; (a -&gt; [b]) -&gt; a -&gt; [b]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Awith"
>with</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Awithout"
>without</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A%2F%3E"
>(/&gt;)</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A%3C%2F"
>(&lt;/)</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aet"
>et</A
> :: (String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Apath"
>path</A
> :: [<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>] -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Adeep"
>deep</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Adeepest"
>deepest</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Amulti"
>multi</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Awhen"
>when</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aguards"
>guards</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Achip"
>chip</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AfoldXml"
>foldXml</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmkElem"
>mkElem</A
> :: String -&gt; [<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>] -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmkElemAttr"
>mkElemAttr</A
> :: String -&gt; [(String, <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>)] -&gt; [<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>] -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aliteral"
>literal</A
> :: String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Acdata"
>cdata</A
> :: String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AreplaceTag"
>replaceTag</A
> :: String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AreplaceAttrs"
>replaceAttrs</A
> :: [(String, String)] -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A HREF="#t%3AThenElse"
>ThenElse</A
> a = <A HREF="#v%3A%3A%3E"
>(:&gt;)</A
> a a</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3A%3F%3E"
>(?&gt;)</A
> :: (a -&gt; [b]) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3AThenElse"
>ThenElse</A
> (a -&gt; [b]) -&gt; a -&gt; [b]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>type</SPAN
> <A HREF="#t%3ALabelFilter"
>LabelFilter</A
> a = <A HREF="Text-XML-HaXml-Types.html#t%3AContent"
>Content</A
> -&gt; [(a, <A HREF="Text-XML-HaXml-Types.html#t%3AContent"
>Content</A
>)]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aoo"
>oo</A
> :: (a -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> a -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Ax"
>x</A
> :: (<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> a) -&gt; (<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> b) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> (a, b)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Anumbered"
>numbered</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> String</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Ainterspersed"
>interspersed</A
> :: String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> String</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Atagged"
>tagged</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> String</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aattributed"
>attributed</A
> :: String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> String</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Atextlabelled"
>textlabelled</A
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> (Maybe String)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3Aextracted"
>extracted</A
> :: (<A HREF="Text-XML-HaXml-Types.html#t%3AContent"
>Content</A
> -&gt; a) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> a</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="1"
>The content filter type.
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>type</SPAN
> <A NAME="t%3ACFilter"
></A
><B
>CFilter</B
> = <A HREF="Text-XML-HaXml-Types.html#t%3AContent"
>Content</A
> -&gt; [<A HREF="Text-XML-HaXml-Types.html#t%3AContent"
>Content</A
>]</TD
></TR
><TR
><TD CLASS="doc"
>All document transformations are <EM
>content filters</EM
>.
   A filter takes a single XML <TT
><A HREF="Text-XML-HaXml-Types.html#t%3AContent"
>Content</A
></TT
> value and returns a sequence
   of <TT
><A HREF="Text-XML-HaXml-Types.html#t%3AContent"
>Content</A
></TT
> values, possibly empty.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="2"
>Simple filters.
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="3"
>Selection filters.
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
>In the algebra of combinators, <TT
>none</TT
> is the zero, and <TT
>keep</TT
> the identity.
 (They have a more general type than just CFilter.)
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Akeep"
></A
><B
>keep</B
> :: a -&gt; [a]</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Anone"
></A
><B
>none</B
> :: a -&gt; [a]</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Achildren"
></A
><B
>children</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Throw away current node, keep just the (unprocessed) children.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Aposition"
></A
><B
>position</B
> :: Int -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Select the <TT
>n</TT
>'th positional result of a filter.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="4"
>Predicate filters.
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
>These filters either keep or throw away some content based on
 a simple test.  For instance, <TT
>elm</TT
> keeps only a tagged element,
 <TT
>txt</TT
> keeps only non-element text, <TT
>tag</TT
> keeps only an element
 with the named tag, <TT
>attr</TT
> keeps only an element with the named
 attribute, <TT
>attrval</TT
> keeps only an element with the given
 attribute value, <TT
>tagWith</TT
> keeps only an element whose tag name
 satisfies the given predicate.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Aelm"
></A
><B
>elm</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Atxt"
></A
><B
>txt</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Atag"
></A
><B
>tag</B
> :: String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Aattr"
></A
><B
>attr</B
> :: <A HREF="Text-XML-HaXml-Types.html#t%3AName"
>Name</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Aattrval"
></A
><B
>attrval</B
> :: <A HREF="Text-XML-HaXml-Types.html#t%3AAttribute"
>Attribute</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AtagWith"
></A
><B
>tagWith</B
> :: (String -&gt; Bool) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="5"
>Search filters.
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Afind"
></A
><B
>find</B
> :: String -&gt; (String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>For a mandatory attribute field, <TT
>find key cont</TT
> looks up the value of
   the attribute name <TT
>key</TT
>, and applies the continuation <TT
>cont</TT
> to
   the value.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Aiffind"
></A
><B
>iffind</B
> :: String -&gt; (String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>When an attribute field may be absent, use <TT
>iffind key yes no</TT
> to lookup
   its value.  If the attribute is absent, it acts as the <TT
>no</TT
> filter,
   otherwise it applies the <TT
>yes</TT
> filter.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AifTxt"
></A
><B
>ifTxt</B
> :: (String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
><TT
>ifTxt yes no</TT
> processes any textual content with the <TT
>yes</TT
> filter,
   but otherwise is the same as the <TT
>no</TT
> filter.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="6"
>Filter combinators
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="7"
>Basic combinators.
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Ao"
></A
><B
>o</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Sequential (<EM
>Irish</EM
>,<EM
>backwards</EM
>) composition
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Aunion"
></A
><B
>union</B
> :: (a -&gt; [b]) -&gt; (a -&gt; [b]) -&gt; a -&gt; [b]</TD
></TR
><TR
><TD CLASS="doc"
>Binary parallel composition.  Each filter uses a copy of the input,
 rather than one filter using the result of the other.
   (Has a more general type than just CFilter.)
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Acat"
></A
><B
>cat</B
> :: [a -&gt; [b]] -&gt; a -&gt; [b]</TD
></TR
><TR
><TD CLASS="doc"
>Glue a list of filters together.  (A list version of union;
   also has a more general type than just CFilter.)
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AandThen"
></A
><B
>andThen</B
> :: (a -&gt; c) -&gt; (c -&gt; a -&gt; b) -&gt; a -&gt; b</TD
></TR
><TR
><TD CLASS="doc"
>A special form of filter composition where the second filter
   works over the same data as the first, but also uses the
   first's result.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3A%7C%3E%7C"
></A
><B
>(|&gt;|)</B
> :: (a -&gt; [b]) -&gt; (a -&gt; [b]) -&gt; a -&gt; [b]</TD
></TR
><TR
><TD CLASS="doc"
>Directional choice:
   in <TT
>f |&gt;| g</TT
> give g-productions only if no f-productions
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Awith"
></A
><B
>with</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Pruning: in <TT
>f <TT
><A HREF="Text-XML-HaXml-Combinators.html#v%3Awith"
>with</A
></TT
> g</TT
>,
   keep only those f-productions which have at least one g-production
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Awithout"
></A
><B
>without</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Pruning: in <TT
>f <TT
><A HREF="Text-XML-HaXml-Combinators.html#v%3Awithout"
>without</A
></TT
> g</TT
>,
   keep only those f-productions which have no g-productions
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3A%2F%3E"
></A
><B
>(/&gt;)</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Pronounced <EM
>slash</EM
>, <TT
>f /&gt; g</TT
> means g inside f
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3A%3C%2F"
></A
><B
>(&lt;/)</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Pronounced <EM
>outside</EM
>, <TT
>f &lt;/ g</TT
> means f containing g
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Aet"
></A
><B
>et</B
> :: (String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Join an element-matching filter with a text-only filter
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Apath"
></A
><B
>path</B
> :: [<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>] -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Express a list of filters like an XPath query, e.g.
   <TT
>path [children, tag &quot;name1&quot;, attr &quot;attr1&quot;, children, tag &quot;name2&quot;]</TT
>
   is like the XPath query <TT
>/name1[@attr1]/name2</TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="8"
>Recursive search.
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
>Recursive search has three variants: <TT
>deep</TT
> does a breadth-first
 search of the tree, <TT
>deepest</TT
> does a depth-first search, <TT
>multi</TT
> returns
 content at all tree-levels, even those strictly contained within results
 that have already been returned.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Adeep"
></A
><B
>deep</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Adeepest"
></A
><B
>deepest</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Amulti"
></A
><B
>multi</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="9"
>Interior editing.
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Awhen"
></A
><B
>when</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Interior editing:
   <TT
>f <TT
><A HREF="Text-XML-HaXml-Combinators.html#v%3Awhen"
>when</A
></TT
> g</TT
> applies <TT
>f</TT
> only when the predicate <TT
>g</TT
> succeeds,
   otherwise the content is unchanged.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Aguards"
></A
><B
>guards</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Interior editing:
   <TT
>g <TT
><A HREF="Text-XML-HaXml-Combinators.html#v%3Aguards"
>guards</A
></TT
> f</TT
> applies <TT
>f</TT
> only when the predicate <TT
>g</TT
> succeeds,
   otherwise the content is discarded.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Achip"
></A
><B
>chip</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Process CHildren In Place.  The filter is applied to any children
   of an element content, and the element rebuilt around the results.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AfoldXml"
></A
><B
>foldXml</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Recursive application of filters: a fold-like operator.  Defined
   as <TT
>f <TT
><A HREF="Text-XML-HaXml-Combinators.html#v%3Ao"
>o</A
></TT
> chip (foldXml f)</TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="10"
>Constructive filters.
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AmkElem"
></A
><B
>mkElem</B
> :: String -&gt; [<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>] -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Build an element with the given tag name - its content is the results
   of the given list of filters.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AmkElemAttr"
></A
><B
>mkElemAttr</B
> :: String -&gt; [(String, <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>)] -&gt; [<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>] -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Build an element with the given name, attributes, and content.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Aliteral"
></A
><B
>literal</B
> :: String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Build some textual content.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Acdata"
></A
><B
>cdata</B
> :: String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Build some CDATA content.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AreplaceTag"
></A
><B
>replaceTag</B
> :: String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Rename an element tag.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3AreplaceAttrs"
></A
><B
>replaceAttrs</B
> :: [(String, String)] -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Replace the attributes of an element.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="11"
>C-like conditionals.
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
><P
>These definitions provide C-like conditionals, lifted to the filter level.
</P
><P
>The <TT
>(cond ? yes : no)</TT
> style in C becomes <TT
>(cond ?&gt; yes :&gt; no)</TT
> in Haskell.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
> <A NAME="t%3AThenElse"
></A
><B
>ThenElse</B
> a</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>Conjoin the two branches of a conditional.
</TD
></TR
><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%3A%3A%3E"
></A
><B
>(:&gt;)</B
> a a</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%3A%3F%3E"
></A
><B
>(?&gt;)</B
> :: (a -&gt; [b]) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3AThenElse"
>ThenElse</A
> (a -&gt; [b]) -&gt; a -&gt; [b]</TD
></TR
><TR
><TD CLASS="doc"
>Select between the two branches of a joined conditional.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="12"
>Filters with labelled results.
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>type</SPAN
> <A NAME="t%3ALabelFilter"
></A
><B
>LabelFilter</B
> a = <A HREF="Text-XML-HaXml-Types.html#t%3AContent"
>Content</A
> -&gt; [(a, <A HREF="Text-XML-HaXml-Types.html#t%3AContent"
>Content</A
>)]</TD
></TR
><TR
><TD CLASS="doc"
>A LabelFilter is like a CFilter except that it pairs up a polymorphic
   value (label) with each of its results.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="13"
>Using and combining labelled filters.
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Aoo"
></A
><B
>oo</B
> :: (a -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
>) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> a -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
></TD
></TR
><TR
><TD CLASS="doc"
>Compose a label-processing filter with a label-generating filter.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Ax"
></A
><B
>x</B
> :: (<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> a) -&gt; (<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> b) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> (a, b)</TD
></TR
><TR
><TD CLASS="doc"
>Combine labels.  Think of this as a pair-wise zip on labels.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="14"
>Some label-generating filters.
</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Anumbered"
></A
><B
>numbered</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> String</TD
></TR
><TR
><TD CLASS="doc"
>Number the results from 1 upwards.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Ainterspersed"
></A
><B
>interspersed</B
> :: String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> String</TD
></TR
><TR
><TD CLASS="doc"
>In <TT
>interspersed a f b</TT
>, label each result of <TT
>f</TT
> with the string <TT
>a</TT
>,
   except for the last one which is labelled with the string <TT
>b</TT
>.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Atagged"
></A
><B
>tagged</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> String</TD
></TR
><TR
><TD CLASS="doc"
>Label each element in the result with its tag name.  Non-element
   results get an empty string label.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Aattributed"
></A
><B
>attributed</B
> :: String -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> String</TD
></TR
><TR
><TD CLASS="doc"
>Label each element in the result with the value of the named attribute.
   Elements without the attribute, and non-element results, get an
   empty string label.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Atextlabelled"
></A
><B
>textlabelled</B
> :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> (Maybe String)</TD
></TR
><TR
><TD CLASS="doc"
>Label each textual part of the result with its text.  Element
   results get an empty string label.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v%3Aextracted"
></A
><B
>extracted</B
> :: (<A HREF="Text-XML-HaXml-Types.html#t%3AContent"
>Content</A
> -&gt; a) -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter"
>CFilter</A
> -&gt; <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter"
>LabelFilter</A
> a</TD
></TR
><TR
><TD CLASS="doc"
>Label each content with some information extracted from itself.
</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
>