úÎ/Ü*ç,      !"#$%&'()*+ Safe-InferredSpanning of a tree. AA 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. 0Map the first function over internal node value % and the second one over leaf value. 1Map one function over both node and leaf values. -Map function over each tree from the forest. Map function over the tree. 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.  %,-./0123456789:      Safe-Inferred;%A stateful monad for forest pruning. A graph over a sentence. 1Make a graph given the bounds and list of edges. 3Get keys of adjacent nodes for the given node key. 5Return all graph roots (i.e. nodes with no parents). <4Combine the disjoint forest with the list of words. 0 Discontinuities will be patched with no trace. >Transform graph into a disjoint forest, i.e. with no mutually  overlapping trees. ;=>?@<ABCDE;=>?@<ABCDE Safe-Inferred An - is the atomic label with additional marker. Inside marker Beginning marker !A ! consists of a list of atomic  labels. "An "8 data structure consists of a word with a corresponding  compound label. &'Encode the forest with the IOB method. F&Encode the tree using the IOB method. '(Decode the forest using the IOB method. G0Take iob elements as long as the top label doesn' t change. 5 Return obtained part together with the rest of iob.  !"#$%HIJKLM&F'G  !"#$%&' "#$%! &'  !"#$%HIJKLM&F'GNoneNGTODO: Use lazy text builder to avoid slowness in the pessimistic case. OGTODO: Use lazy text builder to avoid slowness in the pessimistic case. (Parse the enamex forest. )Parse the enamex file. PAFunction which determines between which two tag elements a space  character should be inserted. QFWe define our own groupBy because the standard version from Data.List + assumes that the predicate is transitive. *Show the forest. +Show the enamex file. RSTUVWXYZ[\NO()PQ]^_`*+()*+()*+RUTSVWXYZ[\NO()PQ]^_`*+a      !"#$%%&'()*+,-./0./1./2./3./4./5./6./7./8./9./:./;./<./=./>?@?ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcddata-named-0.4.0Data.Named.TreeData.Named.GraphData.Named.IOBText.Named.EnamexSpanbegendNeForestNeTreeonLeafonNodeonEitheronBoth mapForestmapTreeleafSpan<>spanSetspanspanTree spanForest unSpanTree unSpanForestsortTree sortForestGraphboundsedgeMapmkGraphedgesrootstoForestAtomIBLabelIOBwordlabel encodeForest decodeForest parseForest parseEnamex showForest showEnamexcontainers-0.5.0.0 Data.TreeunfoldForestM_BFunfoldTreeM_BF unfoldForestM unfoldTreeM unfoldForest unfoldTreelevelsflatten drawForestdrawTree subForest rootLabelNodeTreeForestRanMaddWordsrunRanMgeneratepruneruncontainsincludechop $fMonadRanM encodeTree followToppushpopMaybetopMaybepoprawisIunEscapeescapenoSpacegroupByTagBodyCloseOpenpForestpTreepLeafpNodepOpenTag pCloseTagpWord buildForest buildTree buildStreambuildTag