Îõ³h$"M!?      !"#$%&'()*+,-./01 2 3 4 5 6 7 8 9 : ; < = >None'(5678>?ÀÁÂÅÉÔ×Ùàì‚DPutilsThis is a bit like a lazy  Data.SequenceË in terms of constructors. We can not be spine-strict, otherwise we'd use  Data.Sequence# and enjoy the better performance.DPutilsThis backtrace is doneDPutilsÔExpand a backtrace to the left. This is lazy, since backtracing relies on laziness.DPutilsExpand lazily to the right.DPutilsconcatenate two structures DPutils•This is somewhat tricky, since we might have to walk down the structure quite a bit and shuffle constructors without changing the actual leaf order.555None'(5678>?ÀÁÂÅÉÔ×ÙàìWDPutilsThe parsed function from streaming-utilsDPutilsAttoparsec parserDPutils Raw inputNone'(5678>?ÀÁÂÅÉÔ×ÙàìDPutilsSplit a ByteString m r after every k characters.Streams in constant memory.6BUG: Once the stream is exhausted, it will still call splitAt, forever creating empty  ByteStrings.DPutilsFor lists, this would be +sbs (f :: [a] -> ([a],[a])) -> [a] -> [[a]]–. Takes a function that splits the bytestring into two elements repeatedly, where the first is followed by the repeated application of the function.cf. áhttp://hackage.haskell.org/package/streaming-utils-0.1.4.7/docs/src/Streaming-Pipes.html#chunksOf4TODO these functions should go into a helper libraryNone'(5678>?ÀÁÂÅÉÔ×ÙàìWNone'(5678>?ÀÁÂÅÉÔ×ÙàìDPutilsThe string returned by > should be around 60 chars per line, and one line if possible.None '(5678>?ÀÁÂÅÇÉÔ×Ùàìy!DPutilsClamp values to >=0. ! !None'(5678>?ÀÁÂÅÉÔ×Ùàì b#DPutils5If the size of the input is known before-hand or not.&DPutils2Select only a subset of the possible enumerations.'DPutilsEnumerate all elements(DPutils#Enumerate from a value and at most N elements)DPutils7Shall we combine elements on the main diagonal as well? If we choose NoDiagÓ, we deal with upper triangular matrices that are effectively one element smaller. #%$&(')+* )+*&('#%$None'(5678>?ÀÁÂÅÉÔ×Ùàì T/DPutilsUpper triangular elements.0DPutilsOuter pairing of all as with all bs8. This one is quasi-trivial, but here for completeness. #$%&'()*+/0/0 None'(5678>?ÀÁÂÅÉÔ×Ùàì 1DPutilsTurns a stream into a vector.&TODO insert index checks? Generalized  flag devel11 None'(5678>?ÀÁÂÅÉÔ×Ùàì2DPutilsTriangular numbers. https://oeis.org/A0002173DPutils&Size of an upper triangle starting at i and ending at j+. "(0,N)" what be the normal thing to use.4DPutilsÀSubword indexing. Given the longest subword and the current subword, calculate a linear index "[0,..]". "(l,n)" in this case means "l"ower bound, length "n". And "(i,j)" is the normal index. ¢0 1 2 3 <- j = ... 0 1 2 3 i=0 _ 4 5 6 i=1 _ _ 7 8 i=2 9 i=3 i=2, j=3 -> (4+1) * i - tri i + j _ _ _ the triangular number to subtract. 5DPutilsLinear index to paired.We have indices in [0,N], and linear index k. (N+1)*i - (i*(i+1)/2) + j == K 23452345 None'(5678>?ÀÁÂÅÉÔ×Ùàìô6DPutilsÁGeneralized upper triangular elements. Given a list of elements  [e_1,...,e_k], we want to return pairs  (e_i,e_j)+ such that we have all ordered pairs with i?ÀÁÂÅÉÔ×ÙàìÂ7DPutilsÄEvaluates chunks of pipes elements in parallel with a pure function.8DPutilsÏEvaluates chunks of pipes elements in parallel with a pure function. Before and after each parallel step, a monadic function is run. This allows generation of certain statistics or information during runs.7DPutils*number of elements to evaluate in parallelDPutilswith which strategyDPutils!function to be mapped in parallel8DPutils*number of elements to evaluate in parallelDPutilswith which strategyDPutils pure function to run in parallelDPutilsfunction to run beforeDPutilsfunction to run after7878 None'(5678>?ÀÁÂÅÉÔ×Ùàì 8:DPutils&Splits bytestrings after each pattern patÈ. Tries to minimize the number of intermediate bytestring constructors.The following function ske expects a string str and a pattern pat< and then returns a tuple with the splitted bytestrings in fst and the return value in snd.The inner parser parse uses zoomð to draw the full inner producer, which should contain just one bytestring, namely one of the split off ones. parseÙ doesn't do anything with the inner producer, except returning the contained bytestring.parse returns Right $ concat xs on a correct parse, and Left []$ once the input has been exhausted. ¯ske :: ByteString -> ByteString -> ([ByteString],[ByteString],[ByteString]) ske pat str | BS.null pat || BS.null str = ([],[],[]) ske pat str = let parse = do xs <- zoom (splitKeepEnd pat) PP.drawAll case xs of [] -> return $ Left [] xs -> return $ Right $ BS.concat xs (a,(b,p)) = runIdentity . P.toListM' $ PP.parsed parse $ PP.yield str in (a,b, fst . runIdentity . P.toListM' $ p) ;DPutilsÁSplit a string into substrings, where each substring starts with pat+ and continues until just before the next pat$ (or until there is no more input).5Any prefix that does not start with the substring is kept!/Since each substring is supposed to start with patà, there is a small problem. What about a header that prefixes the string we are interested in?<DPutils/Generic splitting function. Takes a bytestring [a,b,c] (where a,b,c; are substrings of the bytestring!) and performs the split.<DPutilssplitter functionDPutilspattern to split onDPutils.lens into the individual split off bytestrings9:;<=9:;<=None'(5678>?ÀÁÂÅÉÔ×Ùàì! >DPutilsûOrphan instance providing a primitive monad instance for streams. Allows impurely folds into mutable vectors from streams.? !"#$%&'()*+,-./01234567889:;<=> ? @ A B C D E F G H I J KLÍ&DPutils-0.1.1.0-CBsIjLbirEiBL3eHsqPieqDP.Backtraced.Core$Data.Attoparsec.ByteString.StreamingData.ByteString.Streaming.SplitData.Char.Util Data.Info Data.Ord.FastData.Paired.CommonData.Paired.VectorData.Vector.Generic.UnstreamMath.TriangularNumbersData.Paired.FoldablePipes.ParallelPipes.Split.ByteStringStreaming.Primitive BacktracedEpsilonConsSnocAppend<||>><$fSerialmBacktraced$fSnocBacktracedBacktracedtyty'$fConsBacktracedBacktracedtyty'$fEqBacktraced$fOrdBacktraced$fShowBacktraced$fReadBacktraced$fGenericBacktraced$fFunctorBacktraced$fFoldableBacktraced$fTraversableBacktracedMessageparsedsplitsByteStringAtseparatesByteStringc2w8w82cInfoinfo $fInfoInt $fInfoVector $fInfo(,,) FastMinMaxfastminfastmaxclamp$fFastMinMaxIntSizeHint UnknownSize KnownSize EnumerateAllFromNOnDiagNoDiag $fEqSizeHint $fEqEnumerate $fEqOnDiag upperTriVG rectangularVGstreamToVectorMtriangularNumberlinearizeUppertritoLinear fromLinearupperTripipePar pipeParBALens' splitKeepEndsplitKeepStart splitGenericreferenceByteStringTokenizer$fPrimMonadStream