úÎ6u0½<      !"#$%&'()*+,-./0123456789:;SafeSpanning of a tree.@A forest with a values in internal nodes and b values in leaves.>A tree with a values in internal nodes and b values in leaves.!Map function over the leaf value.*Map function over the internal node value.TMap the first function over internal node value and the second one over leaf value. 0Map one function over both node and leaf values. ,Map function over each tree from the forest. Map function over the tree. 9Group leaves with respect to the given equality function. 9Group leaves with respect to the given equality function.9Group leaves with respect to the given equality function.9Group leaves with respect to the given equality function.Make span for a leaf node.*Minimum span overlapping both input spans.%Set of positions covered by the span.$Get span of the span-annotated tree.`Annotate tree nodes with spanning info given the function which assignes indices to leaf nodes.)Annotate forest nodes with spanning info.&Remove span annotations from the tree.(Remove span annotations from the forest.,Sort the tree with respect to spanning info..Sort the forest with respect to spanning info. )<=>?@ABCDEFGHIJ    SafeKFTODO: Use lazy text builder to avoid slowness in the pessimistic case.LFTODO: Use lazy text builder to avoid slowness in the pessimistic case.Parse the enamex forest.Parse the enamex file.M_Function which determines between which two tag elements a space character should be inserted.NpWe define our own groupBy because the standard version from Data.List assumes that the predicate is transitive.Show the forest. Show the enamex file.OPQRSTUVWXYKLMNZ[\]   OPQRSTUVWXYKLMNZ[\] Safe2 !An !, is the atomic label with additional marker."Beginning marker#Inside marker $A $ consists of a list of atomic ! labels.%An %H data structure consists of a word with a corresponding compound label.)&Encode the forest with the IOB method.^%Encode the tree using the IOB method.*'Decode the forest using the IOB method._qTake iob elements as long as the top label doesn't change. Return obtained part together with the rest of iob.!"#$%&'(`abcde)^*_+ !#"$%&(')* %&'($!"#)*!"#$%&'(`abcde)^*_+Safe(/2f$A stateful monad for forest pruning.1A graph over a sentence.50Make a graph given the bounds and list of edges.62Get keys of adjacent nodes for the given node key.74Return all graph roots (i.e. nodes with no parents).gcCombine the disjoint forest with the list of words. Discontinuities will be patched with no trace.8²Transform a graph into a disjoint forest, i.e. a forest with no mutually overlapping trees. The process is lossy, discontinuity and overlapping cannot be represented with the  data type.fhi1234567jkg8lmno9:1234567812345678fhi1234567jkg8lmno9:p      !"#$%&'())*+,-./01234456789:;<=>?@>?A>?B>?C>?D>?E>?F>?G>?H>?I>?J>?K>?L>?M>?NOPQRSTUVWXYZ[\]^_`abcdefghijkjlmnopqrs'data-named-0.6.1-KaEK7IbQ5RfGLXkfIUXR6EData.Named.TreeText.Named.EnamexData.Named.IOBData.Named.GraphSpanbegendNeForestNeTreeonLeafonNodeonEitheronBoth mapForestmapTreegroupForestLeavesgroupTreeLeavesconcatForestLeavesconcatTreeLeavesleafSpan<>spanSetspanspanTree spanForest unSpanTree unSpanForestsortTree sortForest $fShowSpan$fEqSpan $fOrdSpan parseForest parseEnamex showForest showEnamexAtomBILabelIOBwordlabel encodeForest decodeForest $fBinaryAtom $fShowAtom$fEqAtom $fOrdAtom $fFunctorAtom $fShowIOBGraphboundsedgeMapmkGraphedgesrootstoForest $fMonadRanM$fApplicativeRanM $fFunctorRanMcontainers-0.5.7.1 Data.TreeunfoldForestM_BFunfoldTreeM_BF unfoldForestM unfoldTreeM unfoldForest unfoldTreelevelsflatten drawForestdrawTreeTreeNode rootLabel subForestForestunEscapeescapenoSpacegroupByTagOpenCloseBodypForestpTreepLeafpNodepOpenTag pCloseTagpWord buildForest buildTree buildStreambuildTag encodeTree followToppushpopMaybetopMaybepoprawisIRanMaddWordsrunRanMgeneratepruneruncontainsincludechop