úÎRÂK«3      !"#$%&'()*+,-./0120non-portable (MPTCs and functional dependencies) experimentalross@soi.city.ac.ukW34Finger trees with element type a", annotated with measures of type v. ' The operations enforce the constraint  v a. 56789:Things that can be measured. ;<=>?%View of the right end of a sequence. *the sequence minus the rightmost element,  and the rightmost element empty sequence $View of the left end of a sequence. .leftmost element and the rest of the sequence empty sequence @ABC Like D$, but with a more constrained type. EFG AMap all elements of the tree with a function that also takes the ? measure of the prefix of the tree to the left of the element. HIJ Like D7, but safe only if the function preserves the measure. K Like L$, but with a more constrained type. MNO 6Traverse the tree with a function that also takes the ? measure of the prefix of the tree to the left of the element. PQRLike L7, but safe only if the function preserves the measure. SO(1). The empty sequence. O(1). A singleton sequence. O(n)4. Create a sequence from a finite list of elements. O(1)0. Add an element to the left end of a sequence. A Mnemonic: a triangle with the single element at the pointy end. TO(1)1. Add an element to the right end of a sequence. A Mnemonic: a triangle with the single element at the pointy end. UO(1). Is this the empty sequence? O(1)&. Analyse the left end of a sequence. VWXO(1)'. Analyse the right end of a sequence. YZ[\O(log(min(n1,n2))). Concatenate two sequences. ]^_`abcdefO(log(min(i,n-i)))2. Split a sequence at a point where the predicate ) on the accumulated measure changes from g to h. ijklmnO(n). The reverse of a sequence. opq   0non-portable (MPTCs and functional dependencies) experimentalross@soi.city.ac.uk3Map of closed intervals, possibly with duplicates.  The r and s$ instances process the intervals in  lexicographical order. tuvwxyAA closed interval. The lower bound should be less than or equal  to the higher bound.  !;An interval in which the lower and upper bounds are equal. "O(1). The empty interval map. #O(1)%. Interval map with a single entry. $O(log n)". Insert an interval into a map. I The map may contain duplicate intervals; the new entry will be inserted 4 before any existing entries for the same interval. % O(m log (n/m)). Merge two interval maps. G The map may contain duplicate intervals; entries with equal intervals ! are kept in the original order. & O(k log (n/k))/. All intervals that intersect with the given % interval, in lexicographical order. ' O(k log (n/k))2. All intervals that contain the given interval,  in lexicographical order. ( O(k log (n/k))/. All intervals that contain the given point,  in lexicographical order. z O(k log (n/k))/. All intervals that intersect with the given % interval, in lexicographical order. {|}~  !"#$%&'(  !"#$%(&'   !"#$%&'(0non-portable (MPTCs and functional dependencies) experimentalross@soi.city.ac.uk)Priority queues. €‚ƒ„…†‡*O(1). The empty priority queue. +O(1). A singleton priority queue. ,O(log n)A. Add a (priority, value) pair to the front of a priority queue.  , k v q = . (+ k v) qIf q) contains entries with the same priority k, 1 of  , k v q" will return them after this one. -O(log n)@. Add a (priority, value) pair to the back of a priority queue.  - k v q = . q (+ k v)If q) contains entries with the same priority k, 1 of  - k v q# will return them before this one. .O(log(min(n1,n2)))#. Concatenate two priority queues.  . is associative, with identity *. ?If there are entries with the same priority in both arguments, 1  of . xs ys will return those from xs before those from ys. /O(n);. Create a priority queue from a finite list of priorities  and values. 0O(1)$. Is this the empty priority queue? 1O(1) ( O(log(n)) for the reduced queue).  Returns ˆ4 for an empty map, or the value associated with the @ minimal priority together with the rest of the priority queue.  1 * = ˆ 1 (+ k v) = ‰ (v, *)2O(1) ( O(log(n)) for the reduced queue).  Returns ˆ4 for an empty map, or the minimal (priority, value) 4 pair together with the rest of the priority queue.  2 * = ˆ 2 (+ k v) = ‰ ((k, v), *) If 2 qi = ‰ ((ki, vi), qi') and k1 <= k2,  then 2 (. q1 q2) = ‰ ((k1, v1), . q1' q2)  If 2 qi = ‰ ((ki, vi), qi') and k2 < k1,  then 2 (. q1 q2) = ‰ ((k2, v2), . q1 q2') Š )*+,-./012 )*+.,-/012 )*+,-./012‹      !!"#$%&'()*%+&,-../0123456789:;<=>?@ABCDEFG>HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefdeghijklmnop>qr>Hs ttu22vwxyz{*||}~~€>‚>ƒ„…fingertree-0.0.1.0Data.FingerTreeData.IntervalMap.FingerTreeData.PriorityQueue.FingerTree FingerTreeMeasuredmeasureViewR:>EmptyRViewL:<EmptyLfmap' fmapWithPos unsafeFmap traverse'traverseWithPosunsafeTraverseempty singletonfromList<||>nullviewlviewr><split takeUntil dropUntilreverse IntervalMapIntervallowhighpointinsertunion intersections dominatorssearchPQueueaddminViewminViewWithKeySplitDeepSingleEmptyNodeNode3Node2DigitFourThreeTwoOnenode2node3 nodeToDigitdeepbaseGHC.BasefmapmapTreemapNodemapDigit mapWPTree mapWPNode mapWPDigitunsafeFmapNodeData.Traversabletraverse traverseTree traverseNode traverseDigittraverseWPTreetraverseWPNodetraverseWPDigitunsafeTraverseNode consDigit snocDigitrotL lheadDigit ltailDigitrotR rheadDigit rtailDigit digitToTree appendTree0 addDigits0 appendTree1 addDigits1 appendTree2 addDigits2 appendTree3 addDigits3 appendTree4 addDigits4ghc-prim GHC.TypesFalseTrue splitTree mappendValdeepLdeepR splitNode splitDigit reverseTree reverseNode reverseDigit Data.FoldableFoldable Traversable IntInterval NoIntervalinRangeatleastgreatermkMap composersmathematiciansPrioNoPrioEntrykeyvalue Data.MaybeNothingJustbelow