úÎ v®s^&      !"#$%None 3;=KV]erz+&Zipper into a  tree.' Retrieves the current node of a &.(*Nodes to the left (ordered right to left).)+Nodes to the right (ordered left to right).*(Parents' name, attributes, and siblings.Renders a value of type a into an XML fragment body.If a  instance for a exists, then:    ( a) == + a ,Internal parser state.-Parsing the top-level nodes.."Parsing a particular root element.!XML parser monad. To be run with  .You can build a  using , , , , , or any of the /, 0 or 1 combinators.1Parses an XML fragment body into a value of type a.If a  instance for a exists, then:    ( a) == + a 9Either a text or an element node in an XML fragment body.Construct with   or  . Destruct with  or .Destruct a text .Destruct an element .Case analysis for a .2 Normalizes s by concatenating consecutive  nodes. 2Construct a XML fragment body containing a single  , if possible.MThis function will return empty list if it is not possible to construct the + with the given input. To learn more about why+ it was not possible to construct it, use   instead.Using   rather than  i is recommended, so that you are forced to acknowledge a failing situation in case it happens. However,  K is at times more convenient to use, whenever you know the input is valid.  Construct a  , if possible.Returns 3 if the  / can't be created, with an explanation of why. 2Construct a XML fragment body containing a single  , if possible.MThis function will return empty list if it is not possible to construct the + with the given input. To learn more about why+ it was not possible to construct it, use   instead.Using   rather than  i is recommended, so that you are forced to acknowledge a failing situation in case it happens. However,  K is at times more convenient to use, whenever you know the input is valid.  Construct an  .Returns 3 if the  / can't be created, with an explanation of why. BRun a parser on an XML fragment body. If the parser fails, then a 4$ with an error message is returned.rNotice that this function doesn't enforce that all input is consumed. If you want that behavior, then please use  in the given .A 0 that always fails with the given error message. "foo" p runs a  p inside a element node named "foo"D. This fails if such element does not exist at the current position.jLeading whitespace is ignored. If you need to preserve that whitespace for some reason, capture it using  before using .+Consumes the element from the parser state. p runs a  pt inside the element node at the current position, if any. Otherwise, if no such element exists, this parser fails.6You can recover the name of the matched element using  inside the given n. However, if you already know beforehand the name of the element that you want to match, it's better to use  rather than .jLeading whitespace is ignored. If you need to preserve that whitespace for some reason, capture it using  before using .+Consumes the element from the parser state.3Returns the name of the currently selected element.;This parser fails if there's no currently selected element. Doesn't modify the parser state.“Return the value of the requested attribute, if defined. May return an empty string in case the attribute is defined but no value was given to it.;This parser fails if there's no currently selected element.-Consumes the attribute from the parser state.’Returns all of the available element attributes. May return empty strings as values in case an attribute is defined but no value was given to it.;This parser fails if there's no currently selected element.QConsumes all of the remaining attributes for this element from the parser state.=Returns all of the immediate children of the current element.JIf parsing top-level nodes rather than a particular element (that is, if  is not being run inside ), then all of the top level s will be returned.9Consumes all of the returned nodes from the parser state.Return a text node value.XSurrounidng whitespace is not removed, as it is considered to be part of the text node.]If there is no text node at the current position, then this parser fails. This implies that  never returns an empty 5<, since there is no such thing as a text node without text.WPlease note that consecutive text nodes are always concatenated and returned together.    (  "Ha" <>   "sk" <>   "ell") == + (  Haskell) gThe returned text is consumed from the parser state. This implies that if you perform two consecutive $ calls, the second will always fail.   ( >> ) (  "Ha" <>   "sk" <>   "ell") == 3 "Missing text node" OSucceeds if all of the elements, attributes and text nodes have been consumed.Encodes a list of XML Us, representing an XML fragment body, to an UTF8-encoded and XML-escaped bytestring.lThis function doesn't render self-closing elements. Instead, all elements have a corresponding closing tag.SAlso, it doesn't render CDATA sections. Instead, all text is escaped as necessary.&Post-order depth-first replacement of  and all of its children.This function works like q, but the given function is trying to find a fixpoint for the individual children nodes, not for the root node.=For example, the following function renames every node named "w" to "y", and every node named "y" to "z"*. It accomplishes this by first renaming "w" nodes to "x", and then, by using k$ recursively to further rename all "x"6 nodes (including the ones that were just created) to "y"8 in a post-order depth-first manner. After renaming an "x" node to "y", the recursion stops (i.e., k is not used), so our new "y"$ nodes won't be further renamed to "z"!. However, nodes that were named "y" initially will be renamed to "z".šIn our example we only replace one node with another, but a node can be replaced with zero or more nodes, depending on the length of the resulting list. foo ::  -> [] foo =  $ \k -> \case  "w" as cs ->   "x" as cs >>= k  "x" as cs ->   "y" as cs  "y" as cs ->   "z" as cs >>= k See ( for pre-orderd depth-first replacement.WARNING If you call k in every branch, then | will never terminate. Make sure the recursion stops at some point by simply returning a list of nodes instead of calling k.Monadic version of .%Pre-order depth-first replacement of  and all of its children.This is just like . but the search proceeds in a different order.Monadic version of .6#The cursor if left where it starts.7,The cursor if left in the rightmost sibling.8 Builds a &> for navigating a tree. That is, a forest with a single root .9Retrieves a list of the Us at the same level as the current position of a cursor, including the current node.:,Removes the node to the right and return it.;Inserts a list of new 's to the right of the current position. Backtracks. Backtracks. Transform an  node. Transform a  node. Element' name. Attributes. Children. Element' name. Attributes. Children.    <      !"#$%&'()*+,-./01234/56/57/589/0:/5;<= >?@ABCD xmlbf-0.5-5g6NarWgWe7GcMV5yPRJGJXmlbf Data.FunctionfixToXmltoXmlParserFromXmlfromXmlNodeTextElementnodetexttext'elementelement' runParserpFailpElement pAnyElementpNamepAttrpAttrs pChildrenpText pEndOfInputencodedfposdfposMdfpredfpreM $fShowNode $fNFDataNode$fMonadPlusParser$fAlternativeParser$fMonadFailParser $fMonadParser$fApplicativeParser$fEqNode$fShowS$fFunctorParserCursor_cursorCurrent _cursorLefts _cursorRights_cursorParentsbase Data.EitherRightSSTopSRegGHC.Base Applicative AlternativeMonad normalizeLeftString text-1.2.3.0Data.Text.InternaltraverseChildrentraverseRightSiblingscursorFromNodecursorSiblingscursorRemoveRightcursorInsertManyRight