úÎTŠS     2018 Luis Pedro CoelhoMITluis@luispedro.orgNone<NV]write a Storable vector&This uses the same format as in-memorySee |readStorableV|read a Storable vector4This expects the same format as the in-memory vectorSee |writeStorableV|2013-2017 Luis Pedro CoelhoMITluis@luispedro.orgSafeN]ä0Act on the next input (do nothing if no input).  awaitJust f is equivalent to h do next <- C.await case next of Just val -> f val Nothing -> return () 'This is a simple utility adapted from Ahttp://neilmitchell.blogspot.de/2015/07/thoughts-on-conduits.html/Conduit analogue to Python's enumerate function%groupC yields the input as groups of n. elements. If the input is not a multiple of n%, the last element will be incompleteExample: 8 CC.yieldMany [0..10] .| groupC 3 .| CC.consumeList  results in &[ [0,1,2], [3,4,5], [6,7,8], [9, 10] ]!This function is deprecated; use 2013-2017 Luis Pedro CoelhoMITluis@luispedro.orgNone<NV]7ä  This is like E, except that each element is processed in a separate thread (up to  maxThreadsÙ can be queued up at any one time). Results are evaluated to normal form (not weak-head normal form!, i.e., the structure is deeply evaluated) to ensure that the computation is fully evaluated in the worker thread.}Note that there is some overhead in threading. It is often a good idea to build larger chunks of input before passing it to ' to amortize the costs. That is, when f" is not a lot of work, instead of  asyncMapC f, it is sometimes better to do = CC.conduitVector 4096 .| asyncMapC (V.map f) .| CC.concat where CC refers to   See  A version of ( which can reorder results in the stream‘If the order of the results is not important, this function can lead to a better use of resources if some of the chunks take longer to complete.See H with error handling. The inner function can now return an error (as a $). When the first error is seen, it  s in the main monad. Note that f¢ may be evaluated for arguments beyond the first error (as some threads may be running in the background and already processing elements after the first error).See ¼concatenates input into larger chunks and yields it. Its indended use is to build up larger blocks from smaller ones so that they can be sent across thread barriers with little overhead.Žthe chunkSize parameter is a hint, not an exact element. In particular, larger chunks are not split up and smaller chunks can be yielded too.^A simple sink which performs gzip compression in a separate thread and writes the results to h. See also  jCompresses the output and writes to the given file with compression being performed in a separate thread. See also  ÒA source which produces the ungzipped content from the the given handle. Note that this "reads ahead" so if you do not use all the input, the Handle will probably be left at an undefined position in the file. See also  WOpen and read a gzip file with the uncompression being performed in a separate thread. See also  oIf the filename indicates a gzipped file (or, on Unix, also a bz2 file), then it reads it and uncompresses it.=On Windows, attempting to read from a bzip2 file, results in .For the case of gzip,   is used. Maximum number of worker threadsFunction to execute Maximum number of worker threadsFunction to execute Maximum number of worker threadsFunction to execute chunk hint   2018 Luis Pedro CoelhoMITluis@luispedro.orgNone<NV]F( #Apply a function to groups of lines†Note that this is much more efficient than the (more or less equivalent, except that the intermediate lists can be of varying sizes): N CB.lines .| CC.conduitVector N .| CAlg.asyncMapC nthreads (f . V.toList) ãThe reason being that splitting into lines then becomes the bottleneck and processing a single line is typically a tiny chunk of work so that the threading overhead overwhelms the advantage of using multiple cores. Instead,  j will pass big chunks to the worker thread and perform most of the line splitting _in the worker thread_.ÈOnly Unix-style ASCII lines are supported (splitting at Bytes with value 10, i.e., n). When Windows lines (rn) are passed to this function, this results in each element having an extra r at the end.#Filter lines using multiple threads  2013-2017 Luis Pedro CoelhoMITluis@luispedro.orgSafeNQV]RèUnique conduit./For each element, it checks its key (using the a -> b; key function) and yields it if it has not seen it before.Note that this conduit does not5 assume that the input is sorted. Instead it uses a   } to store previously seen elements. Thus, memory usage is O(N) and time is O(N log N). If the input is sorted, you can use Unique conduitSee  and Removes repeated elements A yieldMany [0, 0, 1, 1, 1, 2, 2, 0] .| removeRepeatsC .| consume is equivalent to  [0, 1, 2, 0]See  and BMerge a list of sorted sources to produce a single (sorted) source3This takes a list of sorted sources and produces a - which outputs all elements in sorted order.See 'Take two sorted sources and merge them.See   !"#$%&'!()*+,-.1conduit-algorithms-0.0.7.1-BuyokkFDhyW9aQm5lzVaGg Data.Conduit.Algorithms.StorableData.Conduit.Algorithms.UtilsData.Conduit.Algorithms.Async(Data.Conduit.Algorithms.Async.ByteStringData.Conduit.AlgorithmsData.Conduit.ListchunksOfmap Data.Conduit CombinatorsDataSetwriteStorableV readStorableV awaitJust enumerateCgroupC asyncMapCunorderedAsyncMapCasyncMapEitherC asyncGzipToasyncGzipToFile asyncGzipFromasyncGzipFromFileconduitPossiblyCompressedFileasyncMapLineGroupsCasyncFilterLinesC uniqueOnCuniqueCremoveRepeatsCmergeCmergeC2base Data.EitherLeft mtl-2.2.1-DscMMmDQUE6GBfOSl4qMUHControl.Monad.Error.Class throwError bsConcatToGHC.ErrerrorasyncMapCHelper%conduit-1.2.13-1ljUUi3982eEA7BVPsL2LeData.Conduit.Internal.ConduitSource