<!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 > -> [<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 -> [a]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3Anone" >none</A > :: a -> [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 -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%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 -> <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 > -> <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 > -> <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 -> Bool) -> <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 -> (String -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3Aiffind" >iffind</A > :: String -> (String -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A >) -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3AifTxt" >ifTxt</A > :: (String -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A >) -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3Ao" >o</A > :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3Aunion" >union</A > :: (a -> [b]) -> (a -> [b]) -> a -> [b]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3Acat" >cat</A > :: [a -> [b]] -> a -> [b]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AandThen" >andThen</A > :: (a -> c) -> (c -> a -> b) -> a -> b</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3A%7C%3E%7C" >(|>|)</A > :: (a -> [b]) -> (a -> [b]) -> a -> [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 > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3Awithout" >without</A > :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3A%2F%3E" >(/>)</A > :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3A%3C%2F" >(</)</A > :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3Aet" >et</A > :: (String -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A >) -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3Apath" >path</A > :: [<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3Adeep" >deep</A > :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3Adeepest" >deepest</A > :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3Amulti" >multi</A > :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3Awhen" >when</A > :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3Aguards" >guards</A > :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3Achip" >chip</A > :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3AfoldXml" >foldXml</A > :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3AmkElem" >mkElem</A > :: String -> [<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3AmkElemAttr" >mkElemAttr</A > :: String -> [(String, <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A >)] -> [<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</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%3Aliteral" >literal</A > :: String -> <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 -> <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 -> <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)] -> <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" >(:>)</A > a a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3A%3F%3E" >(?>)</A > :: (a -> [b]) -> <A HREF="Text-XML-HaXml-Combinators.html#t%3AThenElse" >ThenElse</A > (a -> [b]) -> a -> [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 > -> [(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 -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A >) -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter" >LabelFilter</A > 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%3Ax" >x</A > :: (<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter" >LabelFilter</A > a) -> (<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter" >LabelFilter</A > b) -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 > -> <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 -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> String -> <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 > -> <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 -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 > -> <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 > -> a) -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 > -> [<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 -> [a]</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v%3Anone" ></A ><B >none</B > :: a -> [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 -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 -> <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 > -> <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 > -> <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 -> Bool) -> <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 -> (String -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A >) -> <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 -> (String -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A >) -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A >) -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 -> [b]) -> (a -> [b]) -> a -> [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 -> [b]] -> a -> [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 -> c) -> (c -> a -> b) -> a -> 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 >(|>|)</B > :: (a -> [b]) -> (a -> [b]) -> a -> [b]</TD ></TR ><TR ><TD CLASS="doc" >Directional choice: in <TT >f |>| 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 > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 >(/>)</B > :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A ></TD ></TR ><TR ><TD CLASS="doc" >Pronounced <EM >slash</EM >, <TT >f /> 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 >(</)</B > :: <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A ></TD ></TR ><TR ><TD CLASS="doc" >Pronounced <EM >outside</EM >, <TT >f </ 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 -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A >) -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 >] -> <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 "name1", attr "attr1", children, tag "name2"]</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 > -> <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 > -> <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 > -> <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 > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 > -> <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 > -> <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 -> [<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A >] -> <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 -> [(String, <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A >)] -> [<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A >] -> <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 -> <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 -> <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 -> <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)] -> <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 ?> yes :> 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 >(:>)</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 >(?>)</B > :: (a -> [b]) -> <A HREF="Text-XML-HaXml-Combinators.html#t%3AThenElse" >ThenElse</A > (a -> [b]) -> a -> [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 > -> [(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 -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A >) -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter" >LabelFilter</A > a -> <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 > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter" >LabelFilter</A > a) -> (<A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ALabelFilter" >LabelFilter</A > b) -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 > -> <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 -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> String -> <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 > -> <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 -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 > -> <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 > -> a) -> <A HREF="Text-XML-HaXml-Combinators.html#t%3ACFilter" >CFilter</A > -> <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 >