úÎ2'- .      !"#$%&'()*+,- 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. :Group leaves with respect to the given equality function. :Group 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.  './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. =?@AB>CDEFG=?@AB>CDEFG 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. H&Encode the tree using the IOB method. )(Decode the forest using the IOB method. I0Take iob elements as long as the top label doesn' t change. 5 Return obtained part together with the rest of iob.  !"#$%&'JKLMNO(H)IP !"#$%&'() $%&'# "!() "!#$%&'JKLMNO(H)IPNoneQGTODO: Use lazy text builder to avoid slowness in the pessimistic case. RGTODO: Use lazy text builder to avoid slowness in the pessimistic case. *Parse the enamex forest. +Parse the enamex file. SAFunction which determines between which two tag elements a space  character should be inserted. TFWe define our own groupBy because the standard version from Data.List + assumes that the predicate is transitive. ,Show the forest. -Show the enamex file. UVWXYZ[\]^_QR*+ST`abc,-*+,-*+,-UXWVYZ[\]^_QR*+ST`abc,-d      !"#$%&''()*+,-./01201301401501601701801901:01;01<01=01>01?01@ABACDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgdata-named-0.5.1Data.Named.TreeData.Named.GraphData.Named.IOBText.Named.EnamexSpanbegendNeForestNeTreeonLeafonNodeonEitheronBoth mapForestmapTreegroupForestLeavesgroupTreeLeavesleafSpan<>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 followToppushpopMaybetopMaybepoprawisI $fBinaryAtomunEscapeescapenoSpacegroupByTagBodyCloseOpenpForestpTreepLeafpNodepOpenTag pCloseTagpWord buildForest buildTree buildStreambuildTag