úÎ!c£aÍ!           None >DHSVXÒDPutilsThe parsed function from streaming-utilsDPutilsAttoparsec parserDPutils Raw inputNone >DHSVX wDPutilsSplit 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. ahttp://hackage.haskell.org/package/streaming-utils-0.1.4.7/docs/src/Streaming-Pipes.html#chunksOf4TODO these functions should go into a helper librarySafe >DHSVXSafe >DHSVXŸ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 NoDiagS, we deal with upper triangular matrices that are effectively one element smaller.    None >DHSVX£DPutilsUpper triangular elements.DPutilsOuter pairing of all as with all bs8. This one is quasi-trivial, but here for completeness.  None >DHSVXÇDPutilsTurns a stream into a vector.&TODO insert index checks? Generalized  flag develSafe >DHSVX$jDPutilsTriangular numbers. https://oeis.org/A000217DPutils&Size of an upper triangle starting at i and ending at j+. "(0,N)" what be the normal thing to use.DPutilsÀ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. DPutilsLinear index to paired.We have indices in [0,N], and linear index k. (N+1)*i - (i*(i+1)/2) + j == K None >DHSVXDHSVXFoDPutilsDEvaluates chunks of pipes elements in parallel with a pure function.DPutilsÏ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.DPutils*number of elements to evaluate in parallelDPutilswith which strategyDPutils!function to be mapped in parallelDPutils*number of elements to evaluate in parallelDPutilswith which strategyDPutils pure function to run in parallelDPutilsfunction to run beforeDPutilsfunction to run after None >DHSVXa¡DPutils&Splits bytestrings after each pattern patH. 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 zoomp to draw the full inner producer, which should contain just one bytestring, namely one of the split off ones. parseY 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) DPutilsASplit 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 bytestrings  !    !"# $ % & ' ( ) *+&DPutils-0.0.2.0-6j8snVb9LnE1v8IKBGufWM$Data.Attoparsec.ByteString.StreamingData.ByteString.Streaming.SplitData.Char.UtilData.Paired.CommonData.Paired.VectorData.Vector.Generic.UnstreamMath.TriangularNumbersData.Paired.FoldablePipes.ParallelPipes.Split.ByteStringMessageparsedsplitsByteStringAtseparatesByteStringc2w8w82cSizeHint UnknownSize KnownSize EnumerateAllFromNOnDiagNoDiag $fEqOnDiag $fEqEnumerate $fEqSizeHint upperTriVG rectangularVGstreamToVectorMtriangularNumberlinearizeUppertritoLinear fromLinearupperTripipePar pipeParBALens' splitKeepEndsplitKeepStart splitGenericreferenceByteStringTokenizer