conduit-algorithms-0.0.8.2: Conduit-based algorithms

Copyright2013-2018 Luis Pedro Coelho
LicenseMIT
Maintainerluis@luispedro.org
Safe HaskellNone
LanguageHaskell2010

Data.Conduit.Algorithms

Description

Simple algorithms packaged as Conduits

Synopsis

Documentation

uniqueOnC :: (Ord b, Monad m) => (a -> b) -> ConduitT a a m () Source #

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 not assume that the input is sorted. Instead it uses a Set 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 removeRepeatsC

uniqueC :: (Ord a, Monad m) => ConduitT a a m () Source #

Unique conduit

See uniqueOnC and removeRepeatsC

removeRepeatsC :: (Eq a, Monad m) => ConduitT a a m () Source #

Removes repeated elements

 yieldMany [0, 0, 1, 1, 1, 2, 2, 0] .| removeRepeatsC .| consume

is equivalent to [0, 1, 2, 0]

See uniqueC and uniqueOnC

mergeC :: (Ord a, Monad m) => [ConduitT () a m ()] -> ConduitT () a m () Source #

Merge a list of sorted sources to produce a single (sorted) source

This takes a list of sorted sources and produces a Source which outputs all elements in sorted order.

See mergeC2

mergeC2 :: (Ord a, Monad m) => ConduitT () a m () -> ConduitT () a m () -> ConduitT () a m () Source #

Take two sorted sources and merge them.

See mergeC