LD     splitEvery n l is equivalent to :map (take n) (takeWhile (not . null) (iterate (drop n) l)), so  splitEvery n [x1,x2,..,xm] = [[x1,x2,..,x(n-1)],[xn,x(n+1),..,x(2n-1)] ,..,[..xm]]It is a good producer in the fold/build5 sense, but not a good consumer; the author believes  this is unavoidable.  !"#$%&'()$%()$%() ** is equivalent to floor . logBase 2<, but uses heavy bit manipulation to achieve maximum speed. ++ is equivalent to ceiling . logBase 2<, but uses heavy bit manipulation to achieve maximum speed. ,, is equivalent to  bit . intLog. -.//# is (unsurprisingly) equivalent to (2*). 0111 uses bit shifting to quickly find a power of 2. 2a 2 b is equivalent to  ceiling (a / b)", but uses integer division only. 3a 3 b is equivalent to  let m = a 4 b in if m == 0 then b else m. 5 *+,-./01235 *+,-./012356(f 6 g) x y is equivalent to  f (g x) (g y). 7onPair f (x, y) is equivalent to  (f x, f y). 8 (f .: g) x y is equivalent to  f (g x y). 9 switch x y p is equivalent to if p then x else y. :6789:6789: ;7A handy shorthand for a frequently occurring function. <comparing f (x y) is equivalent to compare (f x) (f y). =orderPairBy cmp (x, y) is equivalent to (if cmp x y == GT then (y, x) else (x, y). >orderPairBy cmp (x, y) is equivalent to if x <= y then (y, x) else (x, y). ? minBy cmp x y returns the smaller of x and y by the specified comparator. @ maxBy cmp x y returns the larger of x and y by the specified comparator. AlexCompare cmp1 cmp2; gives a comparator that lexicographically orders first by cmp1 then by cmp2. BCDEF GH;<=>?@ABDE ;<=>?@ABDE,IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstIJKMNPRUYZ[cdghijlmnoqrtIJKMNJKMNPRUYZ[cdghijlmnoqrt0uvwxyz{WThe type of a range-min function. Takes as an argument a range of indices and returns ? the position and value of the smallest element in that range. |}~bGiven a comparator, an index range and a list of elements in index order, returns a function that q takes two indices and returns the index and the value at the minimum value between those two indices inclusive. #A comparator function on elements.  Index range. !List of elements in index order. LGiven a subrange, returns the index and value at the minimum in that range.  A version of * on elements with their default ordering.  Index range. !List of elements in index order. LGiven a subrange, returns the index and value at the minimum in that range. [Given a comparator and an array, returns a function that takes a subrange of the array and > returns the index and value at the minimum in that subrange. #A comparator function on elements. An array of elements. LGiven a subrange, returns the index and value at the minimum in that range.  A version of * on elements with their default ordering.  SGiven an indexing function on node labels, returns a function that takes two node ? labels and returns the label of their lowest common ancestor. =An index on tree labels so they can be indexed on an array. : Need not account for every node label, hence the Maybe. "Bounds on indices of tree labels. 8The tree to provide lowest-common-ancestor service for. JGiven two node labels, returns the label of their lowest common ancestor. Given an indexing function on node labels, returns a function that takes two indices and returns the label of the associated nodes' lowest common ancestor. =An index on tree labels, so they can be indexed in an array. 9 Need not account for every node label, hence the Maybe. "Bounds on indices of tree labels. 8The tree to provide lowest-common-ancestor service for. ;Given two indices, return the label of the associated nodes' lowest common ancestor. Q The behavior of this method is not specified if these indices do not correspond  to any trees. qGiven a tree of indexed nodes, returns a function that takes two nodes and returns their lowest common ancestor. Bounds on node labels. 8The tree to provide lowest-common-ancestor service for. ]A function that takes two node labels and returns the label of their lowest common ancestor.            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN;OP;OQRSTUVWXYYZZ[\]^_`abcdefghijklmnopqrstuvwxyz{||}[~]rangemin-1.1.2 Data.RangeMin Data.RangeMin.Internal.HandyList#Data.RangeMin.Internal.HandyNumeric"Data.RangeMin.Internal.Combinators$Data.RangeMin.Internal.HandyOrdering!Data.RangeMin.Internal.HandyArray ComparatorRangeMin rangeMinBy' rangeMin'rangeMinValueBy'rangeMinValue' rangeMinByrangeMin rangeMinOptrangeMinValueBy rangeMinValue rangeMinByM rangeMinMlowestCommonAncestorBylowestCommonAncestorBy'lowestCommonAncestor BlockAccumBAAccA zipNaturals consecutives splitEvery splitEvery' unfoldrFBscanlFBtailerFBscanl1FBmebbescanrFBscanr1FB mapAccumLFB mapAccumRFB flattenFB unckdEFIntFB unckdEFDIntFB scanl1Eft reverseEft unsafeEftFB zeroEftFBzeroEft unsafeEftintLogceilLog floor2PowisPow2ceil2Powdoublehalfpow2divCeilmodCeilbaseGHC.RealmodquotRem'ononPair.:switchboth comparing orderPairBy orderPairminBymaxBy lexCompare lexComparingminimax listRangeBy listRange listRangeWith Data.List minimumBy maximumByMutArrnewArrreadArrwritewriteArrlookupSTBlankMUArrMArrIAProducerboxInblankIA fromBlank asPureArrayasMArrasMUArrdecr extractoraccmAccaccFmAccF unboxedLookupmLookmuLookrunArrrunIA mListArray mListUArray mFuncArray mFuncUArraymFuncArr listMArray listMUArray listMArray' listMUArray' listMArr' funcMArray funcMUArrayfuncMArr unsafeLookupIxrIntAccum RangeMinValoffset rangeSizeindexzeroEft'assocs'blockifyboxerunboxerunboxIn rangeMin3Look rangeMin2LookblockedRangeMin rangeMin1Look blockWidth catalanArrcatalanstackProcessorindexer rangeMin0Look rangeMinFuncinternalRangeMinBylazyInternalRangeMinBy initRangeMin lcaTraversal