packages feed

conduit-merge 0.1.2.0 → 0.1.3.0

raw patch · 2 files changed

+39/−40 lines, 2 filesdep ~conduitdep ~mtlPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: conduit, mtl

API changes (from Hackage documentation)

- Data.Conduit.Merge: mergeSources :: (Ord a, Foldable f, Monad m) => f (Source m a) -> Producer m a
+ Data.Conduit.Merge: mergeSources :: (Ord a, Foldable f, Monad m) => f (ConduitT () a m ()) -> ConduitT i a m ()
- Data.Conduit.Merge: mergeSourcesOn :: (Ord b, Foldable f, Monad m) => (a -> b) -> f (Source m a) -> Producer m a
+ Data.Conduit.Merge: mergeSourcesOn :: (Ord b, Foldable f, Monad m) => (a -> b) -> f (ConduitT () a m ()) -> ConduitT i a m ()

Files

conduit-merge.cabal view
@@ -1,29 +1,25 @@-name: conduit-merge-version: 0.1.2.0-cabal-version: >=1.10-build-type: Simple-license: BSD3-license-file: LICENSE-copyright: 2016 Yuriy Syrovetskiy-maintainer: cblp@cblp.su-homepage: https://github.com/cblp/conduit-merge#readme-synopsis: Merge multiple sorted conduits-description:-    See README.md-category: Conduit-author: Yuriy Syrovetskiy--source-repository head-    type: git-    location: https://github.com/cblp/conduit-merge+name:           conduit-merge+version:        0.1.3.0+synopsis:       Merge multiple sorted conduits+description:    See README.md+homepage:       https://github.com/cblp/conduit-merge#readme+license:        BSD3+license-file:   LICENSE+author:         Yuriy Syrovetskiy+maintainer:     cblp@cblp.su+copyright:      2016 Yuriy Syrovetskiy+category:       Conduit+build-type:     Simple+cabal-version:  >= 1.10  library-    exposed-modules:-        Data.Conduit.Merge-    build-depends:-        base >=4.7 && <5,-        conduit >=1.2.6.6 && <1.3,-        mtl >=2.2.1 && <2.3+    build-depends:    base >= 4.7 && < 5+                    , conduit >= 1.3 && < 1.4+                    , mtl     default-language: Haskell2010-    hs-source-dirs: src+    exposed-modules:  Data.Conduit.Merge+    hs-source-dirs:   src +source-repository head+    location: https://github.com/cblp/conduit-merge+    type:     git
src/Data/Conduit/Merge.hs view
@@ -3,27 +3,30 @@ module Data.Conduit.Merge (mergeSources, mergeSourcesOn) where  import Control.Monad.Trans (lift)-import Data.Conduit        (Producer, Source, await, newResumableSource, yield, ($$++))+import Data.Conduit        (ConduitT, await, sealConduitT, yield, ($$++)) import Data.Foldable       (toList) import Data.List           (sortOn)  -- | Merge multiple sorted sources into one sorted producer.-mergeSources :: (Ord a, Foldable f, Monad m) => f (Source m a) -> Producer m a+mergeSources :: (Ord a, Foldable f, Monad m) => f (ConduitT () a m ()) -> ConduitT i a m () mergeSources = mergeSourcesOn id+{-# INLINE mergeSources #-}  -- | Merge multiple sorted sources into one sorted producer using specified sorting key.-mergeSourcesOn :: (Ord b, Foldable f, Monad m) => (a -> b) -> f (Source m a) -> Producer m a-mergeSourcesOn key = mergeResumable . fmap newResumableSource . toList-  where-    mergeResumable sources = do+mergeSourcesOn+    :: (Ord b, Foldable f, Monad m)+    => (a -> b) -> f (ConduitT () a m ()) -> ConduitT i a m ()+mergeSourcesOn key = mergeSealed . fmap sealConduitT . toList where+    mergeSealed sources = do         prefetchedSources <- lift $ traverse ($$++ await) sources         go [(a, s) | (s, Just a) <- prefetchedSources]-    go [] = pure ()-    go sources = do-        let (a, src1) : sources1 = sortOn (key . fst) sources-        yield a-        (src2, mb) <- lift $ src1 $$++ await-        let sources2 = case mb of-                Nothing -> sources1-                Just b  -> (b, src2) : sources1-        go sources2+    go sources =+        case sortOn (key . fst) sources of+            []                   -> pure ()+            (a, src1) : sources1 -> do+                yield a+                (src2, mb) <- lift $ src1 $$++ await+                let sources2 = case mb of+                        Nothing -> sources1+                        Just b  -> (b, src2) : sources1+                go sources2