Îõ³h&3Ã2=      !"#$%&'()*+,-./0123456789:;< Safe-Inferred"(ÁÃÄÅÌ×Üãë1¶5=xmlbfZipper into a  tree.>xmlbf Retrieves the current node of a Cursor.?xmlbf*Nodes to the left (ordered right to left).@xmlbf+Nodes to the right (ordered left to right).Axmlbf(Parents' name, attributes, and siblings.xmlbfRenders a value of type a into an XML fragment body.If a  instance for a exists, then:   ( a) == B a xmlbf a is a type synonym for  C a.xmlbfXML parser for a value of type a. This parser runs on top of some D m , making  a suitable monad transformer.You can build a  using , , , , , , , , any of the E, F or D combinators, or you can use  directly.Run a  using ,  or xmlbfInternal parser state.GxmlbfParsing the top-level nodes.Hxmlbf"Parsing a particular root element.xmlbf1Parses an XML fragment body into a value of type a.If a  instance for a exists, then:   ( a) == B a xmlbf9Either a text or an element node in an XML fragment body.Construct with  ,  or .Destruct with ,   or  .xmlbfDestruct a text  into a strict I. case n :: Node of  t -> ... _ -> ... xmlbfDestruct a text  into a lazy J. case n :: Node of   tl -> ... _ -> ... xmlbfDestruct an element . case n :: Node of   t as cs -> ... _ -> ... xmlbfCase analysis for a .Kxmlbf Normalizes s by concatenating consecutive  nodes. xmlbf7Construct a XML fragment body containing a single text  , if given I not empty.ÍThis 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  é is recommended, so that you are forced to acknowledge a failing situation in case it happens. However,  à is at times more convenient to use. For example, when you know statically the input is valid. xmlbfConstruct a text  , if given I not empty.Returns L if the  / can't be created, with an explanation of why.xmlbf A version of   working with lazy J.xmlbf A version of   working with lazy J.xmlbf2Construct a XML fragment body containing a single   , if possible.ÍThis 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 é is recommended, so that you are forced to acknowledge a failing situation in case it happens. However, Ë is at times more convenient to use, whenever you know the input is valid.xmlbf Construct an   .Returns L if the   / can't be created, with an explanation of why.xmlbfConstruct an initial  to use with  from zero or more top-level s.xmlbf' is the most general way or building a . Notice that  ParserState'ás internals are not exported, so you won't be able to do much with it other than pass it around.  .  == M xmlbf& is the most general way or running a .As a simpler alternative to , consider using  , or even . if you don't need transformer functionality. Notice that  ParserState'ás internals are not exported, so you won't be able to do much with it other than pass it around.  .  == M xmlbfRun a  on an XML fragment body.òNotice that this function doesn't enforce that all input is consumed. If you want that behavior, then please use  in the given .xmlbfPure version of .NxmlbfA 0 that always fails with the given error message.xmlbf "foo" p runs a  p inside a   node named "foo". This parser fails9 if such element does not exist at the current position.êLeading whitespace is ignored. If you need to preserve that whitespace for some reason, capture it using  before using .Consumes the matched element from the parser state.xmlbf p runs a  p inside the  Û 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 î. However, if you already know beforehand the name of the element that you want to match, it's better to use  rather than .êLeading whitespace is ignored. If you need to preserve that whitespace for some reason, capture it using  before using .Consumes the matched element from the parser state.xmlbf+Returns the name of the currently selected  . This parser fails" if there's no currently selected   (see , ). Doesn't modify the parser state.xmlbfÄReturn the value of the requested attribute, if defined, as strict I . Returns an O strict IÀ in case the attribute is defined but no value was given to it. This parser fails" if there's no currently selected   (see , ).Consumes the matched attribute from the parser state.xmlbf0Returns all of the available element attributes.Returns O strict IÉ as values in case an attribute is defined but no value was given to it. This parser fails" if there's no currently selected   (see , ).Consumes all the attributes( for this element from the parser state.xmlbf=Returns all of the immediate children of the current element.ÊIf 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.Consumes all the returned nodes from the parser state.xmlbf0Returns the contents of a text node as a strict J.ØSurrounidng 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 strict I;, since there is no such thing as a text node without text.×Please note that consecutive text nodes are always concatenated and returned together.   (  "Ha" <>   "sk" <>   "ell") == B (  Haskell) Consumes the textÊ from the parser state. This implies that if you perform two consecutive $ calls, the second will always fail.  ( >> ) (  "Ha" <>   "sk" <>   "ell") == L "Missing text node" xmlbfLike , but returns a lazy J.xmlbfÏSucceeds if all of the elements, attributes and text nodes have been consumed. xmlbfEncodes a list of XML Õs, representing an XML fragment body, to an UTF8-encoded and XML-escaped bytestring.ìThis function doesn't render self-closing elements. Instead, all elements have a corresponding closing tag.ÓAlso, it doesn't render CDATA sections. Instead, all text is escaped as necessary.6Element attributes are rendered in alphabetical order.!xmlbf&Post-order depth-first replacement of  and all of its children.This function works like ñ, 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."xmlbfMonadic version of !.#xmlbf%Pre-order depth-first replacement of  and all of its children.This is just like !. but the search proceeds in a different order.$xmlbfMonadic version of #.Pxmlbf#The cursor if left where it starts.Qxmlbf,The cursor if left in the rightmost sibling.Rxmlbf Builds a Cursor> for navigating a tree. That is, a forest with a single root .SxmlbfRetrieves a list of the Õs at the same level as the current position of a cursor, including the current node.Txmlbf,Removes the node to the right and return it.UxmlbfInserts a list of new 's to the right of the current position.2xmlbfV ma mb5 backtracks the internal parser state before running mb.6xmlbfma W mb5 backtracks the internal parser state before running mb.7xmlbfThe D! superclass is necessary because  shortcircuits like .xmlbfStrict I. xmlbfLazy J. xmlbfElement name as strict I.xmlbf&Pairs of attribute names and possibly O values, as strict I.xmlbfElement children. xmlbf Transform an   node.xmlbf Transform a   node. xmlbfStrict I. xmlbfStrict I.xmlbfLazy J.xmlbfLazy J.xmlbfElement name as a strict I.xmlbf&Pairs of attribute names and possibly O values, as strict I.xmlbf Children.xmlbfElement name as a strict I.xmlbf&Pairs of attribute names and possibly O values, as strict I.xmlbf Children.xmlbf+Given a parser's internal state, obtain an a" if possible, otherwise return a XÉ describing the parsing failure. A new state with leftovers is returned.xmlbfParser to run.xmlbf0Initial parser state. You can obtain this from ! or from a previous execution of .xmlbf1Returns the leftover parser state, as well as an a' in case parsing was successful, or a X! with an error message otherwise.xmlbfParser to run.xmlbf3XML fragment body to parse. That is, top-level XML s.xmlbfIf parsing fails, a X with an error message is returned. Otherwise, the parser output a is returned.xmlbfParser to run.xmlbf3XML fragment body to parse. That is, top-level XML s.xmlbfIf parsing fails, a X with an error message is returned. Otherwise, the parser output a is returned.xmlbfElement name as strict I.xmlbf to run inside the matched  .xmlbf to run inside any matched  .xmlbfElement name as strict I.xmlbfAttribute name as strict I.xmlbfAttribute value as strict I , possibly O.xmlbf&Pairs of attribute names and possibly O values, as strict I.xmlbfs in their original order.xmlbf%Content of the text node as a strict I.xmlbf#Content of the text node as a lazy J.%  !"#$%   !"#$Ù      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJHKLHMNHMOHMPQRSTSUVHIWHMXYSTZ[\]^_`HMaHMbHMcäxmlbf-0.7-7QHouwsLiU99vNjXM2v4oXmlbf Data.FunctionfixControl.Monad.Trans.ExceptExceptTToXmltoXmlParserParserT ParserStateFromXmlfromXmlNodeTextTextLazyElementnodetexttext'textLazy textLazy'elementelement'initialParserStateparserT runParserTparseMparsepElement pAnyElementpNamepAttrpAttrs pChildrenpText pTextLazy pEndOfInputencodedfposdfposMdfpredfpreM $fShowNode $fNFDataNode$fMonadMaskParserT$fMonadCatchParserT$fMonadThrowParserT$fMonadErroreParserT$fMonadStatesParserT$fMonadReaderrParserT$fMonadIOParserT$fMFunctorTYPEParserT$fMonadTransParserT$fMonadZipParserT$fMonadFixParserT$fMonadPlusParserT$fMonadFailParserT$fMonadParserT$fSelectiveParserT$fAlternativeParserT$fApplicativeParserT$fFunctorParserT$fMonoidParserT$fSemigroupParserT$fEqParserState$fEqNodeCursor_cursorCurrent _cursorLefts _cursorRights_cursorParentsbase Data.EitherRightData.Functor.IdentityIdentityGHC.BaseMonad Applicative AlternativeSTopSReg text-1.2.5.0Data.Text.InternalData.Text.Internal.Lazy normalizeLeftidpFailemptytraverseChildrentraverseRightSiblingscursorFromNodecursorSiblingscursorRemoveRightcursorInsertManyRightmplus<|>String